Upskilling as a professional programmer
posted by Ayush Newatia
13 January, 2025
I got my first programming job right out of university in 2014. I worked full-time for 5 years before taking a sabbatical, and then going freelance in 2021.
Freelancing offers me a cadence of client work followed by unbooked time. I usually work with long term clients so a bit of downtime after a contract ends is very welcome.
This allows me an opportunity to upskill. It’s also when I blog a whole lot more about stuff I’ve learned. When I worked a full-time job, I wrote a grand total of 1 blog post in 5 years.
The job was, as most tech jobs, fairly relentless and repetitive. Constant 2-week sprints delivering pretty standard stuff with the odd interesting project thrown in. After a couple of years of getting to grips with the basics, I plateaued as a programmer. To mix two metaphors, my experience was like running on a hamster wheel inside a pigeon hole.
I worked on other stuff outside the job to keep up to date with the latest tech, but all it did was contribute to burnout. Since then, I maintain a very strong work-life boundary. Programming is my job, not my life. This separation is healthy for me.
Tech jobs don’t encourage upskilling nearly as much they should.
To draw a comparison with my favourite sport: cricket. The international schedule is a complete mess … it’s relentless. Players go from training, to a match, back to training. They sometimes get a break to allow their bodies to recover, but never enough time off to work on their skills.
Joe Root is one of England’s greatest batters, but was going through a bit of a lean spell (by his standards) in 2019. Then COVID hit and all cricket stopped. He used the time off to analyse another great batter of the generation, New Zealand’s Kane Williamson. Stealing some ideas from him, Root tweaked his technique by practicing in his garden.
This led into a stunning run of form into the 2021 season. His batting average went up from 37 in 2019 to 61 in 2021. He’s currently ranked the number 1 batter in the world. All because he had some time off to upskill.
Endlessly running on a hamster wheel doesn’t do anyone any good.
For the last couple of months I’ve been unbooked, and used the time to experiment with a bunch of new stuff. I’ve been exploring Linux admin, managing Linux processes using Ruby, concurrent and system programming in Ruby … and a lot more.
All this has helped me become a better programmer, and better serve my clients. And it would’ve been totally impossible without the downtime. As I mentioned earlier, programming is my job, not my life. I don’t want to be doing this stuff “in my own time” so to speak.
I really wish tech companies would recognise the value of time spent upskilling. Software is such a ridiculously high margin business, made low margin by ludicrous inefficiency.
Endless meetings, poor leadership, non-existent management, and career progression aims that don’t align with good product work are all typical in the average tech job. Companies rarely optimise for uninterrupted, focused time to just do work.
I’ll avoid addressing Scrum here because I could fill a book with rage about how much I loathe that ruddy excuse for a framework.
I’d go as far as to say the average development team is probably operating at 20% efficiency (full disclosure: that’s a number pulled out of my arse, based on my experience and nothing scientific whatsoever).
Efficient, well led, and well organised teams can deliver software at a scarcely believeable scale. WhatsApp had 50 employees servicing 400 million monthly active users when they were acquired by Facebook for $19 billion.
With good management, programmers having a month off every year to do their own thing should be perfectly feasible. They could learn something new. Build something interesting. Just do some programming that isn’t their day-to-day job. I reckon the investment would be well worth it.
I honestly think this is an organisational problem and nothing to do with a company’s size or finances. Maybe I’m just too idealistic …