$ cat post/irc-at-midnight-/-the-load-average-climbed-alone-/-i-kept-the-bash-script.md

IRC at midnight / the load average climbed alone / I kept the bash script


Title: On Containers, Chaos, and a Touch of Sanity


September 16, 2013. I remember it like yesterday. The air was thick with the smell of containerization as Docker released its first version. It felt like something big was about to shift, and we were at the epicenter.

Back then, my team and I were working on a project that involved multiple services running across different environments. We had our fair share of pain points, but nothing quite prepared us for the transition to containers. The promise of Docker seemed too good to be true—lightweight, isolated, portable, and everything in between.

We started small, experimenting with running a few microservices on a single machine. It was thrilling, like playing God with our app’s architecture. We could swap out one service for another without affecting the rest. The 12-factor app principles were still fresh in my mind, so we tried to apply them religiously. But as is often the case with new tools, they seemed to require more effort than we anticipated.

One of the first issues we encountered was configuration management. Each container needed its own environment variables and secrets, but passing these between services was a mess. We ended up using a combination of environment variables and config files in S3, which wasn’t ideal. It felt like we were still living in a world where stateless wasn’t truly possible.

Another challenge came with debugging. Running docker logs would give us insights into the container’s stdout, but tracing issues through multiple containers was a nightmare. We had to rely on good logging practices and hope that our setup wouldn’t break under pressure.

Then there were security concerns. Docker’s default behavior wasn’t exactly secure out of the box. We had to carefully manage user permissions and ensure that we weren’t exposing any unnecessary ports. It felt like walking a tightrope, constantly worrying about what could go wrong.

During this time, the tech world was abuzz with news stories that made our lives feel a bit less secure. The Chaos Computer Club breaking Apple’s TouchID was one such story that hit close to home. We were already paranoid about security in our development processes, and now we had even more reasons to be cautious.

On a lighter note, the rise of SteamOS caught everyone’s attention. It seemed like Valve was betting big on gaming as a first-class citizen on Linux. For a while, it felt like every conversation around tech included a mention of SteamOS or the Steam Controller. Some of us were even tempted to ditch our proprietary OSes for something more open.

But amidst all this excitement and chaos, we kept pushing forward. We spent countless hours arguing about best practices, trying different tools, and tweaking our setup. It was a wild ride, but somehow, it felt right.

Looking back, those early days of containerization were both frustrating and exhilarating. The tools weren’t perfect, the documentation wasn’t always clear, and there were plenty of bumps along the way. But that’s what made it so exciting—being at the forefront of something new and figuring out how to make it work for us.

And now, as we look back on those days, I can see how far we’ve come. The tools have matured, best practices are clearer, and even chaos feels more manageable. We’ve learned a lot, and I’m confident that the future will bring even better solutions.

So here’s to containers and the crazy ride they’ve taken us on. Let’s keep pushing the boundaries and see where this journey takes us next.


That was my take on the tech landscape in September 2013. It’s always interesting to reflect on how far we’ve come since those early days of containerization.