The Tangled Tale of My Career (by alaric)
After graduation
I went full-time at the company I'd been working for as a student, but I was starting to become disillusioned. With the recruitment of a sales department, there had been a shift towards alcohol culture in the office, which I found really unpleasant, lots of my colleagues were dissatisfied with how the company was going and looking for other work, and despite often having a de-facto role in leading the design and building of software, I was never given a chance to formally lead a team. So, I also started looking for other jobs, and jumped ship to a startup, hoping I'd have more room to grow there.
However, in a year or so, when the dot-com boom ended and the bubble popped, they ran out of VC funding so they sacked everyone but me (with the directors handling sales and admin), closed the office, and had me work from home with a small pay cut. I had to look after a hosted application (what we'd now call Software as a Service): developing the software, documenting it, supporting users via email and the phone, building and maintaining the server hardware in a datacenter in Central London, going in once a week to rotate the backup tapes, the lot. As we had no money for new hardware to start with, I had to handle our growing workload on the same aging servers, by putting my infrastucture skills to work: rewriting our software for best performance. This was a lot of work, and I was forever fire-fighting (rushing to fix the next broken thing, no time for preventative maintenance!), but I learnt a lot from managing the "full stack" - modern-day "full stack" developers can't claim to have done everything from cobbling together servers by combining the good parts from a pile of broken computers, up to running training sessions for new users. As resources were so limited, I had to work efficiently. At this job I really hashed out my software architectural design process, which goes something like:
- Collect requirements, as usual: What am I being asked to make the system do?
- Simplify those requirements to extract the fundamental essence of the problem, stripped of specific details.
- Figure out a system architecture that will solve that generic problem.
- Implement just enough of it to solve the specific requirements.
...the result of this is that the core of the system accumulates these generic solutions, so when new problems come in that overlap with generic problems I'd implemented parts of previously, I could increasingly just add a bit more work to those existing systems to solve the problem at hand. In modern parlance, I'm investing to accumulate "technical credit", by implementing things in ways that build platforms that will help me solve future problems I'm likely to face. This doesn't mean doing extra work to worry about cases that might not arise; it's more like avoiding painting yourself into a corner in ways that mean you'll need to rebuild whole subsystems when requirements change in future.
And I was aware that this was an unpopular standpoint. There was an increasing movement in software development that emphasised a "Don't think about the future, just write code, then rewrite it later if your needs change" approach. I saw people like me caricaturised as impractical head-in-the-clouds idealists, but I was laser-focussed on delivering working software; I'd just found a way to do it that was easy to extend when new requirements came along. I heard people saying "We're in a hurry and have limited resources, we can't afford to worry about possible future requirements" - but I was in a hurry with limited resources, and I couldn't afford to have massive rewrites to add required user functionality in a hurry. The freedom of being in charge of everything, and being able to just make a decision on what to do and go for it, was welcome, but without a team, I was very alone and had to make lots of compromises due to my limited time.
In my free time, I continued to work on my own projects. ARGON was big enough that my scope was really just to design it - building the thing would have to be a team effort; perhaps one day I'd have time to build enough of the core myself to attract other contributors (I firmly believe that such infrastructure software needs to be open source), perhaps I'd make enough money to fund developers - neither of them seemed likely in the immediate term, but there was enough work for me researching and designing. I tinkered with electronics, built tools to help my day job, and so on.
The Internet was still good in those days; social media hadn't taken over, so serious discussions were still had on mailing lists, although Usenet was definitely on the way out by then. I was still a vocal presence in discussion fora relating to my interests, and had some minor notoriety as a bit of a contrarian (although I'd like to call it "pointing out that the emperor had no clothes on"!). This led me to getting some side work writing and editing technical books, which was fun.
That little company survived the economic slump, actually paying for itself from customer income rather than living on investment, and slowly started to grow, bringing employees on. The economy started to turn up and investors started looking for hot new startups to invest in, and the directors started to focus their attention on exciting new things; income from our business started to be diverted towards supporting anoter new startup rather than growing our business, and although in theory I now had a team (of one other person), the directors were giving them work to support their new startup so I didn't get very much of their time. I realised that the now-profitable system I had built was just being milked to support the director's fun new project that had all their attention, and once again I felt stuck in a rut. I was good at keeping it going with minimal resources, so I never got any resources. I was single-handedly running R&D and operations for an online service business, but I didn't get a job title or paycheque to reflect it ("COO" or "CTO" would have been nice). They pay wasn't great, and I was starting a family. I was starting to feel frustrated and stuck.
The freelance era
So, I left and went into freelancing.
This was lucrative, but it was hard, precarious, work. Potential clients would be in the negotiation stage for months, then decide they wanted to start next week; but I'd be already working on something and not able to start a new thing for a while. They would then be upset if my current contract over-ran and I couldn't start on their project. Sometimes they were slow in paying. The work varied, sometimes interesting, sometimes not, but it was always limited in scope: I didn't have the freedom to build towards a long-term future for the system I was working on, because I was usually beholden to somebody definitely in the "Don't think, just code" mindset. But, I still had some spare time to work on my hobby projects; ARGON design iterations and working on my server hosting platform continued, and I made a bunch of fun open source things. So I could swallow work being frustrating, and get my kicks in evenings and weekends.
But then our house flooded, and we couldn't live in it for nearly a year. This was a pain when I was self-employed and working from home, creating lots of extra domestic work to organise repairs, and find ways to look after my wife and child, and making it hard to earn. I racked up debts that would take me many years to clear, and entered a prolonged period of stress, reducing my time and energy to work on things I cared about and forcing me to focus on doing whatever kept my family safe and fed.
My first startup
But things started to look up: one of the freelance projects turned into a startup of its own, and I found myself developing a solution I'd built for a client into a product. We got investment to hire a team, of several people, which I ran. It was such a relief to be responsible for the long-term development of a product again, able to build powerful infrastructure that would make it easy to build more powerful infrastructure in a virtuous circle! And it was a relief to have a regular wage rather than precarious freelance payments. But I discovered a new frustration: as an early-stage startup with no customers, we needed to find customers. So we were having to guess what features customers might want, and then try to find customers to sell those features to. This meant the requirements we worked to were based on guesswork, which was... unsettling. I was used to having customers coming to me with wishes, and extrapolating from what they asked for to what they really wanted, then designing a solution to the general problem they had a specific instance of, building the bits of it they needed, and then coming back to them with something that exceeded their needs and seeing the satisfying look of delight on their little faces... Here, we were guessing, and building a product in the darkness. And since we didn't have funds for a sales and marketing team, we tried to do that ourselves. And we hated it and sucked at it. In the meantime, the board kept complaining that I was working half of the week in the office in London and the other half from my home in Gloucestershire (looking after my young child and disabled wife and elderly aunt), making dark comments about my "commitment" and pressing for a more "startup hustle" culture that, they suggested, was incompatible with living outside of London and having children (I note with satisfaction that the people most vocal about this now have children, and several of them have moved out of London). I kept finding people had had meetings with my team while I was away and made decisions about things I was responsible for, and I was increasingly feeling pushed out; and yet again, despite me being the most senior actual employee, running the team on a day by day basis, I still didn't get a "CTO" or similar job title. So I took up a passing job offer from a company local to me, and jumped ship.
Back to working in an office
The new employer already had a product, so there were actual customers with actual real needs, and actual income. Great! And I got to work on improving performance and adding functionality to a database engine, one of the most fundamental and tricky pieces of infrastructure. Working there was great, marred only by one major thing: we moved house - closer to the office, but further from the school my first child and the nursery my second child went to. Also, Sarah (my wife) was trying to do more work, so needed the youngster to go into nursery on more days. This meant that I had to do a long drive every morning to take the eldest to school and (most days) the youngest to nursery, and then take my "lunch break" at 3pm to pick the eldest up from school, and then pick the youngest up from nursery after work. That involved about three hours of driving per day, plus shouldering the eye-watering costs of nursery care, and so I pretty much stopped having time and energy to work on my hobby projects; my weekends were spent catching up on all the domestic stuff I wasn't getting done in the evenings, helping Sarah with / driving her to events, and being generally exhausted. On top of that, I felt bad about the house move; explaining that in detail would be too much of a tangent from the main plot if this post, but it meant giving up on a dream that had meant a lot to me personally.
And on top of all that, towards the end Sarah had a traumatic brain injury, so needed more of my care and could do less of the housework (and we had two young children by then).
But I coped, because the work was largely fun, the people were great, I was learning a lot about new technologies, I learnt a lot about software quality, and the kind of long-term infrastructure-building I was good at was valued; we had a mature product with long-term customers so the planning horizon was in years. Most of my colleagues had children, so my caring responsibilities were well understood. I generally looked forward to coming into work; I didn't get to formally lead a team, but we weren't very hierarchical, so the fact that I tended to lead design decisions (as usual) wasn't in conflict with somebody who was supposed to lead things. It was... OK. Not ideal in that respect, but OK.
After many happy years of this, we were bought by a big American company, who (after a year) shut us down and made us all redundant.
My first redundancy
This was... a surprisingly good thing for me, because it involved being suddenly told to hand in our laptops and go home and basically have a month of paid holiday while our contract notice periods expired; then to accept a good thick wodge of cash (several months' living costs) as a generous severance package. So I didn't have to rush straight into a new job.
At first I was overjoyed to think of all the cool personal projects I could work on, but there was a lot of domestic stuff I was behind on from my overworked period. And I still needed to do all that driving every day, and still had a disabled wife and two kids to look after. So I was still putting in perhaps the equivalent of a part-time job just looking after my family; and I had no idea how burnt out and exhausted I was from it all, so I found it hard to use the free time I now had well - I just felt tired, and when I sat down at my desk I wasn't gripped with the enthusiasm and energy I once had (a few years later I'd try to explore this in a blog post). I got stuff done, but I had a lingering, worrying, feeling that something was wrong. Progress on the things that mattered to me was slow. I didn't feel the excitement and energy that used to drive me. Things I, based on past experience, estimated would take me a weekend took weeks. I felt guilty that I was squandering this golden opportunity, and worried that I was being lazy. Looking back, this was the first clear sign of burnout.
By andyjpb, Wed 29th May 2024 @ 11:04 am
Good luck! It sounds like you're on the right path in the right direction so just keep on trucking!