Hitting rock bottom early
When I was a child, I totally lacked focus and was very disorganized. My teacher used to say that I’d need an assistant to constantly push me and help me stay on top of things. My mom used to tell me, that there was more in me and I could do much better than this. I kind of accepted that this was me and as a result, I wasn’t really good at anything (school, sports, music, etc.).
Though I learnt programming in primary and high school (QBasic and Pascal), I never pushed myself to learn more coding than it was needed to pass my tests in school.
Later on, while studying computer science at the university I got an internship as a C/C++ developer. I was actually so bad at coding that after a while I was only assigned the most simple tasks, like changing the font sizes and colors of the application content, etc.
While I was struggling at the company, the other interns who loved chatting about programing languages and compilers all the time were getting the more interesting and complex tasks all the time.
At that point I thought to myself, I didn’t study years and years at the university for this kind of work and felt that somehow I should be able to do way better than that.
A friend to the rescue
Then one day after graduation I ran into an old friend of mine from university who asked if I was interested joining their company as a Java developer. He said it was ok, if I didn’t have any Java experience (I studied Java for a semester at the university, but failed to pass the exam), they’d train me for the job.
I jumped right at the opportunity and took the job hoping for a brighter career this time.
They gave me a book on Java that I could study for two weeks and then I was thrown into deep water. We had two senior developers on the team who were really good at what they were doing. I could see their passion for coding and wished that one they I could be as good as them.
Unfortuntely, any time I tried to ask for their help, my boss would say they were too busy and I should go and figure things out by myself. Since he didn’t mind struggling 2-3 days on the same problem, this was a great lesson on independent work.
Around this time the other two junior developers were let go, so I realized I better get my act together if I didn’t want to loose this opportunity and start all over somewhere else.
Everything went fine for about a year until one day I got into an argument with my boss which made me very upset and I didn’t want to work for him anymore.
I started looking at job boards, but when I looked at the job descriptions I had no clue on any of those three and four letter acronimes (J2EE, EJB, SOAP, etc.) and what those different frameworks were for.
This was the moment to realize that my boss could easily replace me any time with someone else, but with my lack of skills I had no chance to compete for a job against the thousands of other more experienced Java developers out there.
The best NBA basketball players never have to worry about findings jobs. They don’t find jobs, jobs find them. So similar to these guys, I was thinking that I’d have to get into the top 5% of Java developers, if I wanted to have a great job and make good money.
I became eager to learn and improve my skills on Java and programming in general. RSS feeds used to be very popular in those days and I subscribed to as much as I could. I also started reading online tutorials while having my lunch at my desk or while commuting.
Soon I was able to move on to another job and then some other ones later on, too. Any time I looked for a new job, I only considered ones where I could learn new skills and grow in my career.
Every time I’d start on a new job I’d look what other people were doing better than me and try to decode how I could replicate that. In the evenings I’d also spend another 5-10 hours per week on side projects trying out new technologies and frameworks and working on my startup ideas.
After having a few years under my belt I moved to Ireland and got a job at a company where there were many Java developers working as contractors. These guys were keep telling me how great contracting was compared to a permanent job (aka full-time job in US and Canada). They said they make much more money and anyone becaming a contractor would never look back.
Fortunately, I got an opportunity to give that try and see if it was for me. While I was a bit scared, I knew from experience that if things didn’t work out well for me, with the 5-6 years of experience in Java I had by that time I could always find another permanent job within a few weeks.
Actually, my first contract opportunity worked out so fine that I haven’t taken on any permanent jobs in the last 8+ years. While contract jobs are not for everyone, they have given me the opportunity to meet and work with many people in various companies and get experience using different technologies and methodologies.
By 2015 I had a few years of experience as a senior Java developer and was working at a company as one of the many Java developers. There’s a saying that it’s better to be a big fish in a small pond than to be a small fish in a big pond. So I decided to move on to when presented with an opportunity to become the only senior backend developer on a newly formed team in one of the top 5 banks in Canada.
Though I didn’t become the big fish in the small pond, but ended up being the only fish in the fish tank. Freedom!
… and responsibility…
Being the only developer also meant that if I couldn’t fix something on my own, there was noone else to fix it for me. This didn’t leave me with many choices which was at times quite stressful, but also gave a sense of focus.
Ultimately, I learnt that most of the time I’d face three types of issues:
- the ones that could be resolved using google/stackoverflow, or
- if we ran out of options, we may still be able to find a workaround that was good enough so that we could move on, and lastly
- the ones that are economically not worths resolving
Anyway, things worked out well for our team at the bank as we made good progress. We were able to deliver a challenging project (almost on time), which in turn lead to more projects and a growing team of developers.
While I was cranking out code as best as I can, I still couldn’t keep up with the workload all by myself so my boss hired a few interns to help out initially and later on grew the backend team to 9 developers at its peak.
Since I had the most experience with the code base (being the only backend developer at the beginning), I ended up training the new developers as they were joining the team, while still remaining responsible for the overall delivery of the backend application.
Without much experience in leading a whole team of developers it was hard to get through the impostore syndrome for months. Eventually I figured that instead of thinking of leadership as ordering people to do stuff, it is more about showing others direction, leading with good example, helping get the job done and stepping back when needed.
I must admit that leading a team of developers is an experience very different from writing code. Sometimes I wish these skills were taught in school, nonetheless, every day is a great learning experience.
To this day I still read books and do online courses on programming (and business lately) while commuting and spend some extra time in the evenings on learning and hands on coding.
Some developers are ok to take on any 9-5 job as long as it pays the bills. For me it’s different now. Life is too short so work should be fun and challenging. Do you agree?