I sometimes describe what I am doing now as if I have recently become obsessed with building my own systems.
That is not really true.
I started that way.
One of my earliest ecommerce projects, and probably my first proper shopping-cart project, was T-ShirtMe. The idea was that somebody could design their own T-shirt online and then buy it. There was no convenient stack of services waiting to be joined together for me. I was building the ecommerce logic myself.
More than two decades later, after years of using tools such as WordPress and WooCommerce, I seem to have ended up back in the same place: building more of the underlying system myself.
The reason is completely different this time.
T-ShirtMe came from an era when bespoke was normal
When I started building sites, doing something unusual online often meant building it yourself.
T-ShirtMe was not simply a catalogue of products. The interesting part was allowing the customer to create something of their own and then move from that configuration into a purchase.
That kind of project forced me to think beyond individual web pages. The website had state, choices, products and a transaction. Different parts had to work together.
I did not think of it as "owning the stack" or any of the language I might use now. It was simply web development. If the thing I needed did not exist, I wrote it.
Then the platforms got much better
As web software matured, it stopped making sense to build every common feature from scratch.
WordPress became a huge part of my work, and WooCommerce gave me an off-the-shelf ecommerce system that could be adapted rather than recreated every time.
That was genuinely useful. I did use WooCommerce extensively.
My route was not Magento or Shopify. I never used either of them. The platform I actually used for ecommerce was WooCommerce, alongside the bespoke work I had already been doing.
For a long time that balance made sense. Let WordPress and WooCommerce handle the standard pieces, then write custom code around them where I needed something more specific.
Convenience still creates friction
The strange thing about off-the-shelf systems is that they can save enormous amounts of development time while also introducing lots of smaller bits of friction.
I remember that manually adding a single WooCommerce product could take me around 15 minutes once all the details were entered properly. That is not a criticism of WooCommerce. It is simply what happens when a general-purpose system has to accommodate lots of different use cases.
Once I started building larger automated workflows, that kind of repetitive manual work became difficult to tolerate.
If the information already exists somewhere, why am I copying it into fields by hand? If the same action follows the same rules every time, why am I doing it manually? If five of my projects need the same capability, why am I implementing it five times?
Those questions gradually pushed me back towards building my own infrastructure.
This time I am not rebuilding a shopping cart
That is the important difference.
I am not trying to create my own replacement for WooCommerce just for the satisfaction of saying I built it.
What I am building now is broader.
Control Room connects the things I repeatedly need across my projects. My mini-sites can share systems. Site Context gives Control Room a structured way to understand what a project knows. Jump links can connect affiliate destinations with analytics. InPlay can expose its own domain-specific information without me duplicating its database inside another application.
The common theme is not ecommerce. It is reducing the distance between an idea and my ability to implement it.
Owning the important bits changes how quickly I can move
With a general-purpose platform, a feature usually has to fit the platform's model.
When I control the relevant system myself, I can make the model fit the problem.
That does not mean custom code is automatically better. Plenty of things are better bought or reused. I have no interest in recreating every solved problem.
But there is a point where adapting somebody else's abstraction takes more effort than building the small piece I actually need.
I seem to have become much better at recognising that point.
There is a full-circle feeling to it
T-ShirtMe and Control Room are separated by more than twenty years and are completely different kinds of projects, but there is a familiar instinct underneath both.
I can see a thing I want the system to do, and my first thought is still often: I could build that.
The difference is that I now have decades of experience telling me which parts are worth owning, which parts are better left to somebody else, and how useful it is when the systems I do own can talk to each other.
Back then I built bespoke ecommerce because there often was not a suitable alternative.
Now I build bespoke infrastructure because there often is an alternative, but it is not always the system I want.
Somehow I ended up back where I started. Only this time, it is deliberate.