You love developing software – the hands-on sketching, writing, debugging and deploying of it, prototyping out ideas and proving out new approaches to problems in code.
The industry has a well-known problem for people like you though – especially in large companies, progression tends to take you away from the hands-on day-to-day development work and towards management, architecture and governance roles.
What’s the career equivalent of feature creep?
For a lot of folk this is perfect. You take on different responsibilities, you’re forced to stretch into roles you’ve never held before and develop skills that are broadly very useful but probably not part of a university CS degree. There’s a catch though – making the step back to deep technical work becomes harder the longer you’re away from it, and it’s easy to find yourself in a position where your CV no longer looks like that of a developer but looks rather more like that of a manager.
So you read Hacker News on the train, you spend evenings and weekends hacking about with Angular or Azure Event Grid or AWS Lambda and you get to keep up to speed with what’s happening around you a bit. Flex your coding muscles while still getting to do all the other management and less hands-on technical bits your work requires. You mightn’t even notice how much professional development you’re doing off the clock.
Enter a new challenger
This is where I was at until our daughter arrived in 2013, I just didn’t know it. She’s amazing – shouty and stompy and with a grin that’d turn the sky blue in a storm but looking after your children is all-consuming and you throw yourself into it entirely.
But there’s no time to tinker with TinkerPop when your little girl’s yelling “SLIDE!” at you and bouncing up and down, there’s sliding to be done! Reading that book on domain-driven design or microservices comes much further down the list than making her favourite dinner. And forget about that Azure Friday backlog you’ve got, you’ve got your own dinner to make once she’s in bed.
All of this has forced me to account for my time a bit more, and realise that I was compensating for spending less time being a developer at work by spending more and more of my spare time doing technical things. That’s fine, obviously – software development’s my hobby as well as my career, but when that time is no longer available to you it’s easy to get resentful or sad about how quickly things are whipping past you. It’s easy to lose your love for what you’re doing.
Taking a step back and some time off
So I decided to take a break, hand my notice in and take three or so months off dedicated to the things I want to do and learn. My last day at work was the end of May, so I’ve been able to focus my time since then on two main areas.
First off – I get to spend a lot more time with my daughter. No commute means I’m there to greet her from nursery, do drop-offs when my wife’s working from home, spend a full extra day a week with her and my wife for the day she’s not at nursery when I’d usually be in the office. If nothing else, seeing that massive grinning loon barrelling toward you from the nursery garden yelling “daddy!” – and with scant regard for her friends as she barges past – has emotionally paid for this time off entirely.
Secondly I get to do focused learning on topics that I have had bookmarked for ages but not gotten around to, where I can take on board a new framework or technology or try to better understand the underpinnings of stuff I’ve already been doing. It’s learning for its own sake, but with a rough direction I’m heading towards.
The rough plan, then is to learn or improve my knowledge in a few specific areas:
React and Redux
I’ve been a full-stack web developer for the past eight or so years (so well over half my career now), but the front-end work has almost always been in Knockout for reasonably good reasons. It’s stable, it works well enough and I’ve been extremely productive with it but new projects rarely start in it. I chose to learn React for a couple of reasons:
- So that I’ve got a mental model of how a different front-end framework operates
- To get more exposure to newer client-side build pipeline standards
I’ve chosen Udemy as the basis for this learning, an online course which I’ll be backing up with practical explorations using some of the other tech on my list.
Neo4j Graph Database
At my previous employer I worked on and was responsible for our bespoke institutional investor CRM and marketing platform, which was all built on Oracle and ASP.NET. When you get down to it though, you’re modelling graph-like structures in a relational database – so I spent some time exploring Neo4j as an alternative back-end but in a fairly unstructured fashion.
In my break I’ve already spent a long while doing the Neo4j self-learning courses, brushed up on my Cypher syntax and built out multi-node clusters for testing various scenarios as part of their operations training. I’ve also become a Neo4j Certified Professional to back that up. I plan to explore what the implications would be of having a large-scale CRM built in Neo4j in some of my remaining learning time.
GraphQL and the GRAND Stack
GraphQL’s having a good run at the minute but it’s fairly early doors in terms of tooling and support, especially on the .NET front (when compared with something like Apollo). That’s good for me – I’ll get to learn it while it’s still a bit of a moving target, but it’ll also force me to look broader than my .NET background for back-ends to do that learning.
More interesting for me is the so-called GRAND stack of GraphQL, React, Apollo and Neo4j for building graph-based applications. A lot of CRM data is natively hierarchical or structured as connections between related entities – perfect for a graph database, ideal for GraphQL. I’m not going to have time to deep dive the whole stack, but a working knowledge of all the moving parts is the aim and that Neo4j CRM prototype is intended to be built against some of this stack.
Azure and Serverless
Having worked almost exclusively on on-premise applications for the past handful of years I’ve watched Azure mature and expand as a platform but not managed to keep as current with it as I’d like. Sure, App Service and Azure SQL and Table Storage and Azure Virtual Machines are all essentially unchanged but I’ve not played with Event Grid, nor tried to break CosmosDB, or really gotten into Azure Functions at all.
This’ll be a mix of Azure online learning resources and just trying things out. Ideally I’d be in a position to do a certification at the end of this but that’s a nice-to-have and not the goal.
Life after the career break
I’ve not yet decided what comes after my break. Obviously just finding another job is high up the list, but I’m already more willing to consider things like remote working, or part-time working, or contracting given how vast the benefits to my home life have been just for spending more time with my family.
What’ll be important though is that I get to keep learning as I go, and that there are technical challenges to overcome. While learning and prototyping for its own sake is a wonderful indulgence, for me nothing beats getting an idea out of someone’s head and into production.