TLDR: Worked for 10+ different companies, attended lots of hackathons, attempted to build 30+ different side projects, became a competent developer and increased my salary by more than 5x. Jump to lessons learned or continue reading for the chronological order of most important events.
Year by year.
Lessons learned:
- Optimise for learning. In the beginning, I completely ignored the money aspect and focused on opportunities that had pair programming, work in teams with more experienced people than myself and good working practices such as having tests and QA teams. This proved to be great to develop a T shaped skill set - wide by knowing many things, and tall as knowing 1 thing really well in my case JavaScript.
- Developers are in demand. Use that. Ask for what you think you deserve and likely you will get it. From better work times to salary. It’s hard to ask because it’s not in Slovenian culture to do so, but employers definitely need incentive sometimes. At the end company will hire/keep you if your value - your cost > 0. Developers are in demand, use this to your advantage.
- Invest in people skills. Programming is just a part of the job, it’s not unusual to work in a company where it amounts to less than 30% of your daytime (reviews, meetings and planning can take a significant chunk of your time). It can make your job much easier if people are happy to help you, sometimes smile is enough. Nobody likes to work with a grumpy developer who is “right” all the time.
- Try contracting. According to my research, most devs are afraid to do contracting due to administration overhead, but to be honest, it’s not that hard. Pay £120/month for an accountant and earn (sometimes) double of what you did before. See this on how to switch
- Code is written to be maintained. More often than not the most important part of the good codebase is the clarity and readability of the codebase. Is it fast? Is it clever? Is it small? These are the last questions you should ask yourself. First one should be: Is the next developer in a couple of weeks gonna know what I meant here?
- Networking is important. I got at least 3 jobs from recommendations of friends.
- Networking is not about collecting contacts. When I read that you have to network when I was younger I thought of going to conferences and gathering emails/contacts is what networking means. It felt forced, and I didn’t want to be part of that. Now 10 years later I see that actual usefulness came from my small network of good friends and almost none from the people I took contact cards of at the conferences.
- Overestimate Overestimate the projects but clearly explain it to the client why that is - software is incredibly hard to estimate correctly.
- Don’t charge per project. Considering how hard is it to make a mistake estimating you increase the chance of screwing the project by charging for a project. It’s to protect clients and yourself, clients need expected costs, and you don’t want to work for free.
- Businesses will hustle you. Techniques such as telling you money is running low and you should switch from contracting to perm positions are common, holding you at internship level as long as possible is common (haven’t happened to me, but I’ve seen it happen multiple times), breaking verbal promises is common, boss avoiding you for the time of the rise? Nothing new. Companies benefit from you, and they will try to squeeze out as much as possible. It’s normal and nothing personal.
Find me on twitter @meznaricnet if you are interested in my content or if you have anything to say.
[1]: Thanks to Professors Zoltan S. and Marjan Č. for inspiring me to try Linux and teaching me a lot about it
[2]: Thanks Nadja J. P. for organising the trip/abroad internship
[3]: Many thanks to both Gregor and Jernej of Motiviti as well as guys at Relief for taking me.