An Open Letter
⚠️ Language / rant warning in this one ⚠️
I'm struggling right now.
I'm not sure if anyone needs to hear this (or even wants to, lol), but this post is perhaps really more for me to see if I can find motivation or optimism in my software life again, as I just started to have a glimpse of it with some recent fun things I've been learning, but had it quickly stamped down this week and have fallen back down into my trench of day-to-day software drudgery.
Some context: right now, its 19:21 on a Friday and I'm still here at my computer (where I've been all day other than a 30 minute lunch break and an hour walk about an hour ago).
Things I still want to accomplish tonight (way overoptimistic, as usual):
- multiple blog posts (Including this one, which I suppose I'll manage tonight, but I have a backlog of 3-4 really nice ones I can't wait to share that I just haven't had time to draft)
- try to publish a full stack beta example of Kurynt, but this involves building a MVP backend in a language and framework I'm not very experienced in, a pipedream if I want to try and finish that tonight I suppose
- take a look at next.js, nuxt.js, and svite (it's really overdue I finally at least read the homepage of each of all these buzzword tools I've seen in passing, but just havent had time for)
Why? Why would I keep the grind up so late tonight? Mostly, I think it's because I feel guilty. Guilty of what? That I didn't get an offer for that recent position because I felt as though I failed the interview? That I don't feel like I'm being payed my worth at my current position? That no matter how much I learn, build, or implement, I always feel like there is more to learn and do?
Perhaps a deeper question I've been asking myself is if all this posting, building, thinking, designing, learning, and implementations will really mean anything for anyone (or even myself) in the grand scheme of things. Am I gonna look back when I'm (hopefully) 80-90 years old and be glad I built that fancy animated widget on the night of May 7th, 2022?
Yet I think a straightforward answer or guide isn't so simple to find. I'm always torn between two ends which have been fantastically meme-ified in our current binary times: I'm definitely not of the YOLO / antiwork / do the bare minimum camp, as then you as a human are providing literally no value to anybody else; however as of late, I've also been straying away from the camp of the external "mindset into grindset" that you should always be working. Who is going to know or care you learned one more language or technique over the course of your life? Probably no one.
It doesn't help that my general disposition to software as a job and/or career has also darkened over the past few years. As I've moved through quite a few different types of companies (and worked with even more), with a variety of responsibilities, tools, and languages, I've begun to notice the trends and general reality of the software ecosystem as a whole has huge problems including (but not limited to):
- hype culture Always trying to push and use the latest framework or tool, or thinking there are sorts of 'get rich quick' schemes within software as in 'implement XYZ apps in XYZ minutes'.
- the epic and forever war of the frameworks "X is better than Y, no matter what, Z is better because it is Y language, etc. etc. on and on." it's exhausting, and doesn't provide any value. it's also wrong in the sense that the true meaning of "X is better than Y" doesn't have much objective meaning in general. much better could be: 1. what did you learn with this framework or language? did you learn to see things in a different way or some other gain? 2. what were the advantages of using it? 3. do you know a tool that does some things better or worse than this one? 4. how long did you use it? was it long enough to truly and deeply know all the quirks of the given language or framework? these are the questions we as a whole community should be discussing and valuing.
- over-optimization ego culture "Yes, we need to serve 10 million+ clients with load balancing, database replication all on kubernetes with canary and/or blue/green distribution for our all of 3 clients we actually have today". A quick google search will give you dozens of software experts in their own right, who say that early over optimization is ALWAYS a BAD idea. So there's that, but hey I'm just an idiot, and if you want to be "cool", go ahead.
- rewrite / redo culture Goes with the previous point a bit, i.e. the "I don't like this for (insert usually petty reason here), so we should take months of product stagnation to rewrite this". Suck it up and incrementally balance product with maintenance, refactoring, and rewrites.
- interview culture Memorizing answers / code solutions ad nauseam has little to 0 indication of how you may perform as an employee, yet it is relied on by nearly every company as the final gate to an offer.
- knowledge vs. curiosity vs. intelligence vs. experience culture Do we really expect everyone to get every answer correct in these technical on-sites that cover anything from linux system administration on the backend to React hook usage in the frontend? I don't care if you're Einstein, there's no way any human can keep that much information in their working memory, let alone over a time peariod of the now 'standard' 5-6 hour, 4-5 round interview. I'm sorry, its just absolutely toxic, there's no other way to say it. I've schooled people in interviews on a variety of topics, and been schooled myself on many more. That's what software is: it's a constant conversation, and too mind-bendingly massive for any one dev to know it all. Unicorn's don't exist, but humans do.
- hiring / recruiting culture As us developers know, the classic case of "we want 10 years of experience for a tool or language that has been in existance for only 5 years", or "we need people who have been using tool X every single day for the past Y years" occurs only far too often. (These are both real examples, the first one is anyway quite famous and the second one I really did from a recruiter). I mean give me a break, we don't ask our accountants that you've been adding up certain amounts of numbers for X number of years. This is also simple and utter bullshit. I can't even visit my LinkedIn anymore, I have simply too many spam messages for recruitment that it's simply not manageable.
- underestimation, under-valuation, and resource-only culture "Ah, it's just a dev, they writes some stuff in a document and they can be quickly replaced!" This is total bullshit. We're humans too, and not just robots to do a manager's bidding. We're the ones making tens (if not sometimes hundreds!) of detailed decisions a day that will DIRECTLY affect your business and product (and in some cases directly are your product!) I've seen companies grow and die because they placed absolutely 0 care or consideration in their developers - here in Europe, some companies treat their entire IT department (or even entire child companies) as an opportunity to be outsourced and delivered to the lowest bidder. This is a recipe for absolute disaster. Granted, I think this piece of the culture is finally starting to change, but it is an extremely slow change. (It's like, hey, your company IS fucking tech, you'd better put ALL your money IN the tech, not try and see how much of a technological mess you can accomplish at the lowest price tag possible!)
A lot of these points are so complex and have such a variety of origins I could probably write a separate blog post for each one of them - but maybe that's for another time.
I think a lot of these points and reflections I have are self inflicted or perhaps self developed over the years. Perhaps I'm being way too skeptical and the ecosystem isn't actually as bad as I describe it, or it is partially this bad and I'm shedding an even darker light on top of it.
Speaking to my self inflicted skepticism, I'm a people pleaser at heart, and when I delay a feature release or produce a bug, or am slow to complete a promise made to a client, I put usually 100% of the blame on myself. It results in this behavior to push myself in continuously trying to improve my craft, learn more, and be a better software engineer. (This then triggers a burnout-like cyclic behavior where if in the evenings or weekends I'm not working or learning about software, I feel guilty and hop back on the computer - no good.)
The problem of being both nice and competent is a double edged sword. People start to realize you can accomplish tasks and you are willing to help them, maybe even for free. I know, I'll be the first to admit, I've done far too many tasks and gone above and beyond completely for free simply because I wanted to help the person who requested it. ("Reformat this! Add this image! Add this page!" All for free...)
I think I simply have hang up this mentality as best I can, and remember that software truly is a human enterprise, not a machine one.
I'm a human, not a machine.
Whew, I feel much better writing that all out (at least in the immediate sense - I don't think it has changed my general disposition on the ecosystem and the fact of the points I've listed above). Hopefully this rant / post helped you burn off some steam too.
I think I'm off to go try out my first custom gRPC contract with Kurynt now 😄. It's this fun feeling of the first time learning something new, or trial and error exploration that every dev should try to hold on to and never forget - remember its this same spark of excitement that perhaps got us started with software in the first place!
Oh yeah, and it's 20:43 now... we'll see how far I actually get 😂