There’s a certain draw to finding the perfect tools that magically match your list of requirements and save you lots of time and money. If you’re lucky, you may find some that fit, and it’ll be wonderful. Until they don’t.
One of the best parts of being a programmer is the ability to build your own tools. You don’t necessarily have to build your own raw tools, but you should be able to wire them together. Spending a little extra time understanding the tools you use everyday can have major pay-offs.
The more I develop on a unix-based system, the more I appreciate this philosophy. Leveraging a wide array of simple tools, and orchestrating your own solutions will allow you to naturally evolve your workflow as your requirements change.
The alternative is being enslaved to SaaS systems which lease tools to toolmakers purely because they solve your problems for you and hide the complexity. As a developer, it’s our job to embrace and ultimately overcome those complexities.
I see it almost every day…
- How can I automate deployment with myfavoritehost.com?
- How can I integrate my VCS with MegaEditorIDE?
- How can I get CI for my language?
- How can I run tests when the filesystem changes?
All of these features add a ton of complexity to the solutions they integrate with, and the kicker is, none of them are necessary.
- Your host has SSH access. That’s all you need.
- Learn Git from the command line. Any GUI will get you 80% there and then suffocate you.
- CI just needs to run a script. Whether it’s node, java or PHP is irrelevant.
- Your operating system has mechanisms that can tell you when files change. Use that (and leverage it in your toolset).
Master your raw building materials. They’ll help you far more than the pre-packaged solutions that you are being sold.