Wheels and Reinvention
This is the inaugural post for Twenty Questions, and I hope it sets the tone for a lot of what you’ll end up seeing here. Today I was reading some comments on a Hacker News thread A letter to myself as a fresh software engineer that resonated. Among some gems in the article was advice to avoid reinventing the wheel (another way of saying to avoid the Not Invented Here syndrome).
When not to reinvent the wheel
When you’re building something people will rely on (e.g. at your job) and will eventually maintain, then it’s way better to stand on the shoulders of giants and find solutions that already do as much of what you’re trying to accomplish as possible.
For example, it’s better to compose libraries together that work in concert than it is to build each individual library as a mashup of highly coupled features. Taken to the extreme, you would never build a database instead of plugging in SQLite, PostgreSQL or whatever suits the task.
Think about it, people have already taken the time to think through the problem space and serve up solutions that navigate it. All you have to do is wire it up!
When to reinvent the wheel
Reinventing wheels is great for side projects when you want to learn new things. Perhaps you’d like to figure out how databases work, so go build one. Or maybe you’d just like to overengineer a simple concept that’s been done a million times so that you can understand how different technologies work together. Have at it. A good example of this in the wild is the TodoMVC project, which showcases a bunch of different ways to build a todo web app.
Don’t let anyone discourage you from building your wheels; otherwise, how else would you grow? Furthermore, who knows…maybe a novel idea will emerge from your exploration and you can contribute it to something popular or distill that portion of your project into its own solution.
Setting the right expectations
Sharing things you’ve built with others comes with the implicit expectation of keeping them running. If you reinvent a wheel in a better way and want to share it, then you’re signing up to support it and even collaborate with others on improvements.
My wheels
My first wheel is golinx, a really basic project to maintain a list of custom redirects and shortened URLs (post forthcoming). I’ll keep this section update as I add more things.