Never build anything from scratch.
When I think of the perfect software programmer, I think of Paul Sr. from American Chopper:
Burly muscles? Check.
Awesome mustache? Check.
A mastery of outsourcing? Double check.
What the custom chopper guys do best is outsource the development and maintenance of technology–not to India, but to other companies who specialize in that technology. The engine, the wheels, the chroming process, everything on their bikes are purchased from vendors and assembled in a way that maximizes their combined value to the customer. Nowhere along the assembly line does the process come to a halt because Mikey has decided to reinvent the wheel.
In the world of programming, however, there’s one of those guys in every shop. I’m going to give a few reasons why the American Chopper way of programming is better than the other “reinventing the wheel” type.
The most expensive development resource is time. Every man-hour that goes into developing software is one that you pay for, and every day that your business is waiting on custom code, is another day that sales are going elsewhere. Many programmers, myself included, underestimate the scope of tasks. When writing code from scratch, there are hundreds of details that only bubble up to the surface once the project is half-way up s-creek.
I take every estimate I hear from a programmer and double it. If you’re trying to compare the cost of a product created from scratch vs. one bought off the shelf, triple it.
Think about it like this, you wouldn’t pay a programmer to write a word processor for you or an Internet browser. Why pay one to write your lead management software or a CMS? It already exists, and if you can’t find it, hire a developer to look harder.
I’ve talked to countless clients who’ve wasted tens of thousands of dollars on elaborate custom systems that they could have basically gotten for free. If only their developer had followed rule number one: never build anything from scratch. The kicker is, the free version is usually better!
RSS feeds, API access, built-in security, user administration, exporting, importing, custom alerts, and dozens of other features they hadn’t even thought of yet already existed on available frameworks and software packages. Better yet, they’d been designed for users with similar needs.
Whether it’s an expensive tool set or some freebie plugin, it’s always good to have more features than you’ll use, and it’s always bad to spend more and get less. I’ve seen Paul Sr. kick a door off its hinges for less than that.
Ready-made software comes with a pedigree of beta testing. That doesn’t mean your finished product is going to win Best in Show, but it does mean that your finished product won’t leave everyone in the company scratching their heads and wondering what the hell to call the thing.
Ready-made tool sets have forums and communities of similar users who’ve faced similar problems. No solution made from scratch can boast that. Even some of the smaller commonly-used open source projects have hundreds of active beta testers–and yes I realize that sounds like calling Reno the biggest little city in the world, but it makes sense if you’ve used something like FullCalendar. A product built from scratch has only one group of beta testers: your customers.
Software built on pre-existing solutions is going to do something right out of the box, and in a business where user interface is the difference between sales and abandonment, the sooner it works, the sooner it can be refined.
It’s For Sale
In addition to the testing and maintenance, there is one big added benefit to using pre-built systems: new customers!
Look at the most popular plugins for sale in open source web applications like WordPress, Joomla, or Magento. These plugins started out as a developer’s attempt to add something they needed to an open source system instead of developing that system from scratch. Interestingly enough, those systems themselves (WordPress, Joomla, and Magento) were built on existing software packages in a similar fashion (b2, Mambo, and osCommerce). And the tool I used to look that up, Wikipedia, was itself built on a pre-existing application called Nupedia.
The DIY Paradox
When the WordPress subdomain project came up, instead of starting from scratch, I searched for an existing solution that could be tweaked to fit our needs. What I found was a plugin that worked perfectly. It didn’t even need to be tweaked, and when I went through the code to find who to thank for this feature, I found something funny. The plugin (WP Subdomains) was based on another plugin I had written from scratch years ago. So I guess you are allowed to write things from scratch after all, but only if you already did.