Up front I’m going to say this: It’s really weird sitting down to write this blog post less than a day after former president Trump just survived an attempted assassination. While this post has been forming in my head over the last few days, give or take, it still feels weird to write about something that isn’t exactly at the top of my mind at the moment. One thing I’m sure of is that not only will the consequences of yesterday’s failed assassination be far reaching but that there will be plenty of time for content creators such as myself to more fully consider what those consequences are. But I’m guessing that just like me, y’all could use a break from all of that.
In any event, this post isn’t about politics. It isn’t even about tech in strictest sense. Rather it is about me and my ego and how it has basically served as the underpinning for everything I’ve done in tech over the last 25 years. While I am reasonably clever and have proven quite adept at wrapping my actions in a protective cloak of high minded and ethical principles, it doesn’t change the fact that when I look back and try to be completely honest with myself most of my actions weren’t really driven by that at all. No they were driven by something far less admirable: Ego. Specifically my ego.
This statement doesn’t mean that I’m abandoning my self-appointed position of ethical hall monitor for the tech industry. Not even in the slightest. This industry is insanely unethical and overly concerned with a vicious cycle of switching out pointless abstractions which has been successfully exploited by the MBAs in the industry to extract billions if not trillions of dollars in unearned revenues from a largely clueless and trusting customer base. It does however mean that I have reached a fork in the road and at this point in my life’s journey I am taking a very hard and honest look at my own actions in the past in an effort to find some way to stay in the industry long enough to allow me to prepare for the next phase of my professional journey, whatever it ends up being.
So what does this mean? It means that in the past I have been driven by my ego in more ways than I have been willing to admit. It wasn’t until the last couple of years that I began to realize this however. You see as a software developer I had fully drunk the Kool-Aid around being able to make a difference in the world through my work in tech. Realizing that this was bullshit has perhaps been the hardest realization I have ever had to make over the course of my life and I’m saying that knowing full well that the process is not even complete yet. However at this point the foundation has been laid and I have finally begun to realize that nothing in this industry is really about me, the individual engineer, no matter how much I wanted it to be at times.
The most poignant example of this was my long held curation of the “optimal web platform”. For years I worked on various projects (not going to go into too much detail here due to op-sec), some personal and some professional but I always managed to find a way to use these projects to try and advance my vision in this area. For years I had an unofficial web application codebase floating around on my home network that basically served as my preferred starting platform for new web application development. This basically continued until late 2022 when in a fit of realization I finally came to the conclusion that this is an idea that I absolutely had to abandon.
How did I come to that conclusion? Well I had recently taken on a new job and they were dead set on making use of a low code platform to write a custom ERP / MRP system. Yes this was a terrible idea, however to be perfectly fair to my employer at the time: They were totally up front with me about this during the interview. This was an arrangement I agreed to knowing full well what it would probably mean. While I was highly motivated to leave my current position, that still isn’t a valid excuse. For me to complain about their choices despite the fact they were totally transparent about those choices with me up front would be in really bad form. Long story short: It’s not their fault I ended up working on a low code abomination, it is mine.
So a few months into this gig, I was dutifully working on adapting my optimal web platform to work for this project. I actually got pretty far into it too. I was planning on pitching this as an alternative to the low-code approach during out next onsite which was due to happen in a few weeks because it had become very obvious to me that the low-code platform was utter dog shit at this point. Nevertheless the closer I got, the more time I had to think about it until eventually a thought popped into my head that basically killed my motivation to work on it any further:
“This is their project, not mine.”
Reading it over again now, it seems to be such a simple sequence of words. However it underscores a basic truth that I was completely oblivious of up until that point. It moved me in a deeply personal way because once that idea cemented itself into my brain, I realized that what I was doing was entirely about me and not about them. They were transparent and up front. I knew from the get go that this idea was idiotic and likely to fail. But I took the opportunity fully planning to flex my technical muscle and attempt to move the needle towards what I considered to be a more sane direction.
This was deeply unethical on my part. But I didn’t realize it for months because I was operating on a premise that was entirely wrapped around my own ego. Yes their approach was going to fail. In even the absolute best case scenario they would build an app that would be effectively tied to a terrible proprietary on-premise platform that required over half a dozen Windows servers to be supported and maintained using a tech stack that there was effectively no market for. They would never escape the vendor lock-in. They would never be able to be in control of their own tech destiny as long as they traveled along this path.
But here is the thing: They have the right to fail. Not even just a right to fail. They have a duty to fail. That company will never be able to chart its own successful course in IT and Tech unless they are forced to grapple with the consequences of their actual decisions. Even if I had continued and ultimately prevailed, the company wouldn’t have learned anything. They would’ve just substituted one fallible source of authority, the makers of the low code platform, for a different fallible source of authority: Me. What makes me worthy of that position? I have failed so many times in retrospect that it has boggles my mind to think about it sometimes. But I learned something from each of those failures. They made me into a better engineer.
So I backed off. I didn’t push my platform at all. Instead I ended up pushing more baseline infrastructure related changes that would solve actual problems without spitting in their face of their idea. I tried my best to do the job I was hired to do and make their vision a reality with the tools they afforded me to make it happen. I didn’t last. I left after 18 months to go work where I work now. However this change in approach marked the beginning of a very long and still ongoing journey for me which can thus far be summed up in a single sentence: Learning to leave my Ego at the door.
Part of the problem here is how and why I initially learned to code. My father had purchased a used Apple II from my Uncle for the family and gave it to me and my two siblings as a Christmas present in mid-eighties. He also purchased a BASIC coding book with cartoons aimed directly at kids. This made sense as he himself was a software developer and clearly wanted to see if he could spark an interest in the craft among at least one of his children. He succeeded because I took to it like a moth takes to a flame. I loved coding. It made me feel good to tell the computer what to do and watch it execute those instructions. It was the ultimate ego-trip at the time. I think for a lot of engineers, that’s what drives us. That feeling of empowerment that comes from making the system follow your instructions. The more talented you become, the more complex the designs become as building the same old things doesn’t really generate the same level of ego impact during subsequent “performances”. If I was a more cruel writer I might take a leap and liken this to a junkie’s tendency to over-indulge in their quest to chase the high they can’t achieve anymore due to their ever-growing tolerance. But I’m not quite there… yet.
At my current job, there is tons of high end greenfield work being done around the company. Most of it is cloud based and some of it is even AI based. A lot of it uses tech stacks that I resent. Thankfully I’m part of a team that is more mired in the legacy end of things. But even in this case, I have had to restrain myself. Some of these legacy processes are insanely terrible but nobody wants to touch them because they largely just work. Over the last three months at my new job, I have finally begun to get a feel for what engineering without ego actually looks like, and I gotta be honest: It’s a real adjustment.
But between my ongoing quest to embrace self improvement over technical improvement and the fact I’ve been getting therapy for well over a year now, I’m beginning to find some peace in all of this. If somebody wants to hire me to work on crap, that’s fine. I’m just here to make a living, put food on my family’s table and secure a reasonably optimistic future for us. Everything else is secondary. Deep down I still strongly feel that building cloud first solutions with dozens of possible points of failure is an epic fail that one day will turn around and bite the entire world in the ass at the same time. Deep down I know that most of the new tech around web dev is largely bullshit. We haven’t really created anything impactful since the advent of AJAX, JSON, REST and Responsiveness. Those are the techs that form the core of what makes a modern web app a modern web app. Everything else is just window dressing. But all of those thoughts are ego-driven impulses. If I’m working at a place and what they are doing largely seems to be working and they aren’t screwing their users / customers over, why am I getting all pissed off about it? Well as it turns out the answer to that question is: I don’t really know. So given that realization the only rational response is to stop being so invested in these things and stop allowing deviations from this “optimal tech platform” to aggravate me.
That doesn’t mean that I’ll never quit another job. At the last place I worked (a non-tech company), what they were doing CLEARLY wasn’t going to work. They were building an insanely complex mechanism in which nobody wanted to work out any of the real details because nobody wanted to risk getting blamed for getting it wrong further down the road (despite being very nice people, their corporate culture was very blame centric and people acted accordingly). The place I’m working at now is a successful company offering a successful product and making money regardless of all the other tech mumbo jumbo. The perks are decent and so are the people. I don’t have to be a rock star to be valued.
So who cares? I’m on my way out of this industry and I gotta be honest: I’m tired of caring as much as I used to. Although it is my goal for this job to be my last in the industry, I don’t really have full control over that, just like I don’t have any control over the tech my employers choose to build solutions with. I could get laid off tomorrow. If that happens, so be it. At that point I might just take some online COBOL and JCL (fun fact: I took two semesters of COBOL back in college and I hated it at the time) courses and find a job at some stodgy old Fortune 500 maintaining 40 year old software because I still need to work on my exit… so fuck it. The older I get the more pointless this burn and churn of different-enough-to-require-rewrites but ultimately very similar tech seems to be. The idea that a large part of the world is still running using code written that long ago actually gives me hope. This of course is a reference back to the “Longevity of Code” concept I mentioned in my post from last month, “Proprietary Software is a Dead End”.
I promise, we’ll spend more time on that concept later. Goodness knows that it deserves a very long post all to itself.
The real point of all of this that I’m tired of being angry. Both at the industry but mostly at myself. So instead of pushing my vision in caustic ways through my actual coding work, I’m going to just try to make things a little bit better each sprint and do my best to support the team that I’m on. Anything else is probably just going to be more aggravation than it is worth. What happens past that is going to happen and I’m finally getting to the point where I’m mostly good with that. Whatever is left over and fit to print, will end up here.