Full Stack
Naturally Full-Stack since 1995
My full-stack experience started by learning Perl to dynamically render HTML and connect to a MySQL database, running on FreeBSD, bare-metal colocated servers. PHP was gaining traction, and I started preferring it to Perl for obvious reasons — being able to keep design and code in the same file was a huge productivity boost.
LAMP
Around 2000, I migrated mainly to the traditional LAMP stack, but some projects required Java backends using tools like Apache Jakarta, JBoss and Scala. Writing this, I miss all the coffee puns…
I stuck with MySQL, PHP and Apache for many years, eventually getting it highly tuned on the FastCGI interface and being able to deliver any web solution at any scale. But I was never really comfortable with its separation of concerns, especially as web pages were moving towards not only dynamic page generation but also the use of JavaScript, CSS and dynamic XMLHttpRequest() calls, which was changing the shape of the REPL cycle and making a highly responsive user experience much more possible.
The launch of virtual hosting providers and then AWS marked the end of the many years of colocating my own hardware, now spinning up instances on a product-by-product basis. With this came the need to learn a swathe of new skills.
Containers and Microservices
The arrival of Node, Docker and the microservice architecture was a real penny-drop moment where I could now see how to design and build next-generation sites with clean API abstractions, massive data back-ends and lightning-fast, neatly cached front-ends.
Today
The AWS years taught me what every layer is doing underneath, but I’ve since moved to a leaner stack: Astro front ends on Vercel, services and APIs on Railway, Auth0 for identity, MongoDB with WebSocket, GraphQL and RESTful APIs behind them — and agentic AI woven through the whole workflow. I can stand up a production site with authentication, data and a content-managed front end in an afternoon, and keep it running without a pager.