<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Leadership on despatches</title><link>https://icle.es/tags/leadership/</link><description>Recent content in Leadership on despatches</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 14 Apr 2026 20:57:40 +0100</lastBuildDate><atom:link href="https://icle.es/tags/leadership/index.xml" rel="self" type="application/rss+xml"/><item><title>Did They Have a Problem That Year?</title><link>https://icle.es/2026/04/14/did-they-have-a-problem-that-year/</link><pubDate>Tue, 14 Apr 2026 10:24:26 +0100</pubDate><guid>https://icle.es/2026/04/14/did-they-have-a-problem-that-year/</guid><description>&lt;p>2008 was a heck of a year for kraya, and for me. We were already operating
megabus.com in the UK, USA, and Canada, along with Oxford Tube, the sales
website for coach usa - all for Stagecoach.&lt;/p>
&lt;p>We were also working on the fringe website. We integrated the website with the
brand spanking new ticketing system - which cost nearly £900k.&lt;/p>
&lt;p>We were also hosting websites for Boots, Kellogg&amp;rsquo;s Food Service and dozens of
other clients.&lt;/p></description><content:encoded><![CDATA[<p>2008 was a heck of a year for kraya, and for me. We were already operating
megabus.com in the UK, USA, and Canada, along with Oxford Tube, the sales
website for coach usa - all for Stagecoach.</p>
<p>We were also working on the fringe website. We integrated the website with the
brand spanking new ticketing system - which cost nearly £900k.</p>
<p>We were also hosting websites for Boots, Kellogg&rsquo;s Food Service and dozens of
other clients.</p>
<p>All of this was held together by three or four developers, two systems
administrators and me.</p>
<p>On the 13 June (incidentally, I got married on the same date years later), as I
was just getting ready for a wild night on the town, a call comes through -
which John answers.</p>
<p>I still remember them laughing and then doing a double take &ldquo;oh, you&rsquo;re serious?
let me get Shri&rdquo;</p>
<p>It was the fringe. We&rsquo;d already known that they were having trouble with their
ticketing system. I&rsquo;d even pitched in, made suggestions - looked at their code
to try and help, but none of that was enough. I expected an update.</p>
<p>They wanted to know if we could put together an interim booking system for them
over the weekend. I wasn&rsquo;t sure. I told them I&rsquo;d speak to my team and get back
to them.</p>
<p>I wasn&rsquo;t involved with the work on the fringe up until this point. I knew very
little about it. I was focused on megabus.com. The US version of the site had a
big marketing campaign happening in a few days and that was what I was meant to
be focused on.</p>
<p>By the time I put the phone down, Chris, who had been the lead on the fringe
already had a answer. &ldquo;We can do it!&rdquo;</p>
<p>&ldquo;But how - it&rsquo;s got to take more than a weekend - right?&rdquo;</p>
<p>The fringe website was already built well and had a clean layer interfacing with
the new ticketing system. In fact, that was the bulk of the work that year.</p>
<p>So.. Chris told me - all we would have to do is to implement the functionality
within that thin layer, fattening it up.</p>
<p>He believed we could do it. I believed him.</p>
<p>I hopped in a cab, headed over to the fringe to talk it through. I didn&rsquo;t
promise them we&rsquo;d be able to get something ready by Monday, but I promised we&rsquo;d
do our best.</p>
<p>We were in the office on the weekend, writing code. I remember working on the
basket, sending diffs over email and generally having a good time.</p>
<p>I even had some megabus US fun to keep me entertained in the form of issues with
loading sheets - I was already in the office, so it was one step easier to fix.</p>
<p>One of the bits of functionality which took a surprising amount of time was the
seat allocation. None of us had to worry about that before - it was just
capacity management on megabus. For the fringe though, we had to allocate actual
seats with seat numbers and everything.</p>
<p>With the fringe we had multiple tables which all joined together (thanks
hibernate) to encode a tremendous amount of detail about the seating plans -
including their physical location on a map.</p>
<p>It was too much detail for us, so we had to simplify it all down to get it
working in the timeframe. We kept most of the rest of the structures intact to
keep the data migration easier once the ticketing system was fixed.</p>
<p>By Monday, we had each managed at the most 6 hours of sleep each of the previous
three nights. I still have vivid memories of a suit of armour that we put
together using packing material while we were waiting for bits of data or
details of logic.</p>
<p>I broke the MySQL replication at 01:24, fixed by 01:32</p>
<p>I remember the delirium setting in. Email sent to the client with &ldquo;fun fun fun
fun fun fun fun&rdquo; as the subject</p>
<p>There were random emails to my brother &ldquo;I&rsquo;m still here!&rdquo;</p>
<p>I also remember making makeshift beds with bubblewrap to get a wee nap here and
there. We were all so exhausted - pumped up on coffee and nicotine.</p>
<p>Finally at 03:35 on the Tue email to client: &ldquo;DONE DONE DONE DONE DONE NODE NODE
NODE NODE&rdquo;</p>
<p>Then at 05:33, requesting a PostgreSQL server rebuild for megabus US for their
marketing campaign.</p>
<p>At 10am on Tuesday, the fringe is finally able to sell tickets. The website
promptly fell over from the load, but we nurse it back and it sells 65k+ tickets
in the first week.</p>
<p>It would be at least two more weeks before the ticketing system is fixed and
brought back in.</p>
<p>For the work we did for them that year, and the previous one, we effectively
only charged about 30% - because that&rsquo;s all they could afford. This year, we
asked if they could put our name on the website.</p>
<p>Over the next two weeks(while megabus US was on their marketing campaign), we
fought many battles. There were 750 duplicate bookings. Numerous customer
complaints (thanks to our name being on the website) - almost all of them
blaming us for the failure of the ticketing system. People did not understand
that we put in the interim one, not the one that failed.</p>
<p>Press releases went out from the fringe - only two credited us. Both misspelt
the company name. Both called us a web design company — which, we were not, had
never been, and had no interest in becoming.</p>
<p>In truth, I wanted to be a hero - I think we all did. What we really wanted was
an acknowledgement of what we had done - which was nowhere to be found. We got
paid though - at least for a part of our effort.</p>
<p>For many years after that, I would tell people with pride - &ldquo;did you know - I
saved the fringe, back in 2008,&rdquo; which was inevitably met with something like
&ldquo;oh, did they have a problem that year?&rdquo;</p>
]]></content:encoded></item><item><title>What we Carried</title><link>https://icle.es/2026/04/13/what-we-carried/</link><pubDate>Mon, 13 Apr 2026 20:02:04 +0100</pubDate><guid>https://icle.es/2026/04/13/what-we-carried/</guid><description>&lt;p>I started my company in 2000. I was 17. I built megabus.com in 2003. I was 21.&lt;/p>
&lt;p>It started off small, and little by little, I carried more and more. I became
we, and we carried more and more. Before we realised, we were carrying a great
deal. Ultimately, though, if something went seriously wrong, it would be on my
shoulders.&lt;/p>
&lt;p>The chart does not capture the scaling of the organisation, or other departments
like tech support or hosting, which had dozens of clients.&lt;/p></description><content:encoded><![CDATA[<p>I started my company in 2000. I was 17. I built megabus.com in 2003. I was 21.</p>
<p>It started off small, and little by little, I carried more and more. I became
we, and we carried more and more. Before we realised, we were carrying a great
deal. Ultimately, though, if something went seriously wrong, it would be on my
shoulders.</p>
<p>The chart does not capture the scaling of the organisation, or other departments
like tech support or hosting, which had dozens of clients.</p>

<figure >
    
        <img src="./gantt_combined_1000.png" 
            alt="gantt chart of the main projects done by kraya through its life" />
    
    
    
        <figcaption>
            
            
            
                <p style="margin: -0.5rem 0 0 0;">
                    Data mined by Claude from my emails, issue trackers and code repos
                
                
                
                
                
                
            </p> 
            
        </figcaption>
    
</figure>


<p>The section at the top is the number of active committers for that quarter. You
can see my on my todd at the start and the rise and the fall of the dev team.</p>
<p>The very peak of it was in 2008. We
<a href="https://icle.es/saving-the-fringe.md">built a booking system over the weekend for the Edinburgh festival fringe because their brand new £800k+ system could only handle one person at a time.</a></p>
<p>There were a handful of us building it while I was simultaneously prepping and
managing the megabus US systems for a sales campaign. At the same time we were
operating megabus across the UK, USA, and Canada, Oxford Tube, Coach USA, the
Fringe website itself and numerous other smaller hosting clients like Boots,
Kelloggs Food Service, and so on.</p>
<p>We were a total of ~4 developers and two systems administrators holding all of
these together.</p>
<p>I was recently reminded of a story a friend of mine told me. Before he was my
friend, he worked with me, and one of the things we did together was one the big
megabus deployments when we migrated to a Java EE ticketing system.</p>
<p>One part of the migration was the data. I had developed a tool to migrate the
data and on the evening - everything was prepared, we were off peak, and we had
taken the site offline. He ran the script, which went on for a wee while and it
failed. It was not meant to do that.</p>
<p>The way he tells the story, he told me about the failure. I come over, look at
the errors, say &ldquo;hmmm, that&rsquo;s interesting,&rdquo; and head off to have a cigarette. A
few minutes later I go over to my desk type away furiously, then asked him to
run it again.</p>
<p>It worked, and completed.</p>
<p>I remember that night. I don&rsquo;t remember what the problem was or how I fixed it,
but I do remember that moment when I went over to see how it had failed. In the
short walk from my desk to his, I reiterated in my mind, all the possible backup
plans - with the worst case scenario being to call off the migration on that
day. We would do it another day. It would cost money, but it would be do-able. I
was ok with that.</p>
<p>I was curious as to where my limits were, so I kept pushing, until I would meet
with a wall.</p>
<p>There were no rails and there were no railings - just a cliff edge, unmarked… I
didn&rsquo;t know that - I expected a brick wall.</p>
<p>The worst of it would be only a few years later, in 2011. We built a new Java EE
ticketing system for a fraction of what it should have cost in about 30% of the
time it needed.</p>
<p>I personally responded to over 250 out of hours emergency tickets over an 18
month period. That was hard!</p>
<p>I had run off a cliff edge, and like the roadrunner in the cartoons, it took a
while before I realised there was no ground beneath me.</p>
<p>A few years after I ran off the cliff, the company shut down. A few years later,
I would start my active recovery journey through therapy. A few years later
still, when I felt ready for a leadership role, I was asked to lead a
problematic team - a role they struggled to fill for a while.</p>
<p>The team worked hard and delivered but struggled with the perception of poor
delivery. Trust was thin, stress was high and morale was low. The situation was
so bad that the week before I was supposed to start, the scrum master who was
supposed to be my guide through it all quit.</p>
<p>I was warned by multiple people that this job was loaded with problems. I took
on the job anyway, without a real guide, straight into multiple serious issues.</p>
<p>I loved it and managed to turn the whole thing around in my first week.
Delivered key items, laid the foundations of trust and improved morale. It took
a bit longer to bed everything down. Within weeks, I was asked if I would take
on leading the entire digital team.</p>
<p>It was here, many years later, I got a sense of how unusual it was for such a
tiny team to do so much.</p>
<p>It was here, many years later, I got a sense of how it is to have guardrails, to
have support, peers to lean on.</p>
<p>It was here, for the first time I realised that the job didn&rsquo;t have to be a
lonely one.</p>
]]></content:encoded></item><item><title>Whatcha Thinking?</title><link>https://icle.es/2026/04/13/whatcha-thinking/</link><pubDate>Mon, 13 Apr 2026 12:05:48 +0100</pubDate><guid>https://icle.es/2026/04/13/whatcha-thinking/</guid><description>&lt;p>I loved working on megabus. I was in love with it. My girlfriend at the time had
a habit of asking what I was thinking about when I looked deep in thought. The
answer - every single time, was inevitably megabus. She eventually stopped
asking.&lt;/p>
&lt;p>I was 22 years old.&lt;/p>
&lt;p>When I built the original prototype for megabus.com, I built it using PHP +
PostgreSQL. I put together a document detailing my reasoning for these choices.
I quoted 33 days for it, built it over six weeks and charged £13,200.&lt;/p></description><content:encoded><![CDATA[<p>I loved working on megabus. I was in love with it. My girlfriend at the time had
a habit of asking what I was thinking about when I looked deep in thought. The
answer - every single time, was inevitably megabus. She eventually stopped
asking.</p>
<p>I was 22 years old.</p>
<p>When I built the original prototype for megabus.com, I built it using PHP +
PostgreSQL. I put together a document detailing my reasoning for these choices.
I quoted 33 days for it, built it over six weeks and charged £13,200.</p>
<p>The support contract was £350/month - for one day a month. On the first day,
megabus.com sold 200 orders.</p>
<p>When megabus had its first expansion, I was up overnight bringing new servers
online and scaling it live. I loved it - my code was finally being tested.</p>
<p>Over a week, I&rsquo;d probably burned through many days of effort. I remember the
project manager specifically asking me to invoice for the extra work I put into
it. I even said that I would - except I didn&rsquo;t.</p>
<p>I&rsquo;ve had a long time to think about this - why did I not send that invoice? I
even had approval.</p>
<p>The answer, as with most things of this nature is complicated. I loved the work
and I didn&rsquo;t want it to end. I didn&rsquo;t want a potential conflict trying to figure
out what a reasonable amount was to charge. I felt that I should have done a
better job in the first place - I felt responsible that I had not told them that
scaling of this nature would not have worked without prep work.</p>
<p>I had not scaled anything before.</p>
<p>I was 22 years old.</p>
<p>I was super grateful that someone believed in me. I naively assumed that they
saw all the extra effort I was putting in and that they would reward me for it -
that they would have my back.</p>
<p>I remember adding a bunch of different bits of functionality because I wanted it
there. I didn&rsquo;t want to go through the process of quoting for it, and it getting
potentially rejected, not to mention the waiting for decisions. One key bit of
functionality I remember is adding in a percentage load column for the loading
sheets. I built it, showed it - they loved it! It went live. I did not charge
for it.</p>
<p>At this point, the vast majority of my time was spent on megabus - very little
of it actually paid for.</p>
<p>At a glance, based on the emails sent, I probably spent a minimum of 10 days
each month supporting megabus when I was charging for one day.</p>
<p>In Jan 2004 - I proposed <em>doubling</em> the contract to two days for £4,800/year. It
probably kicked in in Feb 2004. By March 2004, the site exceeded that revenue
each day.</p>
<p>In the following months, I probably spent, on average a minimum of at least
double the time I was paid for. I should have charged for it.</p>
<p>I grew the team, and the support contract based on the minimum I needed to
maintain the product - not based on the amount of time I was spending.</p>
<p>For my 28th birthday, my girlfriend at the time organised a cake which was a
image representing kraya - which was basically megabus. I felt bad that she
thought that kraya was the most important thing in my life - she was right - but
it still felt bad. kraya had other clients at the time, but my time wasn&rsquo;t
monopolised by other clients, or indeed by kraya - my heart still belonged to
megabus.</p>
<p>And it would all have been fine too, except for a grave miscalculation I made.</p>
<p>In 2010, after trying to rebuild the ticketing system for £500k, and making some
mistakes with people I trusted, kraya ended up in £150k in the hole. We needed
some money urgently.</p>
<p>I was desperate and naively, I reached out to stagecoach for help. I thought
they were my friend - that they would have my back.</p>
<p>They understandably lost a great deal of trust in my ability to manage and lead
my company. I trusted the wrong person - but that was still my mistake. They
were right.</p>
<p>I thought that I&rsquo;d built up enough goodwill that they would help me through
this. I&rsquo;d felt I would have way more than that &ldquo;in the bank&rdquo; in terms of
goodwill. I learned that professional relationships do not work that way that
dark afternoon, standing outside my office on the phone, in the rain.</p>
<p>They didn&rsquo;t make my life easier. Instead, I&rsquo;d ended up rattling the cage - they
were now panicked - realising their over-reliance on an organisation that could
disappear at any point.</p>
<p>Instead of support, I had further actions, renegotiating the contract and what
felt like punitive, and definitely invasive reporting obligations.</p>
<p>I was hurt and angry. I had poured my heart, my soul - hey, my very life into
this product that I loved.</p>
<p>Suffice it to say - I got no help - no loan, no offer of investment - though
they did suggest buying us outright - which I rejected.</p>
<p>I signed a contract under circumstances I would not wish on anyone.</p>
<p>The best I got from them was a challenge - if we were really spending more time
than we were charging for - prove it. I did! We documented every minute we were
spending - I wasted my time on spreadsheets, pointless meetings and work to try
and rebuild the broken trust.</p>
<p>We went from £300k in the hole to £200k profit within a year. We charged for a
whole year in support around 20% of what the system made in a day.</p>
<p>I was 28 years old.</p>
<p>Around the same time, I was also dealing with the operational aftermath of
trying to build a java EE ticketing system over six months for £500k. I thought
it would take a year and cost £1m. In hindsight, it needed two years and
probably three million pounds.</p>
<p>Over 18 months, I personally answered over 150 out of hours emergency calls. We
had a rota and others on call too - but I took the vast majority of these calls.
I felt bad putting others through what I knew was gruelling.</p>
<p>All of this led me down a narrower and narrower path to a serious breakdown -
though I didn&rsquo;t know enough to name it until many years later. All I knew - all
I felt was that something broke in me.</p>
<p>We managed to resolve all of the issues, but the deployment of that version kept
getting pushed.</p>
<p>Stagecoach cancelled the contract in 2012. They had started building a ticketing
system in-house two years prior - the cost of my grave mistake. I wasn&rsquo;t able to
make the meeting - I was in India, and at the same time as the meeting, I was
meeting for the first time the one who is now my wife.</p>
<p>I was 28 years old. I spent the next 15 years putting myself back together.</p>
<p>How much did it cost them to build it inhouse? If I had charged for my time from
the start, would we all have been better off?</p>
<p>I still feel something deep inside me every time I see a megabus - a sense of
pride mixed in with a deep sense of sadness - not for what I lost - but for what
could have been.</p>
<p>I am 44 years old, and I am starting again.</p>
]]></content:encoded></item><item><title>I Know People Like You</title><link>https://icle.es/2026/03/31/i-know-people-like-you/</link><pubDate>Tue, 31 Mar 2026 10:41:29 +0100</pubDate><guid>https://icle.es/2026/03/31/i-know-people-like-you/</guid><description>&lt;p>A few years ago, I was interviewed for a role. I was talking about a ticketing
system I&amp;rsquo;d built - originally in Spring, then rewritten to use EJB 3.2. The
interviewer didn&amp;rsquo;t look impressed.&lt;/p>
&lt;p>The team had already written a lot of stuff in Spring - but I really did not
like it. There was all this XML all over the place which was annoying, but what
I really didn&amp;rsquo;t like was that the code and configuration for each component was
spread out all over the place. It meant that to understand how something worked,
I had to go hunting. Eventually, I got sick of it, and ported it to EJB myself.&lt;/p></description><content:encoded><![CDATA[<p>A few years ago, I was interviewed for a role. I was talking about a ticketing
system I&rsquo;d built - originally in Spring, then rewritten to use EJB 3.2. The
interviewer didn&rsquo;t look impressed.</p>
<p>The team had already written a lot of stuff in Spring - but I really did not
like it. There was all this XML all over the place which was annoying, but what
I really didn&rsquo;t like was that the code and configuration for each component was
spread out all over the place. It meant that to understand how something worked,
I had to go hunting. Eventually, I got sick of it, and ported it to EJB myself.</p>
<p>Later in the same interview, he said: &ldquo;I know people like you - you come in,
shake things up and get things done - but that&rsquo;s not what I&rsquo;m looking for.&rdquo;</p>
<p>He was right. I understand that. But I&rsquo;ve been thinking about what he was
actually describing.</p>
<p>When megabus.com was still a PHP site, search was the problem. It returned
quickly when the database was healthy and crawled - and slowed down when the
database was struggling. The load came in spikes. Even within a minute, there
were peaks and troughs.</p>
<p>My fix was simple. Before the search query ran, I added a small SQL check: how
many queries are currently active on the database server? If too many, wait a
second and try again. A few retries, then send it anyway.</p>
<p>A rate limiter baked into a search algorithm, written live on a production
server.</p>
<p>There were edge cases to consider, not to mention the load the rate limiter
would add to the database server. I knew though that if it broke, I could fix
it - I could just remove it - live, if needed. Not having the rate limiter was
at the time, more expensive than having it.</p>
<p>It worked. It got us through more than one hump.</p>
<p>The database was still the ceiling. We were on PostgreSQL 7 - no replication
support. Getting a more powerful server was possible but disproportionately
expensive. So I built something.</p>
<p>Two database servers. All writes went to both. Reads were distributed randomly
between them. Everything funnelled through one section of code.</p>
<p>I didn&rsquo;t do this live. I tested it. I knew what failure looked like: if the
servers diverged badly enough, I&rsquo;d pick a primary and reset the other. That was
the contingency. It wasn&rsquo;t a safety net someone else would pull - it was mine.</p>
<p>The data integrity held better than I expected. Under very high load there were
edge cases - ticket IDs for the same customer could be in a different order
across the two servers on a return purchase - but because the IDs were
consistent within each server, it never caused a real problem. It held the fort
until I could replace it with something better.</p>
<p>I occasionally lie awake at night imagining the databases diverging and figuring
out how I would fix it.</p>
<p>I picked PostgreSQL over MySQL when MySQL was the obvious choice. Under heavy
load it stays up — it slows to a crawl, but it keeps going. And it had
transactions. I was building an ecommerce site; I needed transaction support.
MySQL was fast and popular. It also had a habit of giving up under sustained
load. I still pick PostgreSQL - but nowadays, so do most other people.</p>
<p>The thing these decisions had in common was that I was the person who&rsquo;d be
fixing them at 3am if they went wrong. When you&rsquo;re personally accountable for
the consequences, the risk calculus changes. You think harder about what failure
looks like. You build the contingency before you go live. You know which
direction to pull if it goes sideways.</p>
<p>Caution that&rsquo;s never personally tested isn&rsquo;t rigour. It&rsquo;s consequence-avoidance
dressed up as responsibility.</p>
<p>&ldquo;I know people like you - you come in, shake things up and get things done - but
that&rsquo;s not what I&rsquo;m looking for.&rdquo;</p>
]]></content:encoded></item><item><title>It Gets Everywhere</title><link>https://icle.es/2026/03/24/it-gets-everywhere/</link><pubDate>Tue, 24 Mar 2026 20:52:21 +0000</pubDate><guid>https://icle.es/2026/03/24/it-gets-everywhere/</guid><description>&lt;p>In 1999, I was building websites in ASP (before there was .NET) and MSSQL
Server. We had a Windows NT server that I had to restart every week — not
because of updates, because it would get slower and slower until a restart was
the only thing that would fix it.&lt;/p>
&lt;p>We had one ADSL connection coming into the office and three of us. I wanted to
share the internet. Windows NT didn&amp;rsquo;t support it cleanly — it had a way, but it
was clunky enough that no internet was arguably better. We&amp;rsquo;d paid hundreds of
pounds for it.&lt;/p></description><content:encoded><![CDATA[<p>In 1999, I was building websites in ASP (before there was .NET) and MSSQL
Server. We had a Windows NT server that I had to restart every week — not
because of updates, because it would get slower and slower until a restart was
the only thing that would fix it.</p>
<p>We had one ADSL connection coming into the office and three of us. I wanted to
share the internet. Windows NT didn&rsquo;t support it cleanly — it had a way, but it
was clunky enough that no internet was arguably better. We&rsquo;d paid hundreds of
pounds for it.</p>
<p>I&rsquo;d heard about Linux. Downloaded Red Hat, installed it, configured it for NAT.
It worked — it was like magic. I&rsquo;m pretty sure I had to recompile the kernel to
get some bits working, but there were instructions and they were honest. It did
what it said.</p>
<p>Here was software that was completely free — free enough that I could read the
source code, make changes, run it however I wanted. It did more than the
hundreds of pounds worth of garbage sitting on the desk. And once I set it up, I
never had to restart it. Never. Compared to once a week on the NT box.</p>
<p>The difference, in my mind, was simple. Linux was built responsibly. NT was
built as a money-making enterprise.</p>
<p>That held for a long time. I moved to Debian, then celebrated when Ubuntu
arrived and made things more accessible. I&rsquo;ve recently been able to abandon
Windows altogether — gaming on Linux is finally viable. I came back full time
and felt mostly at home.</p>
<p>But there were minor niggles. Things that felt slightly off but that I couldn&rsquo;t
quite name.</p>
<p>Then I started digging into systemd.</p>
<p>I remembered feeling odd about having to run specific commands to read logs. Odd
about one tool doing many different things — which ran contrary to the Unix
philosophy that had made Linux what it was. When I looked into the history of
the opposition to systemd, it was revelatory.</p>
<p>systemd becoming process 1 is, in a word, irresponsible. It makes everything
easier and more accessible, which is why it won. But unlike the Linux of old,
the tradeoff isn&rsquo;t visible upfront, and there&rsquo;s no real choice. The responsible
option isn&rsquo;t the default anymore — it&rsquo;s the thing you have to go looking for.</p>
<p>I thought I had already done the work. I thought I had found the alternative.</p>
<p>While I was celebrating Linux becoming mainstream, I hadn&rsquo;t considered what it
would cost.</p>
<p>The Linux ecosystem had started optimising for mainstream at the expense of
responsibility. It works now, for far more people. But it&rsquo;s a different thing
than it was. When linux was really taking off, there was a joke going around
(before memes were called memes) about Microsoft Linux. Turns out the joke was
on us!</p>
<p>It is always a tradeoff between security and convenience — something convenient
is rarely secure, and vice versa. I think something similar applies to
responsibility. The more accessible you make something, the harder it becomes to
hold the line on what it was built to do.</p>
<p>There was a time when software going wrong meant losing your work. Now it means
losing your money, your reputation, or — in a car, in a hospital — your life.</p>
<p>The context has changed. The attitudes haven&rsquo;t. And the places that once had
better attitudes — the ones built on responsibility, on craft, on caring about
the thing itself — are being pulled in the same direction. <em>It gets everywhere.</em></p>
<p>Do you want your car running Windows? What about systemd?</p>
]]></content:encoded></item><item><title>Even Light Gets Heavier</title><link>https://icle.es/2026/03/24/even-light-gets-heavier/</link><pubDate>Tue, 24 Mar 2026 10:56:05 +0000</pubDate><guid>https://icle.es/2026/03/24/even-light-gets-heavier/</guid><description>&lt;p>A dedicated input type is better than reusing your domain model at the API
boundary. Test layers matter. Writing log statements as you go saves the poor
soul (probably you) debugging blind at 10pm. You know all of this.&lt;/p>
&lt;p>This isn&amp;rsquo;t about any of that.&lt;/p>
&lt;p>It&amp;rsquo;s about the fact that none of those decisions show up in the metrics that
matter to the people making hiring and delivery calls. The cost is immediate and
visible. The return is delayed, quiet, and arrives in the form of things that
didn&amp;rsquo;t happen — the investigation that took two hours instead of two days, the
API change that didn&amp;rsquo;t bleed into the domain model, the bug that the structure
caught before it shipped.&lt;/p></description><content:encoded><![CDATA[<p>A dedicated input type is better than reusing your domain model at the API
boundary. Test layers matter. Writing log statements as you go saves the poor
soul (probably you) debugging blind at 10pm. You know all of this.</p>
<p>This isn&rsquo;t about any of that.</p>
<p>It&rsquo;s about the fact that none of those decisions show up in the metrics that
matter to the people making hiring and delivery calls. The cost is immediate and
visible. The return is delayed, quiet, and arrives in the form of things that
didn&rsquo;t happen — the investigation that took two hours instead of two days, the
API change that didn&rsquo;t bleed into the domain model, the bug that the structure
caught before it shipped.</p>
<p>Sprint velocity captures the extra day. It doesn&rsquo;t capture what that day bought.</p>
<p>This is not a new problem. Most engineers who&rsquo;ve been around long enough have
felt it from both sides - made the careful call and got measured on the
slowness, or inherited the codebase built entirely for speed and paid the tax.
The measurement system was already broken. It has been rewarding the appearance
of velocity over the thing velocity is supposed to serve.</p>
<p>This was true long before anyone was generating code with AI. The PR process in
a lot of teams was already largely theatrical — review comments on naming
conventions while the architectural decisions slipped through unquestioned,
approvals given because the diff was too large to meaningfully read. The gate
was already not doing much. We brushed it under the carpet and moved on.</p>
<p>AI tooling is changing the volume of code moving through that process by an
order of magnitude. The pressure to remove the gate entirely — to trust the
output, to ship faster - is only growing. The faster-is-better incentive that
was already making review ineffective is about to be handed a much larger
surface to work on.</p>
<p>Many years ago, I pitched full redevlopment of a ticketing system from a PHP
based system to a Java EE system because it was struggling to scale.</p>
<p>It probably needed a couple of years to build. They wanted it in six months. I
accepted the challenge.</p>
<p>We built and deployed the system in eight months. We spent the next year fixing
it.</p>
<p>The client then rebuilt it in-house.</p>
<p>When AI runs this experiment at scale, who takes it back?</p>
]]></content:encoded></item><item><title>We Optimised Ourselves to Death</title><link>https://icle.es/2026/02/11/we-optimised-ourselves-to-death/</link><pubDate>Wed, 11 Feb 2026 09:55:18 +0000</pubDate><guid>https://icle.es/2026/02/11/we-optimised-ourselves-to-death/</guid><description>&lt;p>I once worked on a gaming website.&lt;/p>
&lt;p>It collected structured metadata about games - tags for features, screenshots,
videos, reviews. Users contributed information. We gamified participation and
rewarded it with games and gifts.&lt;/p>
&lt;p>It started making money through “similar games” lists.&lt;/p>
&lt;p>All of our traffic came from Google.&lt;/p>
&lt;p>Then we needed more revenue.&lt;/p>
&lt;p>So we did what teams do.&lt;/p>
&lt;p>We added features.&lt;br>
Integrated Steam, Xbox and PSN.&lt;br>
Pulled in achievements.&lt;br>
Expanded recommendation lists.&lt;br>
Tweaked advertising.&lt;br>
Worked on SEO.&lt;/p></description><content:encoded><![CDATA[<p>I once worked on a gaming website.</p>
<p>It collected structured metadata about games - tags for features, screenshots,
videos, reviews. Users contributed information. We gamified participation and
rewarded it with games and gifts.</p>
<p>It started making money through “similar games” lists.</p>
<p>All of our traffic came from Google.</p>
<p>Then we needed more revenue.</p>
<p>So we did what teams do.</p>
<p>We added features.<br>
Integrated Steam, Xbox and PSN.<br>
Pulled in achievements.<br>
Expanded recommendation lists.<br>
Tweaked advertising.<br>
Worked on SEO.</p>
<p>Traffic crept upward.</p>
<p>Still not enough.</p>
<p>Eventually we decided the problem was perception.</p>
<p>The site looked too much like a community project. It needed to feel more
premium. More authoritative. More modern.</p>
<p>So we renamed it.<br>
Changed the domain.<br>
Redesigned it from the ground up.</p>
<p>Months of work.</p>
<p>We launched.</p>
<p>Traffic collapsed.</p>
<p>We never recovered.</p>
<p>In hindsight, the failure wasn’t technical.</p>
<p>It wasn’t branding.</p>
<p>It wasn’t SEO.</p>
<p>It was that we never made a hard decision about what the product actually was.</p>
<p>Was it:</p>
<ul>
<li>A participatory community?</li>
<li>A structured data engine?</li>
<li>A search destination?</li>
<li>A content property optimised for Google?</li>
<li>A recommendations platform?</li>
</ul>
<p>It was all of them.</p>
<p>Weakly.</p>
<p>What Google valued wasn’t polish. It valued volatility.</p>
<p>Our homepage changed many times a day because users were contributing.<br>
Those contributions created fresh internal links, fresh content, fresh signals.</p>
<p>Participation was the engine.</p>
<p>When we redesigned for the information consumer instead of the contributor, we
stabilised the surface.</p>
<p>We accidentally killed the engine.</p>
<p>We optimised the visible layer and ignored the system feeding it.</p>
<p>I first heard the phrase “we’ll fix it in post” from my filmmaker brother.</p>
<p>Something wasn’t quite right during filming, but they moved on anyway. It could
be corrected later.</p>
<p>In film, that’s sometimes true.</p>
<p>In product development, it’s usually self-deception.</p>
<p>Lean encourages delaying decisions to the last responsible moment.<br>
That’s discipline.</p>
<p>What most teams practice is delaying decisions until they become painful.<br>
That’s avoidance.</p>
<p>An MVP is not the smallest thing you can push out.<br>
It is the smallest thing that is coherent and viable.</p>
<p>Viable means it has a clear shape.<br>
It respects constraints.<br>
It closes more questions than it opens.</p>
<p>If you ship something that only works on the happy path, with undefined edges
and postponed trade-offs, you haven’t preserved optionality.</p>
<p>You’ve preserved ambiguity.</p>
<p>Ambiguity spreads.</p>
<p>In code, as defensive layers.<br>
In design, as half-committed patterns.<br>
In product, as multiple possible futures carried at once.</p>
<p>Teams don’t slow down because they’re weak.<br>
They slow down because no one chose.</p>
<p>Every postponed constraint becomes cognitive load.<br>
Every “temporary” rule becomes precedent.</p>
<p>Lean does not say “don’t decide.”</p>
<p>It says: decide at the point where delaying further increases cost.</p>
<p>Most teams drift past that point because deciding feels like loss.</p>
<p>Loss of flexibility.<br>
Loss of imagined futures.<br>
Loss of political safety.</p>
<p>But momentum comes from commitment.</p>
<p>Once something is decided, energy frees up.<br>
The system becomes legible.<br>
Subsequent decisions compound instead of conflict.</p>
<p>We didn’t fail because we built the wrong feature.</p>
<p>We failed because we never chose what we were.</p>
<p>Most startups don’t die from lack of effort.</p>
<p>They die from unmade decisions.</p>
<p>“We’ll fix it later” is not iteration.</p>
<p>It is hope disguised as strategy.</p>
]]></content:encoded></item></channel></rss>