Using the existing wheel

I've worked on several enterprise-grade projects, both jumping in existing projects and starting from scratch.

In these enterprise environments the applications I helped write were almost always entirely custom built. There was even a feeling of distrust towards pre-built UI controls (Telerik, DevExpress,…). We felt these libraries provided basic functionality but never met our specific requirements. Moreover, the time and hacks necessary to meet these requirements would not be worth it.

In one case, we were able to "prove" that we needed a custom solution. We did this by choosing three possible solutions and making a spike. But in most cases, this distrust was purely based on gut feeling.

Many programmers I know would share these feeling, at least intuitively. On the other hand, a lot of them loathe the in-house frameworks for logging, ORM, etc, stating it is reinventing the wheel.

So we seem to dislike reinventing the wheel, but make that same mistake so often. Is it worse when someone else reinvents that wheel?

In my previous project, I was introduced to a library of UI controls (the specific brand isn't that important). And while I did struggle to customize it, I would have wasted a lot more time and money if I had written it by myself. I know I'm not up to writing a full-featured charting control in WPF, or any other language. The same goes for several other UI controls.

A small chart will clarify what I mean:

See how, at a certain point in time, we get the feeling the library is slowing us down? But in the end, we have finished earlier than when we would have done it all by ourselves. And that's not even factoring in the updates, support, etc.

Recently, I was asked to program a custom web application for a client. This solution included some typical things like users, blogging, etc. My initial instinct was to look at creating this from scratch. Agreed, I would be using the ASP.NET MVC template that includes users, but apart from that, I would have to spend a lot of time programming user management, blog management, etc.

These are all problems that have already been solved by CMS systems. Most modern CMS systems allow you to extend and add functionality via plugins. So why not build on that, and get all the updates, support, and development work of other developers for free?

Granted, there is a learning curve to get you started. I'm currently using Orchard and have previously extended Drupal. Getting to know the insides of the system and how to extend it takes some time.

In that regard, our chart isn't really correct anymore, but in the long run, you should benefit from it. A good CMS will have contributors that focus on security. Contributors keeping an eye out for UX consistency. Performance, modern standards, integration with other systems, caching, etc. This is quite a lot of work to take on by yourself or by a small team.

So before jumping in and inventing another mediocre wheel, we should see if there isn't an existing wheel we can fit to our needs. Focus on the your business, not all the infrastructure that surrounds it.