Over the last few weeks, I've been taking some time to step back and think about what I've seen, felt, and learnt this year so I can share it with you. 2024 has been a wild ride.
Not since the smartphone boom period in 2007 have I seen so much change happening so quickly. We've seen the culture and growth of our companies changing due to the macroeconomic climate, a proliferation of LLM-based tools and technologies, and, fundamentally, as leaders, we've had to change how we think about our roles and our output.
What has held true in the last decade may not hold true in the next. Let's take a look at each of these areas in turn.
Efficiency is key
Let's start with culture. If there is one theme to highlight as we head into next year, it would be efficiency.
I have written before about the increasing need for managers to be in the details as we ride out this current macroeconomic period.
The economy is presently characterized by less cheap debt and investment being available, and the knock-on effect is that there is less growth and a more challenging environment for startups.
If you work for a bigger company, you will likely see headcount staying stable so that the balance sheet can be kept under control. People who leave may not get backfilled. Asking for more people to get things done is no longer a viable strategy.
For those who are in the initial half of their careers, this is a new experience. For over a decade we have been able to raise, borrow, and grow our way out of problems. Now, we need to be efficient as a primary goal.
But how long will this last?
Looking at the charts on layoffs.fyi, we can see that an increase in layoffs began in 2022 as we exited the COVID Zero Interest Rate Policy (ZIRP) period. The magnitude of these layoffs peaked in 2023, and they have been on a downward trend since.
It looks, dare I say, like we are back to "normal" levels of layoffs, and thus some level of stability seems to have been reached. Whatever large corrections that were needed to unwind the excesses of the ZIRP period have now seemingly been made.
However, this period of stability doesn't mean that all of our books are balanced and we're clear to start growing again. It is combined with an increase in interest rates and inflation, which means that the cost of capital is high. This means it is expensive to borrow, and institutional investors are investing less, unless you are in the red-hot AI space.
As such, many non-AI companies are entering a period of efficiency, where they are looking to optimize towards profitability. This involves seeing which levers they can pull (e.g., reprioritize, do less, or work smarter and/or harder) to make the revenue per employee go up, the costs go down, and cash reserves increase in order to give more runway to weather any further economic uncertainty.
For people who currently find themselves out of work, this is a tough time. It is especially tough for engineers that are at the start of their careers, as companies are tending to hire more experienced engineers who can hit the ground running and be more productive. Some companies are bucking the trend here, and I must make a shout-out to my employer for their excellent intern program. However, the trend is clear: companies are looking to hire fewer and more senior people in general.
For ambitious managers, especially those that had 5-year plans to become newly minted VPs, unfortunately, the game has changed. Whereas a few years back the play was to be at the right company at the right time in order to ride the wave of growth and take charge of increasingly large teams, being a successful manager now means being able to do more with less, keep talent density high by hiring the best and exiting the worst, and to provably be in the details whilst shipping fast and often.
In the current climate, which I see continuing into 2025, the best managers will be the ones that don't need more people to get the job done. They are running small, highly focused orgs that are able to ship quickly and efficiently. Managers that are unable to prioritize and focus their teams will find themselves in a tough spot. Every engineer counts, and reinforcements are not coming.
This, of course, is both common sensical and a return to the roots of what it means to be a great software engineer: to turn ideas into code and then to use that code as the lever that moves the world. Expect a return of tropes around 10x engineers, founder mode, and a desire for a Musk-like mindset. Depending on your perspective, this may or may not be your cup of tea.
As the years go by, whatever is happening in the economy may change again, meaning we may see a return to growth and expansion. But for now, we need to leave peacetime leadership behind and put our wartime hats on: we need to be efficient. And we also need to ensure that we incentivize our teams to be efficient, too.
We need to enter 2025 thinking about:
How can we ruthlessly deprioritize anything that isn't essential, and how can we instill this mindset into every engineer on our teams? For example, does that refactor really have to happen now? What does it measurably improve? Also, is that feature really necessary? Can we sunset that service that no one uses so we have more time to focus on the things that matter instead?
How can we ensure that we keep raising the performance bar so that our best people get better, and those that aren't up to scratch are either coached up or out? Does our organization have a culture of high performance, or are we letting underperformance slide? And how much is that down to you as a leader? Are you avoiding the hard conversations?
How can we put a key focus on productivity? Are we able to understand what the productivity of our teams is? Can we find ways to isolate bottlenecks in getting shit done and remove them? Questions you can ask include: What's the average cycle time of a task? How long does it take to deploy to production? How long does it take to review a pull request? What is the average number of commits per week per engineer? Why is it like that?
How can we ensure that we are using the best tools available to us right now? How many of our engineers are using AI to help them write code? If it's hardly any, then why? Seems mad not to, right? And how much pair programming are we doing, especially remotely? What's the average skill level of the team, and is it going upwards?
Not letting skepticism turn into cynicism
If efficiency has been the cultural trend, then AI has been the technological trend of 2024. LLMs have become so ubiquitous so quickly that it almost feels clichéd to be writing about them, but then again, that ubiquity is exactly why I am writing about them.
LLMs have gone through the Gartner Hype Cycle so fast that I am unsure where we are on it anymore. If you're not familiar with that model, it's a plot of visibility against time that suggests that new technologies go through a cycle of hype, disillusionment, and then a gradual slope towards enlightenment and, finally, productivity.
If I had to place my own stance on LLMs on the Hype Cycle graph, it would be productivity. I have fully embraced them in my day-to-day life. My usage spans across:
Using ChatGPT for general research and idea generation (e.g., last night I re-taught myself how derivatives work by having a conversation with it)
Using Cursor to reignite my love of writing code by making it so easy to throw out ideas and see what sticks. With a new baby at home, my spare time is limited, but in 30 minutes I can get a lot done with Cursor by letting it handle common boilerplate and remembering syntax for me: I can focus on the interesting parts of the problem.
Spending an increasing amount of time with Perplexity to search the web. I tend to use it over Google now. I love the conversational interface, how it cites its sources, and how I have the ability to continually ask more follow-on questions to broaden or narrow what I am searching for.
LLMs are a new layer of abstraction that talk directly to my inner geek teenager: they are cool, fun, feel like magic, and remind me of the near-unlimited promise of computing in the 90s.
They, of course, are not perfect. Or even deterministic!
But I am familiar enough with LLM models that I understand their limitations and can work with them: they may hallucinate, they may be biased, and I definitely need to cross-reference and double-check anything that I want to present elsewhere as a fact. However, I am far, far beyond the point where I would feel comfortable with them not being a part of my daily workflow. They are just too useful.
However, the same cannot be said for everyone in our industry. There is something about LLMs that has sparked a deep cycle of cynicism about AI in many people. Especially engineers.
Yes, training these models is insanely expensive. Yes, there are questions to ask about how the data used to train them was sourced. Yes, it may mean that the core of our jobs as software engineers is changing. And of course, I can understand that it can feel threatening to have models that can do things that we have spent our entire lives learning to do.
However, being deeply cynical about new technology is not a healthy place to be for you, your teams, or your company. Cynical people are just awful to work with. We are surrounded by an embarrassment of riches.
This is not the first time that a breakthrough has come along and flipped everything on its head. It also will not be the last time. The best engineers are the ones that are able to adapt to new technologies and use them to their advantage, whether that be increasing their productivity, finding new ways to solve problems, or even just having some fun with it.
We need to rekindle an excitement and optimism about the future of technology. Ideas need to represent play and possibility, not something to turn our noses up at because we don't yet see the possibilities. Nothing is ever perfect when it first comes out, but that doesn't mean that it won't get better. And any idea that has potential will get better if it brings value to people.
I remember when the iPhone first came out, and I signed up for early access to the developer program, sometime in late 2007. After getting access in 2008 and signing an NDA, I was given access to some of the worst documentation I have ever used, and building my first apps in XCode and Objective-C was nothing short of insanely frustrating. I would lose days dealing with bugs that were not my fault.
And it wasn't just struggling through poor documentation and occasionally broken build tooling: getting listed on the App Store included the need to spend several hours on an expensive transatlantic phone call with the IRS in Philadelphia to get a tax ID number even though I was a UK citizen. As a student, that phone bill was not fun.
But sticking with it despite the frustrations was also immensely rewarding: not only did I get to be on the frontier of a new technology and new set of skills, I got the chance to connect to a whole new community of developers and users that I would never have met otherwise. I made back that phone bill pretty quickly too.
And guess what? All of those issues we faced at the frontier are now ironed out and nonexistent. Today's jank will be tomorrow's polish. Humans make everything better with time. LLMs will be no different, and neither will the umpteen other technologies that will come along in the future. Stick with them, and we will be rewarded.
Be skeptical, but don't be cynical. It has never been as good as it has been now to be a software engineer. And it's only going to get better.
The generational divide
If you spent time with your family over the holidays, you may have noticed how the older folks amongst you may or may not have had technology leave them behind. You may have parents in their eighties who are just as comfortable with a smartphone as you are, or have relatives in their sixties who don't even have an email address.
Getting left behind isn't just something that happens to our parents. It can happen to us and our companies too. Take a look at yourself and your team and think about any growing divide in your skills, knowledge, and comfort with new technologies. Are you and your team building the frontier, keeping up with new developments, or are you being left behind?
The pace of change in technology is only going to increase. Are you working somewhere that moves fast enough to keep up with it?
Sure, you may have an engineer who considers themselves a software craftsperson and refuses to use AI to help them write code. But how much more productive could they be if they opened their mind a little and did? Have they even tried?
And, more importantly, which new competitor full of young engineers using Cursor will come along and blow you out of the water before next year is even over?
This divide doesn't just apply to writing code either. If you are a manager, are you measuring yourself correctly against your output or incorrectly against your busyness?
For example:
Is that manual process that you're doing every week to crunch staff allocations through various spreadsheets actually something that software could do for you, or are you performing that manual process because it makes you feel useful? I see you...
Have you experimented with using LLMs to help write first drafts of your documentation using your code as input?
Have you thought of trying something like Graphite to do initial pull request reviews for your team? How much time could that save you?
Are all of your engineers using Cursor or Copilot or similar? Have you measured the impact of them using these tools on their output, such as commits merged per week or cycle time? And is that a taboo subject in your organization? Why?
We opened this article talking about efficiency: we need to do more with less in 2025. We need to drive up the productivity of our teams, and we need to measure ourselves as managers on the impact per engineer that we have.
It just so happens that through AI we have a glut of new tools that can drive that number upwards. But we need to be willing to embrace these tools, even if they are not perfect, and even if it means that we need to continually rethink what it means to be a software engineer. Let go of the past.
We become better engineers by building, embracing, and furthering technology, moving ourselves up the stack of abstraction, allowing us to become far more productive than we ever thought possible. We need to be optimistic about the future of technology, not cynical. There is no better time to be alive.
What's coming next is exciting. I am excited. If you are not, you might just find your company being left behind.
Onward. Happy new year.
«measure ourselves as managers on the impact per engineer that we have». What does it mean? Any examples would be useful.
Just wanted to say this post really captures some of what I enjoy about working at Shopify and my general thoughts about adapting with technology as we get older. Well written!