I believe that every developer that works for someone has at least thought of becoming an Independent Developer at some point in his/her career. If I had to sum up the reason why, I’d pick these:
1. The freedom to pick the projects that you work on.
2. The ability to avoid worthless meetings.
3. Saying goodbye to incompetent co-workers.
4. Being able to do the project the ‘right’ way. (Which is typically your way - hopefully)
5. Getting the full reward for the skills you possess. I’m talking money here.
A few others reasons that would probably be:
• A more relaxed dress code. (Why the hell should you wear nice khaki’s and dress shirts if you never see your customer?)
• Making intelligent decisions on the hardware/software for your company.
I also believe that most full-time developers fear the following things related to being self-employed:
• Running out of money – Family responsibilities. What happens if I run out of jobs?
• What happens if I get stuck with a programming/database question?
• Gathering specs and working directly with the customer.
• Giving estimates, finding new clients and invoicing. Pretty much anything related to the business side of self-employment.
• Dealing with demanding, hard to please customers.
So, what should you do? My personal belief is to keep your full-time job and try out self-employment on the side. That’s exactly what I did and I wanted to share my experience with you.
After college, it was pretty much a given that I needed to be out of my parents’ house and find a reliable job. Not because my parents wanted me out, but because I wanted to be on my own. So, I opened the paper, sent out a pile of resumes and crossed my finger that someone would call. Finally, I got the call and the job. I started working a full-time job for $30K a year and I was ecstatic. I finally fit into corporate America. So, here is what a typical work day consisted of:
• 3-4 meetings per day. (Most of the meetings did not involve my work, but I was told that I needed the exposure.)
• Being pulled into conversations because the people in charge would not hold other employees accountable.
• Constantly having other coworkers asking me questions of things they should know.
• At the end of the day, I probably had about 1-2 hours of MY work completed.
I started to think well maybe it’s just this organization. If I leave it then I will find others organizations aren't this dysfunctional and I will be working with highly functional people… right? So, I took another job and found the same thing. Wait, hold on… maybe I’m just an asshole and it’s me and not them. I would usually find 3-4 intelligent people at each company. After a while, we would discuss this and I found out that I’m not alone with the way that I’m thinking. It was the ‘accepted’ culture in most companies. The only way to deal with it is ignore it or try to change it. If you try to change it, you risk your reputation and burn just about every bridge you have with a company. I needed to at least get a taste of the outside world.
I decided to take a shot at becoming an Independent Developer while maintaining my full-time job. I am going to list the challenges that I faced and hopefully it gives you the reader a better perspective on doing the same.
Getting the first job
The way that I did it: I first tried the typical approach of products that I had developed that added functionality to existing applications. Several phone calls and emails later, it had landed me nothing. I jumped on the internet and picked random clients that I thought I could offer a solution – again nothing. Finally, I found an organization that had a convoluted process and sent an email proposing a better way. I didn’t hear back for several months, and then got an email saying that they wanted to do it. So, I had my first independent job.
Thoughts after the fact:
I believe it would have been better if I used social networking to get the job. Finding a few people that are deep in the industry and already have clients that trust them would have been a great way to start. The only downside is that those people are probably your competitors. They may or may not have enough work to go around.
Creating the requirements document and early prototyping:
The way that I did it: As far as requirements, it was with a few phone calls and a majority of emails. I put together a SketchFlow 4 document, because I wanted to try it out and overall I think it went great (the rapid prototyping part). Unfortunately, the final application looked completely different than the sketches.
Thoughts after the fact:
I believe that I failed on this one pretty bad. My original SketchFlow design did contain requirements, but I didn’t hold the customer to them. They also never signed off on it. I was hammered by this because they changed the requirements after several weeks of development. My being a nice
person, I mean idiot, I did not charge them enough for this. In the future, I would give the customer formal requirements and ask them for a signature that binds them to it. I will not start development until its sign, sealed and delivered. If they change after that, it’s going cost them.
Software Design and Database Architecture of the application:
The way that I did it: This was the part that I was looking forward to the most. I jumped into programming it because I thought that since I had already did the sketches/requirements that I was ready to code. I was not… mainly because I had constantly changing requirements, so the application started to look like a mess. To start with, I am not a database guy. So, I struggled with designing the database schema. In most projects that I’ve worked on at work, the database is usually handled by the DBA and I just consume the data. As far as the C# code part, I was able to build the application myself with few problems. The problems that I did have, I could usually find the answer on the internet or post a question and wait for the response.
Thoughts after the fact: I have only been involved in creating simple database tables. If this had of been something difficult then I would have been in trouble. It made me realize that I need to know more about databases. Not enough for a DBA title, but enough to get me through more complex jobs. The issue that I encountered with C# would have been easier if I could have asked someone and got an instant answer. I found that some forums/q&a sites take days to respond. Sometimes, the answer is just enough for that user to get credit or badges on the forum. So, they may not be answering your question with accuracy but trying to up their post count.
Deployment and maintenance of the application:
The way that I did it: I did all the testing myself, with some help from my wife. I knew exactly how my application worked and couldn’t imagine someone breaking it. I started to see things that could be improved, so I asked my wife to help out with testing. I gave her my app and said, break it. While she found a few things wrong, it was nothing a regular expression or two could not handle. So the app doesn’t break, what about the browser? I am an early adopter, so I am already using the latest version of most browsers on my computers. I am aware that most users stay on whatever browser that comes with the OS, but I thought most people should be on IE7 or >. I quickly learned most of my users would be using IE6. I didn’t even have a computer with IE6 on it for real testing, so I used Microsoft Expression Web 4 SuperPreview. I noticed that my app was having problems with IE6. Any browser that was 2-3 years old was working properly. Thankfully, I found a fix and was able to work around it. The only thing that I worry about is the new wave of browser wars coming up.
Thoughts after the fact: I am used to handing off an app to QA or another team and they report bugs. Doing all of this myself has taught me that I need more testing experience.
Invoicing and reporting hours worked.
The way that I did it: Unfortunately, I didn’t keep track of my hours in an online journal. So, I had no idea of how many hours that I actually worked. This was going to be a huge mistake as I couldn’t accurately tell the client what I was doing for every hour. For invoicing, I used Microsoft Office 2010 Templates and found a generic invoice and used that. I converted the invoice into PDF file using PrimoPDF. This application is free and does not include a watermark. I also think that PDF files are the standard in billing.
Thoughts after the fact: I should have logged every hour and a short description of what I was doing into a notebook or online document. That way, instead of sending an invoice with one line item, I could show the customer what I was doing each and every hour they were paying me.
I feel that I learned more from this process than any book, course or educational video could possibly teach me. The following is a list of the steps that you will be involved in if you are the sole person running your software development business:
1. Acquiring the job
2. Planning the project
Of course, being self-employed does not mean that you have to do everything yourself. You can hire whomever you wish but just starting out you will probably be on your own.
I have definitely seen the pros and cons of self-employment. I am however, convinced that I will be giving this a shot again. I am not sure if 5 years from now, I will be linking to this post showing people that you can make it. But, you learn by doing, and I will be trying my best to do this again.