Why starting as a freelance software dev isn't always a good idea? Or is it?
So you are young and energetic wannabe developer. Your head is full of ideas, stackoverflow is your bible and you are ready to face the struggles of software developement for money. Cool! Let me tell you something.
Where do we start?
You learn at the university or other school, you feel better in coding every month and the truth is you'd like to start with your career as soon as possible, but going to work everyday doesn't feel tempting for now, despite your lack of experience. But hey! You got some friends and friends got other friends that need some small work done for a small money, why not start there?
Feels good, doesn't it?
Your first money, earned with your technical skills. First time when you feel programming is going to work for you pretty well. What have you done exactly? Your friend wanted a simple website for his company? You probably had some hard time, your first client didn't tell you everything he want on the website and he changed his mind couple of times. But it doesn't matter now, your job is finished and you can continue with your life.
After a few jobs like this you're starting to learn patterns and observe important factors. You have a little more experience, you're struggling less with your job. It all becomes kind of a routine. You either learned some universal ways to deal with the usual problems in the software development (big expression for that kind of work) or just figured your own out. It's good. You still learn, but of course a little less than in the beginning. Sometimes you score a bigger fish, not another wordpress website. It can be a job for a month or two of coding for you, you are not even sure how much money to take for it. Whatever it is, the first bigger fish is another big power leveling. You code and learn simultaneously. When you finish you know a lot more than at the beginning of the project, and you earned more money than normally - epic win! Of course you are happy the project is over, because you didn't have much time for the university, social life or gaming. So you stop working for a while, you need to make up for the lost time and obviously rest a while. After some time you come back to work. The circle begin over and over again.
Time has passed
Okay, so where do I go with this monologue? Let's say a year or two passed. You feel quite confident in what you do, you do some web or mobile development job from time to time and score something bigger once in a few months. Whether you look for a new clients or not, there is always something to do. The problem is, it's all the same over and over again. I know, you could use a new framework this time, it looks nice and cool. The problem is you need this money fast and there is a bunch of other stuff to take care of. Why don't you use the good, old patterns and tools this time and learn something new next time when you will have more time. Yeah, right.
And here we are, finally got to the point. Of course you are better and better each time you finish a project. Don't you have that awful/weird feeling when you look at your code from the previous project? You are still evolving very quickly! The point is, if you are not lucky, combative and in possession of some time and balls to go more into the deep at some point - you will be stuck with the same kind of projects all the time. Easy money - boring as hell. Besides, there are some phisical limits, in some projects you just need a team. Not every project is for a freelancer. I was at that point one year ago, just after finishing bachelor degree from computer science. I wasn't really thinking about what should I do with this problem. I already had my one person business, sometimes I outsourced work or hire friends to help me, but the truth is I was bored to death. To be honest I didn't have time to work on my own projects. I started studying to get my master degree in the meantime. Somehow it happened that in the summer I applied for the internship at one of the software companies. I was confident, even arrogant, enough to think I know quite a lot - so I wasn't really excited about it. Curious I would say, I wanted something new, see something from another perspective. Of course I was all wrong about my knowledge and experience. The truth is: this internship was the best thing that could ever happen. It helped me to acknowledge my incompetence and that's a very important skill to have.
In two months I learned more than for the last year. Of course I wasn't a total loser, it's not like I didn't have any experience or knowledge at all! Through the years of my studies and freelancing I gathered pretty good general knowledge about programming, it's not what I was lacking. When you live and work as a lone wolf you don't see the problems of living in a pack. Therefore you don't look for solutions. You don't work for a huge corporations, your projects are rather small, it's all that one person can handle after all. So you don't see a whole other category of problems. Therefore, you don't look for the solutions hence you don't know how to deal with them. For me personally - to move forward with my experience - the trigger was needed.
After the internship I've stopped looking for clients, I've had chosen just a few of them and I still work for them from time to time, but what's most important I've started working as a part of a regular development team in the company I had internship. And I don't regret it. In the first half of the year I learned so much I wouldn't imagine before. The problem is, even though you have some documented experience as a freelancer and started working when your classmates was thinking only about another incoming party or exam, it doesn't really count. You will be perceived as a regular junior. Regular junior making an outstanding impression in technical and business knowledge (still for a junior), but your lacks of experience in teamwork and corporate environment are too big for anything else. Of course, there will be exceptions, but that's how it usually goes. When you compare to people that started in a regular job, not as a freelancer, they can be even a level above you in a hierarchy. But what you learned by yourself is yours. Now, should we decide what is better for as - young people entering the market?
So in the end
What is better then? Start as a freelancer or get a job as a developer? The answer is as always: it depends. There are many factors, both options have pros and cons. For example, I learned a lot about programming by myself. My knowledge is not that ordered as it could be if i'd start as a junior developer from the beginning, but it is wider - as a freelancer I had to know what was important in the particular project from server configuration through solution implementation to a layout/ui design, negotiation techniques and civil law. But I missed a lot about project management methodologies, agile teams, code reviews, project roles, requirements modeling, right solutions to responding to a change etc. Sure, sometimes you can have a great month as a freelancer and earn a lot more than as an employee or contractor. But there are months when you have to count every penny. The most important is - in the beginning it shouldn't be all about the money. However you start, it's important to develop yourself. Face something new and hard, whether you succeed or not, you win. You're back in the spike of the learning curve again! (If you're lucky and determined - for good) You learn something and I believe that's very important in our jobs as software developers - Continuous Self-development.
And what is your opinion? Is it better to start on your own or in someones company? Maybe both?
I used the photo of Brandon Nguyen in this articule, because I cound't find any inspiring photos of me. Brandon definetly looks cool there.