Back in 2005 when I was still in college. Friends found me a part time job developing a desktop application for a barber shop. .NET and C# pretty much on the headlines news everyday, it’s also a modern way of writing desktop application at that time. So I choose C# to development the application.
Microsoft makes the development process as easy as drag and drop controls and then hooking your database business code. I had so much fun of doing the development.
By the time of the deployment though, it gave me a hard time. Because every machine needs to have the correct version of .NET runtime installed, and a SQL server instance running at least somewhere in the network as well. It’s been a nightmare for me to have it working on the client’s machine.
Fast forward to 2011. I was super excited about Ruby and Ruby on Rails, I got my first Mac. Another time, I got a contract work to develop an expense system for a big company in China.
Of course I am gonna use Ruby on Rails, cause there is nothing at that time beat the developer experience of that. While I am having all the fun and learnings having the web application built. I realized that the client can only allow windows operating system running at their company. Anyone who familiar with the early days of getting Ruby on Rails running on a windows machine should know what I am talking about. It took weeks to finally get it up running on that machine, not only that, every new deployment is like another big unknown for me. Because of the huge trouble of that, they finally canceled the entire project and looking for someone else who can build them a ASP.net application.
Over the years, I’ve been very much appreciating the programming languages with the mind of easy of deployment. Languages like Rust or Go just makes the running your software on other people’s machine dead easy.
As a user, I would be way much happier if it’s a single binary rather than 200 files scattered all over the place. That’s why I am huge fan of tools like syncthing - files synching tool and ran - local http server. I think that’s also a reason I favor Mac over Windows because of the single .app application file.
This might be sounds like a stretch argument, but I think Single-page application to some extend is an easier (might not be better, but that’s totally different discussion) way to distribute client side UI than traditional server side rendering apps.
Couple years ago, we want to migrate a huge production running web application from an old JSP (customized Java server) to a modern Spring based to mitigate some security risks. At that time the UI is written in a SPA framework, the Java server vended APIs and using JSP for the layout only. No matter how much I dislike client side rendering or the specific SPA framework they chosen at that time (spoiler: not React), I really appreciate the self-contained nature of SPAs. The migration of the backend is super smooth.
I’ve written quite some side projects over the years, interesting thing is the one wrote using Go or pure client side JavaScript are still running perfectly fine, but the ones written in Ruby or Node can’t even pass the bundle
or npm install
phase.
To end this already long article, I guess all I am trying to say is treating software deployment as part of the crafting. Cause real artists ship.