This is a story about arrogance...
I have spent huge chunks of my career helping the rich to get richer, not doing anything useful for society at all. I have suffered as a wage slave, working a bullshit meaningless job, doing nothing except making the world a worse place. I have been denied the pleasure of being a builder creating something real and tangible.
I'm very jealous of the engineers who get to work on useful projects - helping to feed, house and clothe the masses. I wish I was working on something more worthwhile.
The project I'm working on is quite simple really: ask a bunch of people a bunch of questions, and gather the answers so that they can be analysed. I suppose you could call it "big data" if you wanted to use an over-hyped phrase that's in vogue at the moment, but really it's just a big survey; an opinion poll.
I've developed software for nuclear submarines - that was my first full-time job. I've developed software for trains and busses. I've developed software for every school in a whole country. I've made computer games that were played by half a million people. The computer games were the hardest.
As an old-school programmer, I slaved away at my keyboard, creating the graphics, sound, music, and endlessly playtesting my games, to make them as good as possible before I released them to the general public. That was hard work.
But it was rewarding.
The challenge made it rewarding.
It was rewarding because it was difficult.
Creating an online survey is not difficult. I expect you could do one in a few minutes, using something like SurveyMonkey.
So, how do you make your day job interesting if the project is not challenging? Well, there's a lot of challenge in getting anything done in a big organisation. It's a million times harder to do anything when you're inside a big organisation, and things go painfully slowly. The interesting part is in trying to build anything at all, in the first place, and in trying not to build something that sucks, just because big organisation software always really sucks.
One programmer can make a game in one month. Two programmers can make a game in three months. Ten programmers can make a game in two years. And so on. And so on.
I'm not saying my colleagues aren't any good. I'm just saying that trying to learn computer programming as your day job, working for a big organisation, is pretty much impossible. The only way that anybody ever became a good programmer was by first being allowed to work on a whole self-contained project themselves, and having to support and maintain the code; having to deal with angry users reporting bugs; having to be up in the middle of the night figuring out a mess that they created. You can't learn that stuff if you're just a junior member of a big team.
It does make sense to break a system up into components which are then assembled to create the finished product. It does.
What does not make sense is dividing up a piece of work which could be easily accomplished by a single developer. It does not make sense to have 8, 10 or even 12 programmers all trying to work on the same piece of code. It is not fast. It is not efficient. It does not produce a good end result.
However, would I like to have to support and maintain my code after the project is live, on my own?
No.
Of course not.
Whenever I have finished something which was big and complicated, and hard work to complete, then I never want to see it ever again. However, if I'm the person who created all the code, then I'm the only one who knows how anything works, and it's a very difficult steep learning curve for any poor unfortunate who has to come after me to unpick my work.
In this regard, I suppose it's necessary to have a bunch of people, so that the 'hero' code warrior doesn't saunter off into the distance, leaving some other poor person to carry the can.
So many times in my career I have inherited somebody else's mess.
Which is why the pleasure and professional pride I derive from my work at the moment, is in the effort I put into making a system which is simple and easy to maintain, and easy to support. There's a temptation as a good developer, to be really smart and do things in ways which seem very elegant and beautiful to the trained eye of a highly skilled engineer, but are completely impenetrable to your average journeyman junior programmer, just learning the ropes. I take huge pride in creating deceptive simplicity. Yes, it's great to show off how smart you are by creating something complicated, but it's so much harder to create something that looks simple.
I am intolerant of the incompetence of a highly paid consultant who I have to suffer. "Why would you put that there?" "Why would you do it like that?" "Why didn't you read that comment?" "Why are you making such a mess of everything?" "Why have you introduced all this unnecessary complexity?" are questions I want to yell at my incompetent colleague all the time.
My junior colleagues are, well, junior. I can't get mad at people who are just learning. I have patience for learners. I spend a lot of time coaching and mentoring, helping my junior colleagues to learn and develop.
My graduate colleagues are stupendous. They have amazing ideas. They produce great work. They are smart and a pleasure to work with.
Why oh why oh why do I have to work with somebody who doesn't deserve the massive consultancy fee that they charge? It angers me that they are lagging behind the graduates and dragging the project into the dirt; making a complete pigs ear of everthing. It would be so much better if they weren't on the team, because they are so slow, and what they do produce all has to be re-done, so it creates a huge amount of extra work for me. Their work is riddled with bugs and defects. Their work is shoddy, so their contribution is not welcome: it's counter-productive.
Of course, I shouldn't rip into colleagues on a public platform. But, they ruin my day and undermine all my hard work, threatening the success of the project, so why the hell shouldn't I let rip? They're costing the organisation a shittonne of money, which is a complete waste of money in my opinion.
Anyway, I often think "would it be better if everybody just stepped aside and watched me work?". I think "would it be better if I designed and built the entire system, on my own?".
No.
No it would not be better.
I would finish the project, but I wouldn't want to support it. I wouldn't want to maintain my own code. I wouldn't want to ever look at the code ever again. I wouldn't want anything to do with my code or the project. That's not fair on the poor sods who would have to support and maintain my code.
It's also not fair for just one person to have all the enjoyment of creating an entire system, and then to ride off into the sunset believing that it's a job well done, when software is considered to be an asset - all the code will be preserved and future development teams will be forced into attempting to re-use it, when really it should be thrown away. Decrepit old systems, where all the original developers have long since left the company, should never be resurrected, but they always are. Idiot management always wants to adapt a system for a purpose it was never designed for, and that nightmare always falls on some poor unsuspecting underpaid junior programmers, who will have a horrible life, being forced to work with somebody else's code and never being allowed to create their own system.
Sure, the arrogant part of me wants the glory - the heroics - of creating some massive complex system as a one-man team. I don't want the faff and the hassle of having asshat overpaid idiot incompetent consultants, messing up my stuff. I don't want to be slowed down by people who aren't as experienced and quick.
But, I know it's better for everyone if we do things the "modern" way.
I wish I had been born earlier, so that I could have been one of those programming gods who created an entire video game, but I suppose I had that glory. The first iPhone was my opportunity to create retro games, in just the same way that the early video game pioneers did - a bedroom hacker. I grabbed that opportunity and I loved it, except I also learned that I never want to ever touch my code again when I'm finished - I want to release something and then forget about it.
In this era of the web, people expect products to be maintained. Software no longer ships on cartridges, floppy disks or CDs. Software can be updated via the internet. Software is delivered via browsers. Software is constantly being updated by the developers, like websites are constantly updated, so software development had to change to reflect this. Software development is now a team sport, but I came from an era when a prima donna like me could do everything on their own.
I fear this essay has revealed an unpleasant side of my character. I fear that I've crossed lines that I should not have done. I fear that my arrogance is on display very badly.
Still, I had to share this. It's my habit to share things that are bothering me, and/or that I feel very strongly about.
It's a difficult time, because there's a lot of pressure and stress. I feel like yelling "shut up and stand back" and "hold my beer" while I roll up my sleeves and get things done. When I come under extreme pressure and things are going wrong, I retreat into my comfort zone: working in isolation. Nobody was with me when I learned how to debug. Nobody was with me when I figured out how to solve complex technical issues. I had to figure those things out on my own. Nobody comes to me with the answers: I have to figure them out, and I do that on my own in isolation. When I get stressed, the last thing I want is any "team" - the team adds no value in those difficult situations where there's a dreadful gremlin in the system, and it does take some one-man heroics to find and fix the problem.
I've written vastly more than I intended to, because I'm very highly-strung at the moment; the pressure is immense; the deadline is imminent.
I can hear colleagues' angry voices in my head:
"You're not the only one who's worked hard on this"
"You're not the only one who cares"
"You're not the only one who's made a valuable contribution"
"You're not as good as you think you are"
"You're arrogant"
"You're full of yourself"
"You think you're so great, and everybody else is inferior"
"You're not a team player"
I know I would have had a breakdown a long time ago if it wasn't for the team. I know that the project would not have been as much fun if it hadn't been a team effort. I know that it doesn't end well when I reach the finish line and collapse; that it's not a good way to finish a project, when there are ongoing requirements for support and maintenance. I know that arrogance and delusions of grandeur are a problem for me.
Anyway, this is how I've spent my weekend: worrying about work.
Tags: #computing #career