Once upon a time, I worked with Chris Sells and the software arm of DevelopMentor (trip down memory lane, huh). We built a developer tool and it was my first experience working on a product where developers were our primary customer. It left me with a bad taste in my mouth.
It was a great experience working with titan’s of our industry. Without a doubt, one of my best professional experience. This was marred by learning about how developers think about products that they could use.
I think this is true whether it is an open source project, or a commercial product. It has felt like developers can get focused on “How hard could it be?”. This has led many developers to eschew “other people’s code” and want to build it themselves. I think this is a mistake. Let’s talk about it.
We used to say Buy vs. Build but it isn’t always about money. Whether you buy a tool/framework or adopt an open source solution, the decision is similar. Do you allot time to build the code you need; or do you adopt another technology that will require time to get used to and learn. I think there are two schools of thought:
- Adopt what we need so we can focus on the domain and it’s challenges instead of the plumbing.
- Build it all in-house so that we can manage change, features, and lessen risk if a tool or company is no longer maintained.
If you’re making a conscious decision about this, then good for you. But, I’ve noticed that often companies will make decisions based on fear. Sure, there are risks to having dependencies.
But, adopting solutions come with what I like to call “old code”. When you’re not the only consumer of foundational code, you can have a higher confidence that it is a stable product (for the most part). Do you really want to take ownership of fundamental parts of your architecture.
Let’s take the example of messaging. You could choose to save money on using Azure ServiceBus by building your own message queuing solution. But, what is the benefit? I think we tend to forget about the real costs of building systems. If you have a $100K/yr developer and that one developer could create something in-house in 4-6 months, that is front loaded costs of $50K. While adopting a service or dependency would save you that, though there are costs in adopting too.
You can still make solid decisions about the range of the solutions you need. For example, instead of Azure ServiceBus - using RabbitMQ, or NServiceBus and MassTransit might be better.
Another example of this is when I run into developers who insist on Vanilla JavaScript/DOM instead of using frameworks like Vue, Angular, Svelte and React. Sure, you don’t have to learn anything new, but building your own reactivity and manipulating the DOM directly can be really difficult. I’d rather spend my time on the domain problems than building a framework. That’s just me.
Building from scratch is hard…and can be costly in other ways. What do you think?