Mon 05 May 2025

A Piecemeal Approach

The "Technical Debt" series:

      1: (here) A Piecemeal Approach

The piecemeal engineer knows, like Socrates, how little he knows

Karl Popper (1944)

Karl Popper's reflections on totalitarianism has had one of the largest impact on my approach to software engineering.

Utopias exist in business, engineering and societal context. There are always fervent believers that have a do or die attitude to process. This often gets in the way of pragmatism.

Popper

In his reflections KP makes the argument that if we are to progress as a society we should not attempt such large scale shifts of policy in pursuit of largely frivolous utopians. There exist peoples with high levels of confidence in their ability to understand how the world and society work. We should be wary of those that are uncompromising on their ideals.

Utopian views are often stated as goals in startups and engineering. Partially due to the need to sell the dream or idea before it's realised and when they're presented to potential investors and stakeholders. "I can solve all your problems with my solution" sounds more valuable than "I can solve half of an existing problem, maybe we can think of solving the rest later?"

Within a totalitarian regime, similar promises are made to the governed by painting a picture of a utopian society, a dream world envisioned by a leader sold at the price of handing over control and power. In these cases the marketing strategy is to stoke fear and shift blame.

I have no bother with utopias if they form part of the ideation or they're used as a perspective to view a problem. It's when they're used as a justification to keep heading down a failing path, I find them to be dangerous.

If you find yourself hearing leadership or a colleague making unfalsifiable claims or using the "well it doesn't apply in this situation" instead of conceding that perhaps they were wrong; you've found the charlatan. A fear of being wrong and being averse to pivoting leads projects and businesses into failure. If you know something isn't going to work, the sooner you know and respond the better.

Sometimes, the best thing you can do is just say "I don't know".

Software Engineering at Google (pg. 40).

Ceteris paribus

The business world is run on pragmatism. If it were plagued with "too much unscientific thought"1 it would be brought down by complexity and mess. Dijkstra attempted to reign in on software complexity in business, by advocating for writing systems that allow an engineer to focus on one single concern at a time. Least they be overwhelmed by all the moving pieces.

Similar to Popper, this is a focus on changing one thing at a time in order to determine the effect of that action. Modern day vampire Bryan Johnson, Founder of braintree, attempts to live forever by running hundreds of tests on himself. One of the largest criticisms with his approach is in how the doctors measure causality when he consumes ~106 pills every morning.

Startups and businesses that aim to solve everything are at risk of not being able to measure what's working and what's failing. They also risk avoiding their core business issues until it's too late and they're out of runway. Start ups have limited time so finding and tackling the areas of highest value to the business should be a priority, also known as, finding product market fit.

Many successful businesses started out tackling issues by focusing on a niche market. Targeting a small user base that struggles the most with an issue allows them to focus on a core problem and refine their product without being distracted by the myriad of different people and their individual needs. You can look at PayPal targeting people with thousands of transactions over Ebay, in order to refine making payments online. Revolut focused on problems that travellers faced, starting specifically with currency exchange. Nintendo got it's start selling playing cards in 1889, at this point in time I can't imagine the founder envisioned an Italian plumber eating mushrooms and rescuing princesses. The key is to move one step at a time and gaining some initial start can get your ear to the ground.

Don't be perfect

Utopia's are a constant threat to getting us into better positions. If my team is flying a burning plane and we need to land ASAP, I understand landing 10metres from the office or your home might be ideal but right now landing anywhere will do.

Perfect is the enemy of good. If we are constantly striving for a form of perfection we should acknowledge that we are delaying or forgoing getting to places that are good enough. And since Utopians are often unrelated to anyone's lived experience, there's no proof that this vision of perfect is indeed a great place to be. Which is why we need some resemblance of validation at each step of the process.

There are a number of successful companies and they are equally running numerous processes and styles of business. You might be able to find support for every methodology, if the self help expert says that eating carrots make you see in the dark, try it. But if it doesn't work, ditch it. If you're a team of one, perhaps doing daily stand ups will look different to a team of six.

Don't let the utopian process get in the way of driving value.

Lastly

Be wary of anyone that speaks with confidence and doesn't read.


  1. Dijkstra in EWD-447 (1974) 

S Williams-Wynn at 12:05 | Comments() |

Mon 31 March 2025

Being A Lurker

Since the release of ChatGPT searches that include the term 'reddit' have doubled. Meanwhile interest in Substack grew four-fold during the same period. We are living in a time where content created by people is becoming more valuable and the best content is moving behind a paywall.

It's becoming easier to stand out. The information on the internet is converging to an average as the same SEO tactics are being applied to every webpage, marketing teams pay for the privilege of appearing at the top of search results or there's a constant need to churn out content in fear of losing relevance. People are hungrier than ever for an authentic and relatable tone of voice.

It's time to stop caring about what people think. The sooner you do so the better, and a few other reasons as to why you should start putting yourself out there.

People want to make connections

At one point there were at least three tech meet-ups a week in London. They are all similar, it's a good place to go to get some food when you're penny pinching. You come away from these conferences with a full belly and some esoteric knowledge from the presentations, however one thing I've come to realise is that these tech gatherings aren't very conducive to networking.

At first I thought it may be the type of persona these caverns attract, however I have come to realise that being the most outgoing person in the room was the wrong way to approach getting to know people.

Instead of making an effort to introduce yourself one person at a time you can save a lot of this hassle by booking a slot on stage and introducing yourself to everyone at the same time. Your name will be on the program, so those that forget can look you up. You're also forced to give 5 mins of content to everyone in the room.

(Wait for my next lightning talk, where I try not make it passed the introduction).

After your presentation you'll find that people start introducing themselves to you and you'll get away from actively trying to locate the like-minded individuals. Your talk also acts like a filter, so you might get people approaching that are interested in what you had said.

Improving and feedback

You might not like every follow up or the opinions others have. Putting something out there in the universe enables others to interact with it. It opens you up to feedback. Which is a great conductor to learning. We have modern physics due to trial and error, and we can probably thank trial and error for #npc #ganggang Either way, it's about discovering what works.

In software we learn that it's best to have tight feedback loops. The sooner we know we are doing the wrong thing the better. This saves us working on something for 6 months which ends up being a dead end. Some of my most memorable 'Ah-ha' moments have been from feedback. Important feedback sticks.

The easiest way to launch bad software is to shut yourself out to feedback. The same can be said about a skill, knowledge or an idea. You don't know if you're decent at anything unless you've tried it. If you think you're good at something, prove it.

Why I Write

There are about ten to twelve notebooks of thoughts I've accumulated over my working years. I'm sure each idea, in those books, is amazing and I can live pretending that's the truth or I can put some of them into writing and learn where they're flawed or where my writing is flawed.

If I wanted my writing to be terrible, the best way I could do this; is to avoid writing at all costs.

At the moment it's like seeing someone that doesn't look like they workout; in the gym. They've probably already acknowledged that they've been programming for the last 8 years but at least they're doing something about it.

There are a lot of half baked product ideas out there that have never seen the light of day and I'm sure they're amazing in the minds of the creator, but nothing will bring them down to earth quicker than getting user feedback. There might be one key piece of feedback between them and making something amazing, what ever thought is stopping you from getting here is probably silly in comparison.

There's also the benefit of going over something half baked with a fine comb that allows an idea to develop. It also helps the concept sink in.

Start being uncomfortable

I've convinced myself that we learn the most from being uncomfortable.

There's a reason we call something a comfort zone. It's the space that you operate in that is most familiar to you. So by definition the unfamiliar is probably a space you know least about. Diving into the unknown and getting a little uncomfortable can help you grow and learn. You might not be as bad as you thought you were, and if you're rubbish you're still a mile ahead of all the lurkers.

It's mostly crap on average.

S Williams-Wynn at 12:13 | Comments() |

Mon 24 March 2025

Travel Planning

I've recently come back from a career break. During which I travelled around Asia with my fiance. Planning such a long trip can be quite daunting at first. So here's how I did it.

We were in Asia for 5 months, but I'd say planning a trip that's 1 or 2 months long is probably the same as planning a trip that's 5 months long. (With the exception of needing to also plan around seasonal weather). The first thing to figure out is how much you're willing to spend.

Total Spend

Your total spend should include flights, cost of taxis, and meals and nights outs. As an example let's imagine the most we are willing to spend on a two month trip (if we were to really dish out) is about ~£9,000. Remember this is a two person trip. So given that we can spend £9,000 on this trip how long can we go for?

Cost Per Month

It's roughly estimated from rent £1,400-£2,000 and monthly living expenses ~£1,500. Plus a return flight on the high end ~£1,000.

For a long trip you only need one flight, so you can average that cost of travel across the two months. In our case the largest flight cost was to Japan from London and back. Looking at it now I see this cost us £1087.

This is where we would divide the budget across the two months; giving us a rough monthly spend of £3,500. If we are going for two months that gives us £2,000 on flights.

Cost Per Night

We need to keep in mind how many days are in each month, March is 31 days and April is 30 days. We break our budget into a table and set a goal of spending £1,200 a month on accommodation.

month max days npd
March £1,200 31 £38.7
April £1,200 30 £40.0

From the table above you can notice that our cost per night for the hotel is actually slightly higher in April because it's one day less than March.

Now there's a goal to aim for when booking hotels. We booked all the hotels 6 months in advance. In some cases the hotels hadn't setup their availability in their calendar system since we were thinking further ahead than they were.

We would look up the price of the hotel again when we were at the hotel and found that in cases we saved money, we saved £50-£200. And when we overpaid we overpaid by £2-8. So overall advance bookings turned out well for us.

The actually cost for us per night in Japan ended up being £55.21 in March. (We did go skiing for 2 weeks) and £47.13 in April So we blew the budget but the following month we spent £33.01 and then £30.02 so we clawed it back. There's also no reason to say you can't spend a little bit more on accommodation but this just means you'll need to spend less on other things like meals and capsule toys.

Because our spend was £55 this meant our "food/other" budget was about £61 per day. Also keep in mind I'm trying on purpose to over budget. Having this £61 concrete meant I could keep a rough idea of how much we should cap our spend each day. £61 does end up being quite a bit of money, especially if you're making breakfasts at home and you're not eating at fancy restaurants every night.

But we also have to note that that £61 also includes metro/bus tickets, souvenirs and entrance to theatres/museums. This forced us to diversify what experiences we were having. Walking and exploring Tokyo is more affordable than seeing kabuki every night.

Tracking

Keeping track of all the costs is really important. Consider how many hotels and flights we had to book. I also had to make sure every night was accounted for so we weren't left scrabbling for a place to stay at the last minute.

I had two spreadsheets for this. The first was a "per day" accommodation spend where I listed the months of travel at the top and the day of the month on the left.

day March April
1 35.1 42.18
2 42.18
3 42.18

This way I knew that, if there were gaps in this table, there were nights that were not accounted for. E.g. In the table above I need to book a hotel for the night of the 2nd and 3rd.

My second spreadsheet kept track of realised costs. A large table containing everything I've paid for, the date I paid, the number of nights, the start and end. In some cases we had to pay on arrival. I had a column which indicated if it was accommodation or travel and lastly notes which indicated if we should expect breakfast or dinner or both. So I'd make a payment, I'd then fill in the "per day" table so I knew where we were going to be and when.

In some cases we needed to note down on a certain day that we should prepare food the night before since we were catching a train which would not include a lunch and you'll want to avoid having to buy food at a station or while on a train as these will have an added margin on the cost that I wanted to avoid.

Conclusion

Planning a big trip can seem quite overwhelming at first, but once you break it down and you know where you're likely to be it's a matter of filling in the pieces. We started with Skiing then went to Tokyo and then did the Nakasendō trail between Kyoto and Tokyo. Making our trip as adventurous as we can. We gave ourself generous amounts of time to get across the town so we never missed a flight or train. It's better to need to waste time exploring shops and stations than miss a train you'd paid for.

We had the whole trip sorted out by the time we set foot in Japan so from then it was just a matter of enjoying ourselves and following the little reminders we'd set 6 months ago.

I'd say the best part was being able to forget what we'd booked half a year prior since it made for a pleasant surprise when we arrived and I had a reminder saying "the accommodation is taking care of breakfast and dinner so don't worry about finding food."

S Williams-Wynn at 12:56 | Comments() |
Socials
Friends
Subscribe