Should you purchase an off-the-shelf product and mold your business to fit it, or build what you need from the ground up? The build vs. buy debate is almost as old as the IT industry. In the past, the buy option often trumped the build counterpart, but advances in development tools have muddied the water.
The .NET Framework is a good example of a platform that provides the tools to streamline the development process, making the build option attractive.
In this article, I'll discuss what you need to consider when making such a decision.
Streamlining the process
A quick perusal of .NET advertising makes .NET development seem as simple as a few mouse clicks. While this is an oversimplification, .NET is a major improvement over previous Microsoft development tools. The default .NET environment provides a wealth of features and controls out-of-the-box that enable you to build robust applications.
The core product in the Microsoft stable is the Visual Studio IDE (Integrated Development Environment). It includes numerous wizards that automate routine tasks like connecting to data sources, data presentation (in various formats), and Web application creation. You can build a simple application in a short amount of time with a few mouse clicks. Most custom applications go well beyond such simple solutions, but they do utilize some of the same features.
I have worked with .NET since its inception in 2002. While its RAD (Rapid Application Development) promises have some merit, software development is still an iterative process with extensive human interaction. Sadly, developers are often faced with management that believes Microsoft's ad pitch, so it takes some time to convince the decision makers about the time required to build a solution. At this point, management may decide to go with a shrink-wrapped solution.
You can usually find a suitable product to fill a business need. This may be an off-the-shelf product or an on-demand solution (like SalesForce.com). Price is always a consideration, but it should not be the only criteria. Purchasing software includes tangible benefits not available with custom solutions.
One benefit is support, whereas the vendor will be available to support the product when and if problems arise. Of course, support is rarely free. In addition, the vendor's industry expertise leads to a stronger product. This expertise is available—for a fee—when/if product enhancements are required.
From my experience, customization is always necessary because it is difficult to find an off-the-shelf solution that meets every business need. As every developer knows (or quickly learns), no two businesses are alike. Another viable option is the open source community where .NET-based applications have become more prevalent in the past year.
The open source movement has revolutionized the way software is built and distributed. Until recently, open source development focused more on non-Microsoft development platforms like Java. The .NET Framework has been more widely accepted with the Mono project providing some of its push with its impetus to port .NET to non-Microsoft operating systems (most notably Linux). The majority of the open source work with .NET has focused on development tools. A good overview of these tools is available here. These tools simplify the development of custom solutions.
Unless you can find a reasonably priced product to meet the majority of a project's requirements, I prefer to build a solution. This approach allows me to include all of the necessary features to meet a business need. You can incorporate add-ons to enhance developer productivity by negating the need to build certain pieces of the product. After all, any building project goes faster with the right tools. Microsoft provides some of these add-ons with its Application Blocks. These blocks simplify database interaction, caching, and much more.
In addition, there are many commercially available add-ons that enhance existing or add new features to the environment. A good example is Infragistics NetAdvantage for .NET, which provides a robust set of user interface tools for both Web and Windows Forms that go beyond the basic .NET controls. I often see customers turn to commercial products for charting; one such product is GigaSoft'sProEssentials. Also, there are a variety of open source tools available to streamline development tasks. The following list provides a sample of the offerings:
- NUnit: A freely available unit testing framework for properly testing your .NET code.
- log4net: Send output to various outputs with this logging framework.
- NInstall: Package and distribute your products with this installer tool.
- NAnt: A build tool along the lines of its Java counterpart.
There are plenty of add-ons to aid the development process. Note: These extra tools do require a learning curve, so I tend to be choosy about which ones I use.
Making a decision
The ultimate decision to build or buy a solution is usually not in the hands of the developer, but his or her input is often requested. I've often been called a control freak, so this may explain my desire to go with custom solutions in favor of commercial products. There are many factors to consider and numerous options available with open source gaining more attention and respect.
What factors influence your organization's build vs. buy scenarios? What is your preference when deciding to build or buy on your projects? Please share your thoughts in the article discussion.
Miss a column?
Check out the .NET Archive, and catch up on the most recent editions of Tony Patton's column.
Tony Patton began his professional career as an application developer earning Java, VB, Lotus, and XML certifications to bolster his knowledge.
Tony Patton has worn many hats over his 15+ years in the IT industry while witnessing many technologies come and go. He currently focuses on .NET and Web Development while trying to grasp the many facets of supporting such technologies in a production environment on a daily basis.