I had a lengthy pretext, but decided to cut the chase and jump right into the main part. I am experimenting with this new writing format that I enjoyed and would love to hear some feedback if you liked or not. Please, no praises for the sake of it. I would like to improve my writing, false confidence does more harm than good for my goals. Thanks (:

Bob is a very busy man, travels a lot for work, has very little time to pack things up. Bob would like to spend those few hours he has, to relax and prepare for his next destination. Bob hires you as an assistant to help with his non-crucial responsibilities, and asks you to figure out how to reduce the time he spends on packing up. You come up with some options.

You pack his stuff up for him. But now you’re busy, cannot do your other responsibilities. Bob now has to do your previous low-priority responsibilities himself, so no time is being saved for him there.

Bob has extra money, you can hire someone to sort this out. Turns out the overall cost is not just a salary, also having an extra third person traveling everywhere with Bob is now costing more than he would like to spend. Also Bob still gets disturbed every now and then to make decision on stuff to pack. While small, those interruptions are enough to make him lose his focus.

You eventually propose: let’s buy some new clothes from the places we go, and throw away old ones when we leave. It will be costly, but it will cost less than having someone else on salary travel with us everywhere, and will save some time before travel. Surprisingly while being wasteful, this actually works out. For some time at least, but the solution is not ideal. Not just for the extra monetary cost, but now it’s costing Bob some time in his destination to buy new clothes. You can go buy, or hire someone else but they are raising the issues we’ve gone over already. What if instead of having to buy new clothes, or move the same clothes around, you have clothes ready in each destination Bob visits. He will have to pay someone to store his luggage and wash them up periodically, but the cost is negligible. And he has a spare time he can spend! Obviously there are times where things don’t always go as expected where Bob might have to go buy some new clothes, or might have to pack up some other stuff when traveling. But you have managed to optimize this problem to save him time at a certain budget that works for most of the days that’s tolerable for him.

Now ideally this story ends here. But in real life Bob’s needs changes over time, his desires, responsibilities, his budget changes. The “most of the days that’s tolerable” becomes no longer tolerable, he ends up needing to buy new clothes every second trip he takes. The cost of clothing also is not stable anymore, each destination has different pricing which changes from day to day as well. His storage costs rack up, some of his stored luggage is getting stolen. Bob now travels with Alice, his girlfriend and asks you to organize her stuff as well. Turns out she has completely different needs than Bob, the existing solution no longer fits but you have to figure out a way. She’s joining him on the next trip already. From what it seems like Bob would like you to figure out a solution that works for all his trip partners regardless of their needs because he’s planning to go on trips with his friends and sometimes colleagues as well - which none of them or their needs you know. Ah by the way, he might bring more than one person on each trip too. That said he still wants to stick to a strict budget for this specific problem.

Now go figure out a solution that works with those unbounded variables that change independently. On each occasion you have a limited time to buy new clothing and limited storage to pack all combinations of clothing everyone he might go on a trip would need. Even if you got an unlimited storage, now you need almost unlimited time to find the particular set of clothing for a particular group of people he’s traveling with from the set of unlimited clothing. That doesn’t sound like a time saving to me, not sure about Bob.

Now this sounds ridiculous. It is what software engineers deal with daily in varying scales of abstractions for “Bob” and “the clothing” - from people, to heat the transistors produce. We would be very lucky to even know that we’re dealing with “Bob’s clothes” in the first place. Our problems usually start with a very ominous prompt like “the numbers don’t look alright” which eventually turns into a data race problem in a system.

We deal with a lot of problems that require a balance between time and space. Where the answer itself also depends on the particular point in time and space. Want to speed up, add some caching. Want to reduce storage costs, or store more data? Cache less, pay-up later with time. Cost is not an issue, so you cache everything, now your cache is performing as poorly as your primary storage because it’s now just a replica. You’re paying >=2x for storage to get job done almost at the same time.

On top of this, those programs run inside physical devices in the world we are living that’s by no means any less messier. A shark might decide to eat the transatlantic fiber-optic cable the moment you were replying to TCP handshake with a SYN ACK packet from eu-west-1 to us-east-1. Politicians’ love to changing local clocks overnight, messing up millions of services that depend on sensible flow of the time. And humans are overconfident in domains where their ignorance is invisible to them. Yet we are expected to produce stable software despite the ambiguity and constant pressure to make everything run cheaper - which inevitably causes enshittification but I’ll write about it later.

Sometimes there’s an argument whether writing software is engineering. If this is not considered engineering, then I would gladly take “software magician” as a title.