PS:
This blog post has been converted into a talk, which GDG Melbourne very generously hosted. The audio quality is sketchy, but it has points which are not present in the blog post. It is less evocative but contains more concrete advice. You can watch it here.
I.
A scorpion wants to sell some software but cannot code, so it asks a frog to write the application. The frog hesitates, afraid that the scorpion might start running Scrum, but the scorpion promises not to, pointing out that they would both be out of work if they interfered with the frog's programming. The frog considers this argument sensible and agrees to work for the scorpion. Midway through the project, the scorpion demands the frog write Confluence pages, drowning them both in paperwork. The dying frog asks the scorpion why it did this despite knowing the consequence, to which the scorpion replies: "I am sorry, but I couldn't resist the urge. It's my character."
The frog is confused and angry, but most importantly, drowning.
I've been grappling a troubling question, which I trust you'll appreciate that I didn't use as a clickbait title. It would have been a banger. Does learning anything about software development actually matter? I'm in the strange dual position of working as a software engineer for a few days a week, where it isn't obvious that it matters that much, and running a software consultancy... where it isn't obvious that it matters that much.
On the surface, this sounds like a spectacularly stupid question. Of course it matters. Software engineering is a craft, and more than that, it's a craft that creates a lot of value, both in monetary and real terms, across the world. This post has been broadcast across the world to arrive in your house or on your phone thanks to software development. It's something that I've enjoyed for a few years now, and I've learned some incredibly beautiful things about abstraction, thoughtfulness, and design from the practice. And to top it off, I've earned what can only be described as an exorbitant wage for someone whose first job in Malaysia paid a measly A$700 per month, and is now choosing to fly to Europe to see eight people for coffee. That is expensive coffee. Getting better at writing software leads to salvation in the eyes of The God of Code, and to the material circumstances that result in everything else in life getting better.
That's the standard story. But something that needs answering first is "Does it matter in regards to what?", and things immediately become murky.
I will trivially concede that it matters insofar as we must appease Code God, lest They strikes us down with thunderous volleys of blue screens and obscure kernel bugs. Perfecting the craft brings the peace of a craft being perfected, which is no small thing.
But what about everything else that I might want around my craft? Is getting better at programming actually a meaningful way to earn more money for my precious pet rabbit, that he may sup upon the finest hay Australia has to offer? Or now that I've got the basics down, is that done by repeatedly starting leading projects with expensive enterprise platforms and then leaving for the next victim before you're held accountable?
I've said it before and I'll say it again. I would murder everyone reading this in cold blood to protect a single precious strand of fur on his sweet head, and the only secret Patreon benefit is a painless end. Tricking someone into buying the death-pit that is Informatica is table stakes next to homicide.
Am I going to get more than a pathetic scrap of autonomy and respect by reading Designing Data Intensive Applications, or am I actually just going to sit here praying that some dickhead in a suit doesn't decide that it's finally time to bring everyone back to the open-floor plan office? I will acknowledge that some teams will benefit immensely from being in the same room together, but if I am going to learn how LZ4 compression works then you need to give me a door so that I can think in peace, you ratfuck bastards. Plus most companies have cultures that I can only describe as beige, and there is nothing worth preserving in that corporate soup anyway.
Yesterday I published the second episode of my podcast, with Kijana Woodard as the guest. He recounts an incredible story about management telling everyone they have to work the weekend, but management won't attend because they've got a family thing on. Do I want to live my life that way if I have a chance at something else? Hell, I can easily be management because I was born with the grifter gene, and I battle against it every day, like a man who was bitten by an unusually large dog last month and now mysteriously gets real worked up around the full moon. Am I really okay being the person that says "The boss asked me to sell you all on a return to the office, and I'm going to need you in this Saturday too. Everyone, please, stop crying, it's unseemly and your kids aren't that great anyway"?
I mean, is being good at programming even strongly correlated with landing on a good team? I've been in touch with people around the world, at all sorts of companies, and I can tell you right now that literally every team and company is one change in management or acquisition away from becoming an absolute shitshow. To make things worse, I'm still not certain that programming talent isn't negatively correlated with good treatment - it seems to select for a personality that is very easy to exploit. In my wildest dreams, I land a reasonable position and stay there for ten years, but this isn't in my power at all. It seems that I'd be overwhelmingly likely to spend the rest of my life leaping from company to company while the mysterious cocaine-and-supercar connoisseurs play the Game Of Mergers, where you win rich or you lose rich.
Under the framework of the corporation as experienced by Dietrich in Developer Hegemony, being good at programming is not an effective way to write good code even if that's all you care about. Being an excellent programmer is good, but you aren't a carpenter creating a beautiful chair in the sacred temple of woodwork. At most organizations, a third of the room is interested in making a good chair, another third is hell-bent on removing three of the legs to look good on wood-savings with the intention of leaving for a bigger woodworking operation before the whole thing collapses, and the last third have never seen a chair but nonetheless insist on getting a turn with the hammer. Even if all you want to do is craft beautiful code, it seems that the more important skill is to develop the antibodies requires to defend your craftsmanship. I can't do my job if some random guy gets to pick all my fellow carpenters despite the fact they aren't one themselves, and decides how long a chair "should" take to make as if the reality respects human opinions.
Now the question hopefully makes a lot more sense. It is absolutely not clear to me that software engineering excellence matters if you've got serious plans to live with some peace.
II.
A frog wants to start a business selling software, and looks around for a competitive advantage. The frog notices that every other businesses seems to be run by scorpions that are good at sales but not programming, and decides to compete on engineering quality. After a year of work, the frog's superior product is ignored in favour of a scorpion's terrible product, leaving the frog to starve to death. The dying frog asks the scorpion why this has happened, to which the scorpion replies: "lol, lmao".
The scorpion stings the frog for good measure, and calls it a nerd.
It is essentially a cliché that sales is the number one problem faced by most businesses. In fact, it's so common that even people that don't know anything about business will parrot this, so now it's some sort of necessary-but-insufficient condition for being taken seriously.
Sometimes people say that "every business is a software business", and I have concluded that this is self-aggrandizing nonsense. My business isn't a carpentry business because we need chairs to do our job. I do not need chair specialists, I simply need to work out what the value proposition is of buying the most expensive chairs for the team is, and the only things allowing me avoid the moral hazard of trading off their long-term spinal health for my own wallet are my tenuous grasp of ethics and that I only have equal partners, so they're allowed to buy themselves whatever they want.
Even many companies that ostensibly specialize in software, such as enterprise development companies, do not specialize in software. They specialize in enterprise sales, and simply need to produce software that does not collapse until after the contracts are signed. Then they charge their clients for variations, which I can only describe as some absolute motherfucker behavior. There is value in the software being well-engineered, but you can extract most of that value by being able to ship one bug-laden feature every six months. It's the old 80/20 adage - you just need to be able to do work that isn't going to immediately explode, and I passed that standard approximately one year into my career. Most problems are solved by CRUD apps with some simple integrations, and they really aren't that hard to make "good enough", though it would take me a lifetime to make them perfect.
The first piece of software I used in a corporate setting was ResearchMaster, a piece of crystallized devil-hate so fucking foul that contracts in their system were allowed to end before they started, which I discovered when I ran a query on a subset of our data which yielded an average contract length of negative twelve years. This is the competition. By the way, ResearchMaster, I hope your product is so unpopular that this blog becomes the first result when it gets looked up, you mendacious cockroaches.
All things being equal in terms of sales, better engineering is... well, better. But all things aren't equal, and that's why when I pop open the financial statements of a few publicly traded I.T companies (which is extremely enlightening), I see that:
- They mostly talk about the acquisition of large-scale contracts, or businesses they've acquired that come with more large-scale contracts
- The majority of the important people at the company come from sales backgrounds
Even presumably exemplary programmers such as the venerated Patrick McKenzie and Jason Cohen produce oodles of material on sales and marketing. In fact, Patrick McKenzie has an article with early career advice for people titled Don't Call Yourself A Programmer, And Other Career Advice.
Just look at that title. The only bit of advice that deserved making it into the title was Don't Call Yourself A Programmer. That is how severe he thinks the tactical mistake of identifying yourself as a programmer is, certainly to clients, and I suspect even to yourself. Do I want to be a salesperson? No, I want to relax and write code I enjoy, and I suppose I am free to do that as long as I'm also okay being informed that I must keep doing Scrum, even as I want to hurl myself out of a tenth story window every time stand-up rolls around.
III.
A frog has worked extremely hard on some software to ensure the well-being of everyone in the company. However, a recession is approaching, and the scorpions in management must make the hard call on who has to leave the company. After extensive deliberation, the scorpions vote that the frog is expendable. The terrified frog asks a scorpion why this has happened, to which the scorpion replies: "The scorpions have run the numbers, and while we appreciate your valuable contributions to this family, we've concluded that only scorpions are vital in the current economy. Thanks for the code and documentation, moron."
Many years ago, when I was first getting into programming, I watched a YouTube video (that I can no longer find) from the guy that runs pythonprogramming.net, Sentdex. He was doing some sort of Ask Me Anything, and someone asked him why he works for himself when he could clearly go get a job paying ∞ at Microsoft.
He confirmed that he does get a lot of job offers from all sorts of high-profile places, so that was certainly in the cards. However, he recounted a story about his first job. The thrust of it was that he worked for a small restaurant. One day, with no warning, he received a letter in the mail saying that the restaurant had shut down, effective tomorrow, due to financial difficulties. And that's one of the reasons that he works for himself - there's a lot of machinery in place at organizations to ensure that you aren't really sure whether you're on the chopping block or not, or even whether the entire organization is on the verge of collapse. At least he knows if he's about to be unable to feed himself or his family.
In some ways, I was fortunate to witness this behavior myself around the time Covid rolled around. In 2020, I worked at an organization that was absolutely rocked by the international travel closures due to a mixture of genuinely unavoidable economic disruption and being a bunch of financially irresponsible buffoons. The first thing management did was send an an ancient lich-executive to do the rounds around the floor, noting the empty seats, and joking that "coming into the office is probably safer that staying home, what with all the empty trains", which I choose to interpret as an attempt to reduce headcount in extremely permanent fashion.
The second thing they did was to brutally violently lay off as many people as they could, complete with the whole "we scheduled fifty HR meetings in one day" setup (but remember, we're a family). I still remember that they laid off one of the juniors on my team, basically only sparing me because I am, to quote a Scottish friend, "a charismatic son of a bitch". It is extremely unclear if this is a compliment or not when delivered in a Scottish accent.
Of course, the response from the employees was unprecedented, and haunted the sociopaths involved for the rest of their days. They - that can't be right. "They forgot about it a year later and continue to say that everyone knows it's basically impossible to get laid off."
Well, fuck. And the worst part is that the junior they laid off on my team was actually a better programmer than me who exclusively focused on writing good code instead of setting aside buy-people-coffee money. Again, if I finish read Star Schema: The Complete Reference, am I going to be any safer? Shouldn't I just be working on my caffeine tolerance? Do I actually need to step up to cocaine so that I can hang with the big dogs?
IV.
A frog is looking for work for his frog-friend. However, the generous frog is a lowly individual contributor, and must instead beg his CEO, a scorpion, to employ his friend. The scorpion declines to employ frog-friend, even when he finds out that frog-friend has tadpoles at home. The horrified frog asks the scorpion why they can't hire frog-friend, to which the scorpion replies: "Well, look, it's just not in the budget for this year, what with the market in decline, and I don't really get to make calls like that. I only have so much political capital to expend this year too. This would have to go to the board."
The CEO scorpion then hires all his scorpion friends as senior managers. The frog wishes that learning Rust gave it the ability to unilaterally protect its friends.
All I will say about this is that, for the most part, I and readers here have to jump through insane hoops to get friends and fellow travelers hired. We pray that the company happens to have an opening. We pray that the market is good. We hope that the person on the hiring panel isn't going to give the role to a friend (half of my jobs have been promised to me behind the scenes which must have sucked for the other candidates who got fake feedback - I'm convinced that at least 20%+ of roles have this going on too, even ones where this isn't legal behavior such as in government).
But then my friend Ed Kachelries desperately needed his first job in programming, so reader Corey Snipes, a certified absolute legend who runs his own business, just outright hired him for a small gig.
I would prefer to be in Corey's position, where I've done the hard work of making a business with enough profitability to help out a person that needs it, than to be a beggar and have to tell suffering people "Sorry, the boss says the market is down".
V.
A frog is looking for work for himself, although many other frogs have been saying that the market is totally dead right now, and most scorpions in recruitment won't even talk to him. The frog takes some time to figure out exactly what the scorpions want to see, and then replaces everything on his CV with the same three buzzwords over and over. Within two weeks, he has two job interviews lined up with less than two hours of work.
During the first interview, a suspicious scorpion asks "You sure that you're a frog?"
"I have over ten years of industry experience in Frog", replies the scorpion.
I mentioned in my last post that I would look for less stupid work, even if it puts our precious rant sessions in jeopardy. As is my custom when engaging in anything serious, I immediately cooled my blood by 10 C°, carefully considered the state of the industry, then decided to exploit whatever the weakest link is (recruiters and people that don't know how to run interviews) with the precision of an orbital tungsten rod bombardment. I took my CV, scrubbed out every indication of a personality, and put the word "Snowflake" in it over and over because for some reason people think that buying a Snowflake license is going to fix decades of making terrible decisions with their data. Despite the Australian tech market being extremely bad right now, I've got an interview scheduled for Wednesday and finished one last Friday, which I got through extremely easily and was offered a A$10K raise over the advertised price.
I'm not really sure what to say about the fact that I found work so easily. I just put buzzwords on my CV and added/removed a bit of whitespace to my Seek profile so that I always appears as a recently active candidate. Like, do people think that anyone reads CVs? Recruiters just type in "React" or whatever then sort Seek by "most recently updated". Hopefully that advice helps someone out there - remove all the parts that sound smart and try that for two weeks. Like, literally make a one-page CV with no personality, where you use only have one tech stack, and that stack is whatever the most popular fad is.
It's just fucking astonishing, right? I could have a CV that says something like "saved a A$1.2M project, then another A$500K, and oh, and you're looking for communication skills? Well, I just happened to have about a literal million visits to my blog in 2023, here are the two times I ended up on Primagen's YouTube channel, and every year I help loads of people find better work." It turns out that doesn't help at all on the conventional job market no matter what they say they want in candidates - it just makes it harder for people to tell if I'm the type of cog that you can plug into the Snowflake team to make the data go brrrrrrr. The industry just wants to see signs that I'm a frog. If you're struggling to find work, there's a chance that you need to look more like a frog too. If you're desperate and the bastards want frogs, give them frogs.
The image is courtesy of Ash, whose LinkedIn appears to say nothing other than:
Skibadee skibadanger
I am the data rearranger
Ash is incidentally one of my co-directors. What have I done?
In any case, the team I was speaking to seemed decent at software engineering, but I was so disgusted by my strategy immediately working that I declined to proceed any further despite being offered more money and the market being in the dumpster. Plus, you know, if I'm going to sell out it's going to be for way more money at a company whose CEO isn't the the son of the parent company's CEO.
VI.
I've been thinking about this a lot. Firstly, because I will never stop finding this picture funny.
We've all been that frog in some point in our lives. It is perhaps not quite accurate to say that software engineers are the ones getting stung all day at companies - many people have a lot in life worse than ours - but that doesn't mean I have to accept things as they stand anyway.
You can also tell I've been thinking about it a lot because... well, there's this post, but there's also the fact my podcast is actually called Does A Frog Have Scorpion Nature, which is a name so badly optimized for organic growth that you know someone as scorpion-adjacent as me must be deeply, deeply enamored by the theme.
I also receive a lot of emails from readers who have been in toxic environments for many years, and the thing that always springs to mind is the old (untrue) story about how you can boil a frog to death as long as you do it slowly. We're all that frog at some point in our lives too.
It's also a play on a version of a Zen koan I heard listening to Henry Shukman.
A monk asked Joshu, 'Does even a dog have Buddha Nature?' Joshu said, 'Mu.'
For some context:
In the koan, “Jôshû’s Dog” (Mu), Case 1 of The Gateless Gate, a monk asks Jôshû if a dog has buddha nature and Jôshû answers, “Mu.” Mu literally means “not,” but can also be taken as, “Don’t go there.” “The more clearly we see what is going on, the more clearly we discover there is only what is going on.” In the practice of Mu we move from there being someone who does the practice, to there being no one doing it — just Mu, nothing but Mu.
From this we can conclude that I have overloaded the term 'frog' so heavily at this point that it means nothing. But I also suspect the answer to "Does studying programming matter?" is, essentially, "Mu". I have benefited greatly from privileging the study of programming above other things I could have been studying, but that isn't because programming is intrinsically valuable and I'm simply collecting the salary that is rightfully mine - we just have a society right now that demands programmers despite an inability to use them properly. It's nonsense. Sometimes it's useful and sometimes it isn't.
But the framing of programmers as benign frogs that scorpion managers sting isn't quite right. I'm not a scorpion because I worked out how to hack the Seek process. Managers get picked on quite a bit too, just for more money. The frog/scorpion dichotomy throws into stark relief the degree to which there isn't a frog/scorpion dichotomy. Don't go there, no matter how funny it is or how much we enjoy self-pity. There are people who do view the world this way - I sometimes see people respond to my writing with sincere sentiments like "All managers are scum" (they're all scorpions), and I've been in rooms where management has hired someone after literally saying "They seem like a loser who will do shitkicker work without leaving" (we want a frog), and they're fucking miserable. It's all a losing game.
In fact, I'll go a step further and say that even thinking of myself as a software engineer is some sort of internalized violence to shake off. We're all just... us, right? Calling myself a data engineer might make sense for some sort of short-term contract, in the same way that calling a plumber conveys a lot of useful information when a faucet is leaking, but that isn't really what a permanent office-based role means for most of us. You have to bring a lot of yourself to work, especially when you aren't remote, whether you like it or not. And even if you didn't, is it really our first choice to not be ourselves for eight hours a day? Is "data engineer" really the abstraction I want to present to the world?
I have a serious responsibility to the people that founded my company with me - I've asked a lot of close friends to trust me when I say that I'm going to try position them for more authentic work and autonomy. They give me a lot of time and energy, with the sincere belief that I am somehow going to position them so that they can do work they believe in (instead of whatever nonsense the market thinks it wants), for sums of money that afford them and their families comfort, with enough reliability that they aren't going to be blown out by outlier events. As much as I would love to do nothing other than commit to the full year of technical study I had laid out, I'm starting to realize that the most important skill I can cultivate is being totally agnostic as to whatever skills I decide to cultivate, and any other illusion is a luxury afforded to me because my day jobs have frequently not mattered or have been paid for (sometimes a century ago) by someone that bothered to learn the bits that software engineers are largely convinced are beneath them. I don't think this is actually the case, but it's hard to imagine a more perfect conspiracy to keep a lot of inefficient businesses around. A wave of people with holistic business acumen that can also single-handedly ship apps would be disastrous for many, many rent-seekers.
If there is a common failure mode here, it is simply:
A lot of software engineers (including me) go through phases where we're passionate enough about computing that we try to convince ourselves that it's the pathway to other things we want, because that would be really convenient. Which is, of course, not how the universe works.
From there, it was a short step to believing that, even if my company totally collapses, engaging with the job market as a "software engineer" seems to be a losing proposition (for me, and I suspect many others). And again, worse, a boring proposition. Now that I spend time thinking about the Dark Arts, such as branding and how it affects the dynamics of a sales conversation, I've realized that calling yourself a programmer is a career-defining mistake - outside of very unique specialties like neurosurgery, being in a position where my livelihood is dependent on my title rather than a holistic assessment of my intelligence and capability is like being two moves from forced checkmate. I can still write as much code as I want to a higher standard that I have before, so long as I'm willing to do the work to protect my code.
I've mentioned in previous posts that I'm deeply interested in psychotherapy and clinical psychology. Something that comes up frequently when I speak to clinicians is that it sucks to work at many (most?) clinics. They force you to see eight clients a day, back-to-back, so that they can crunch as many billable hours out of the clinicians as possible. This is a horrible experience. Most of the clinicians I know that escaped this trap seem have started private practices, which means learning about taxes, sales, marketing, renting office spaces, managing client relationships, and all those things that people say "they aren't interested in" without even taking a stab at it. They run a good business, and this is what gives them the sheer profitability required to take care of themselves, and their clients. Do you know how many people tell me they hate negotiating salary when the initial offer is "good enough", then ask me how I afford a three-day work week? Take free money or don't take free money, pick one, but don't complain about it later.
The space to make specialist decisions and respect the craft to everyone's benefit is what I want software engineers to reclaim for themselves. And the great news is that because sales books are way more simplistic than programming books (but you can't hide your embarrassing failures in a private repository, you've got to try on a real person), you can hit the one book level really quickly!
Most of my working hours these days are structured around:
- Writing random stuff for this blog
- Audio editing for the podcast
- Writing more stuff for the company website
- Doing a spectacular amount of work on sales, strategy, and most aspects of whatever you imagine when I say 'business'
- As many calls, coffees, lunches, and dinners as I can possibly handle while still enjoying myself
Then way at the back, having decided that it isn't actually that important:
- Reading Designing Data Intensive Applications
- Getting some mentorship from a very generous ex-AWS reader
VII.
You know what the strangest thing is, after all of that?
Having decided that technical study genuinely isn't important for me right now (this isn't an instance Betteridge's law where I turn around and say that programming study is actually the best), I've never enjoyed my time spent studying more, or learned faster.