The pursuit of happiness: Software development in 2019
I remember my first taste of software programming, experienced at the age of eight on a borrowed Acorn Electron. Hunched over Electron User, pre-adolescent me spent hours typing (and re-typing) masses of BASIC, trying to get the game to compile, all so I could experience the thrills of using the A-S-W-X keys to hoof a two-dimensional tennis ball over a dotted-line net. Software programmers (and they were most emphatically programmers, and NOT developers), of which I was just an acolyte, had their work cut out – programming often meant working directly with low-level languages, down below the depths of the cotton-wool-and-cuddles familiarity of BASIC and into Lisp, C or assembly. And forget Stack Overflow – solving problems meant reading manuals, scribbling down algorithms, reading magazines and working it out for yourself. Although physically I was alone, I wasn't – there were thousands just like me, loitering in darkened bedrooms, immersing themselves in the world of the computer, accessible via BBS forums, Usenet and IRC. My generation, and the generation just a few years older than me, produced a range of computer geeks that are now household names: Linus Torvalds; Bill Gates; Tim Berners-Lee and Steve Jobs among the most well-known.
It is a challenge to sum up those years just a few words. My impressions and memories are of dusty keyboards, the smell of ozone, the tiny print of incomprehensible technical manuals, winding back the cassette tapes with a pencil. Losing my tenuous 28.8k Internet connection while my mum made a phone call. And happiness. Pure, unadulterated happiness whatever I was doing: navigating around some imaginary textual dungeon, figuring out what an IRQ port was or screaming obscenities at the 12” screen as the 94th floppy disk in the Windows 95 installation media revealed itself to be corrupt.
Before we get too lost in nostalgia, let's fast-forward 25 years, as I write this sat in an open-plan office in a Northern UK town. Oh, how things have changed.
Software development is no longer, for many, characterised by happiness. Part of the joy of software development is the feeling of solving a problem, connecting the vision in one's head to the code written, the keys pressed. Any builder, plumber or other tradesperson will be familiar with the feeling of enormous satisfaction when a job is completed, and completed well. That same feeling, the hit of dopamine when the program compiles, when the outcome scrolls past the screen, the rush of I did it is, at least in part, what drove early computer geeks to spend their time deprived of sunshine and exercise. Things are different now. As a veteran of a few dozen client engagements in my particular niche of expertise, I can testify that the culture of development is now much changed.
In a process that began with the great dot-com boom of the late 1990s, software programming moved out of the bedrooms and basements of hobbyists and into brave new neon-lit offices. Brilliantly satirised in Office Space, these environments became the antithesis of creativity – instead, project meetings, management and TPS reports became the currency of progress. The generation of (mostly) introverted, archetypal programmers were dressed in shirts and shoes and bussed into this white-collar world to put their talents to more profitable use.
Of course, this is nothing new. Many readers will be moving on right about now, dismissing the rest of this post as 'just another rant about Agile'. But this is important. Businesses recognised that miserable, time-clocked, overmanaged software programmers produced little of value. Waterfall reigned supreme, and start-ups, small firms and off-the-grid open source communities produced innovations at an order of magnitude faster than larger, monolithic Initech-type multinationals. During my early career working for such an organisation, I was struck, even then, by how little work was actually done by the thousands upon thousands of employees working for it. Not work as measured by meetings, or decision-making, or flowcharts – work as measured by quantifiable, actual, useful output. For a time, industry was stuck.
And... along comes Agile. Around the year 2001, seventeen software programmers decided they'd had about enough, and got together to publish the Agile Manifesto. Rebelling from years of waterfall-driven management and low productivity, the Manifesto prioritised individuals, interactions, collaboration and responsiveness over processes, documents and planning. Spawned from early offshoots of what they self-termed as 'organisational anarchists', the Agile Manifesto reflects a new way of working freed from 'the baggage of Dilbertesque corporations'. Over the intervening years Agile grew in popularity and the management consultants jumped eagerly on board. Agile is a watchword in today's IT landscape, with a whole industry having grown up around it, incorporating project-managers-cum-Scrum-Masters and a whole new vocabulary. Suddenly, programming (rechristened 'development') was fun again, with that element of problem-solving restored and a sense of real progress and real contribution to a larger goal.
And yet. New methodologies have gotten old. Agile methods have become stale, and the original goals of people over processes have been neglected. Velocity is measured with contraptions like story points, and tools like stand-ups are misused. Instead of working on large-scale projects with interesting goals and a high rate of throughput, developers are reduced to automatons, forced to work on bug fix after bug fix, minor feature after minor feature. Sometimes these 'features' are little more than a 1-line amendment, an IF to an ELSE, and are feted in weekly town-hall meetings as evidence of progress. 'We shipped!', cry the new management, and never mind that the change itself amounted to nothing. The sense of achievement and purpose has disappeared again into the organisational machine, the machine that eats innovation, stifles inquiry, stamps on creativity and negates fun.
Looking across the computer science field, we have robots that can run, jump and dance; nanotechnologies on the scale of the blood cell; advances in mathematics and cryptography that are leaving companies scrabbling to keep up; development of the cryptocurrency, for good or ill, all by multi-disciplined teams of engineers, computer scientists, academics and many more. When it comes to bread-and-butter software engineering though, it's not unfair to say that most development talent is being misspent on make-work projects.
Where's the next TCP protocol? The next programming language? The next paradigm-busting, earth-shaking innovative leap in software? Instead, what has emerged are endless half-formed frameworks, built eyes-down, brick-by-brick, trial-and-error with little emphasis on quality or design. In the office we've forgotten how to innovate, and the management processes governing software developers have dissected and quantified the actions of developers to simple, repetitive tasks.
Your ordinary software developer? The archetype of the introverts who helped started it all? He's trapped, trapped in the open-plan office, sat on his bean bag, sipping his latte, holding up his Scrum poker card and wishing he was back in his bedroom or, in fact, anywhere else but here.
We need to rise up against this commercialisation and commoditisation of the developer culture. Stand up against the happy-clappy tyranny of the middle management layer's version of Agile – which is nothing like the Agile Manifesto. If your company is doing it wrong, tell them why, in letters twelve feet tall, so they are left under no illusions.
Let's get Agile right, so it delivers more, and remove the Kafkaesque culture overshadowing Agile today. Let's develop, create, explore, have the freedom to get it wrong, and stop measuring productivity by the velocity of single-line change releases. Let's make the whole culture of development more adult. You don't need the fireman's pole, or the bean bags, or the slide. You're not five years old. You're better than that.
Try having a cup of catering-tin coffee instead of your artisanal latte. Let your desk become a mess, stay late hours because you want to (and not because you're told to). Create stuff that occurs to you. Try things out. Explore ideas.
And for God's sake, to all geeks out there: start enjoying yourself again.