Why ( and how ) I’m still coding on my 5 years old Macbook Pro
During summer 2014, I did what a lot of coders do on a regular basis : I bought a shiny new laptop. But this one was wot quite shiny actually : it was a refurbished Apple 2013 Macbook Pro. A that time I didn’t want to buy the latest and pricey Macbook, and I still won’t.
The thing is over the last 10 years I owned 3 different Macbook Pros, upgrading routinely because I needed more power, more memory, more hard drive space.
During those 10 years I have been working as a web developper/consultant and part of my job was to reproduce my customers’ production environment so I could code new functionnalities, audit their code, find bugs & vulnerabilites and fix them. So, ultimately it made a lot of sense to me to update my work tools systematically. I was making quite a generous amount of money thanks to these computers so I wouldn’t think twice before buying a new one.
But why exactly do we have to update our hardware again ?
You’re probably quite familiar with Moore’s Laws stating that the number of transistors in a dense integrated circuit doubles about every two year .
But you’re maybe less familiar with Wirth’s law (also know as Page’s laws, Gate’s law and May’s law ) which states that software is getting slower more rapidly than hardware becomes faster .
I noticed the effects of this law first hand by seeing the complexity of Web frameworks growing almost exponentially since the start of my engineering career. I couldn’t find a good chart showing the growth in lines of codes needed to run web applications ( and I’m not even sure that would be the best metric to prove my point ) but I still remember the time all I needed was a couple of php files to run a website.
Nowadays, all web frameworks rely on complex patterns, libraries and tools and that’s a great thing, it actually makes our day-to-day job easier but the downside if this is that it takes a pretty big toll on our processing ressources.
I also have to admit that I have always been a big fan of virtualization, I have been running all my environments in virtual machines for years. Doing so, I always needed extra RAM to run my linux distributions on my Macbook. I know that you can run everything natively on Mac OS but I always stood by the rule of running my code in an environment as close to the production environment as possible. It somehow always made sense to me as much as isolating all my projects one from another since I have been working for many different customers.
So two years ago, I naturally adopted Docker to run all my environments and started to ‘containerize’ all my new projects. I remember being introduced to Linux containers ( lxc ) a few years before, but Docker was another thing, it was exactly what I needed to work efficiently.
But this is when I realized my 2013 Mac pro was feeling ‘old’, running containerized complex web frameworks / applications alongside my IDE and my web browsers was too much for this 2.4Ghz Core i5 / 8GB Ram computer. I needed to upgrade my harware. Again.
But hold on a minute, any sane person would be wondering at that point : “What the hell did you do with those old macbooks ?”
Turns out I donated them to friends and I was pretty happy doing it ( my first macbook had pretty rare stickers on so I kinda still miss it. That’s how I learned not to put rare stickers on a laptop but that’s another story ). But what do you do when it’s 2016 and all of your friends have a laptop ?
Somehow it didn’t make sense to me to throw away a perfectly good macbook with a perfectly good ssd / retina screen / keyboard … When the only bottleneck was the CPU / RAM couple. So I decided to keep it and look for another solution. And, to be really honest with you, I didn’t feel like spending over 2K USD on the latest Macbook.
That when I started to work on “project bloom” that I later renamed to Stick.sh a software stack that turns a 200 USD compute stick into a powerful headless Linux and container-friendly development environment.
So I am now still using my old Macbook, but I keep all my stacks running on a stick with a dedicated Core M3 / 4GB hardware. All my code is seamlessly synchronized with my stick over Bluetooth / USB and I created a desktop and a command line app to control my projects.
I am currently running an alpha test program with a closed circle of friends and partners so if you want to be part of it, know more about that project or just know about when the public beta will be available feel free to register here on http://stick.sh. (full disclosure: the whole point of this article is to get you to check it out so if you read so far, you might as well just click the link)
So far I’m pretty satisfied with this solution, not just because it’s mine, but because now I don’t have to worry about performance/optimization and focus on coding for my customers. Who knows, I may keep it that way for a couple more years and just update to a new stick when the time comes.
And by the way I get to keep my current laptop with its non-rare-but-still-cool stickers.