Published: 21 Dec 2024
After 3 years in my current role at CGI, my first quote-on-quote real job, I’m looking to quit and move elsewhere - and this has given me some rare time to reflect on why. I haven’t been enjoying work for a good while (even taking into account the natural ups and downs of life), but I’ve bottled this up and has led to a big tangled ball of thoughts that need ironing out and talking through (or, in this case writing through). A pseudo-therapy session with myself sitting on both sides of the table.
Part 1: 3 years of CGI
I’ve not felt that anything has really prepared me for the “world” of corporate 9-5 work, nor has the realisation of this being the next 40 (plus, I’m not bullish at all on retirement) years of your life kicked in until the novelty of the workplace environment wears off. Yes, it was certainly nice to stop being a broke uni student and actually have money, but at some point I had to ask myself “Is this it? Is this what all life has to offer?”. The shackles of routine weigh down heavily when when there’s no appreciable end-goal beyond surviving day after day. Hobbies can be enjoyable all they want, but my personal “to-do” list is exponentially ever-expanding and it becomes much easier to resent work for eating up valuable time and energy, and the division grows evermore.
Regardless of my thoughts, futilely complaining that the world sucks won’t get far - and so if I am going to be selling off significant portions of my life to survive for the rest of it, I need a real appreciable goal to build towards with respect to work, namely to maximise the parts I enjoy and (perhaps more importantly) minimise the aspect I flatly do not enjoy. Perhaps imminently obvious, but it at least sets a priority. This brings the obvious question to answer, what haven’t I liked in the last 3 years, and what can I learn from that?
First and foremost, unsurprisingly, my least favourite aspect of the job is being is the non-programming fluff that surrounds my programming job. Surprisingly enough, I’d rather write code than negotiating office politics and dealing with managements’ whims. Throughout the project I’ve never felt much, if any, faith put in the team (despite affirmations otherwise) by some sections of management, and have felt there’s been continual and constant pressure to churn out feature after feature after feature without any opportunity to get off the treadmill once-in-a-while, a true boiled frog scenario. The second order effect, outside of the obvious of becoming demoralised once I’d realised this had been the norm for 3 years, and saw no obvious signs of otherwise changing - was a, perceived or otherwise, lack of time to grow and learn anything that didn’t immediately solve the problem at hand. There is no time to experiment, to go through the necessary motions of learning via trial-and-error, because everything needs to be done NOW, preferably yesterday. I don’t feel like a much better programmer than I did 3 years ago…
But besides the obvious, there’s a whole host of random assorted thoughts and anecdata that I’d like to get down for future reference. I’m sure I could put this into a more coherent narrative, but there’s a lot I want to get down. Here they are, roughly categorised:
Management
- Agile vs. meaningless GANTT charts
- Expectation management
- “Is it done yet? Is it done yet? Why not? Why not? Is it done yet? Is it done yet?….”
- Lies, damned lies and metrics
Continuing with the theme of my dislike of some of the management approach, none of which I could change in any meaningful way, was multi-faceted - but the obvious things to note was in large bureaucracies Taylorism still reigns supreme, and you will be held entirely accountable for estimates pulled on-the-spot from thin air. So will many other metrics of dubious quality and worth, such as velocity. The beatings continue until morale improves. I’m sure management is a hard thing to get right, and a lot of indirect moving parts to handle, but even a passing knowledge of what’s being managed would be nice.
“Things I’d like to see done right”
- Scrum
- Microservices
- Documentation (“Self-documenting code”)
Scrum has always been subject to scepticism to me, having been introduced to it as the “enlightenment”, contrasted to the relative dark ages of waterfall. Unfortunately, not having lived through that transition, one can only be suspicious of this “perfect way” of developing software. I have immediate problems with it (Story point estimation seems a pointless waste, tends to encourage shiny features over all, the incongruous focus on rigid processes and Sprints being a truly awful naming convention) - but I wonder if its a “Democracy is the worst form of government, except all others that have been tried” problem. Given the amount of faith put into it by innumerable people, its on shaky ground - but I’d love to experience this performing “well”.
Secondary are other more assorted things, such as Microservices - which I’m sure makes sense in some situations, but without the surrounding necessary infrastructure and automation, its a whole lot of recurring work and support just to make everything tied to the whims of network latency, with the added benefit of making error tracing harder to follow. Lastly, documentation is always a fun one, partially because developers never like writing it (and yet bemoan any deficiency in documentation when it affects them in the moment, certainly guilty of this myself) and thanks to Scrum, seen as superfluous - as written code should clearly document itself. I’ve certainly seen code that explains what it does, but I’ve yet to see this magical code that explains the why.
Job/Industry-specific complaints
- Air-gapped network frustrations (CI/CD, dependency management, infrastructure maintenance etc.)
- Total lack of high-level standards and consistency
A few other complaints/notes I want to take stock of are more specific to the industry at hand where I’m currently writing software - the main one being locking down the software supply chain as much as possible, which includes air-gapped networks, internal dependency mirrors amongst others. Sensible on paper, but having to manage two entirely separate sets of CI/CD pipelines, development environments etc. etc. is painful, and having to both develop and script with these entirely distinct environments in mind, doubly so. Another unsolved problem, of which I have no idea if any tooling really takes such restrictions into account. The “lack of high-level standards and consistency” is a simple symptom of having lots of legacy applications written by different teams (another unsolvable problem) but when developing in a more restrictive environment, this lack of consistency means all teams do things differently - this has led to all sorts of obscure bugs and issues, and there’s absolutely no help anyone can give due to any lack of overarching standards.
(Insert thing here) sucks
- Corporate software suite - internal tech of a “tech” company is really bad
- Open-planned offices & Hot-desking
- US-ification of HR and metrics
Perhaps overly reductive, but it is surprising just how often “wow, this sucks” comes to mind. General enterprise corporate software is an easy punching bag (Jira, Confluence, Citrix, Crowdstrike, Zscaler, other’s I’m sure I’m forgetting) but it is no less infuriating, both in its crappiness and knowledge its entirely forced to check pointless boxes. Open-planned offices and US styled HR similarly fall into this category, only replacing pointless tickboxes with ephemeral groupthink, which is even worse. Something things just flatly suck and there’s nothing you can do about it - a lovely life lesson to learn.
Part 2: What to improve, personally and with next job
All that aside, my least favourite outcome of this disillusionment with work is that its completely bled over to writing code as a whole - turns out being contractually obliged to do something day-in day-out without much autonomy is a good motivator to do something else other than your job in your free time instead. Yet, unless I win the lottery or the nuclear apocalypse breaks out, I can’t see a better way of keeping myself alive monetarily without writing code in some form or another (I’m certainly not smart enough to earn a penny pursuing my “real” interest in theoretical mathematics), and if AI LLM’s all gain sentience and put us all out of a job, society as a whole has bigger problems on its hands.
It has made me realise how much I do miss having various projects to hack on and toy around with, free to hack together something without any expectations or demands apart from my own. There’s plenty of ideas strewn about, either in markdown files or in my memory banks - actually getting started and forming a habit around that project has always been difficult for me to hold, solely for the fact I’d need a 48 hour day to cram all my interests for daily work. That combined with the puzzle of having enough cognitive capacity to work after a full days work is a problem unsolved for future me - a combination of passion, spite and caffeine I’d expect.
Regardless though, work is still somewhere I’m going to be spending a significant part of my and day and my life at, so there’s a few general habits to form (and some old ones to break) - nothing unique, just simple things like a paper-written daily work log and being more assertive/vocal/picky on minor complaints, amongst other things. I term it “investing in laziness”, spending time upfront to build more comprehensive job/context-specific docs for personal use, as well as resetting any learned helplessness I’ve built up from minor issues I’ve experienced from working on teams before (Scrum’s numerous sharp edges comes to mind) - make the inherent handcuffs of the job as comfortable and flexible as possible. Summed up (in my mind), be a little less “go with the flow”, be a little more “master of my own destiny” - as cliche as that may sound/read.
Outro
On a broader point, I’ve continually wanted to do small(er) write-ups on thoughts to avoid the accumulation of tangled thoughts that requires effort to hammer out. As always, the constraining factor is time, but its something I want to get into the habit of doing - thoughts on the current job hunt (beyond the obvious of finding it horribly tedious). The turn of the year for me has turned into a time of change - as cliche and as ineffective New Years’ Resolutions tend to be, they are at least a nice convenient cut-off point.
Fingers crossed this year is a little more satisfying than the last! Nice to finally get all this off my chest ready for relaxation and recharge for 2025 - I’m certainly ready to enjoy this Christmas break.