Need to track customers' orders on your Web site? Or create a customized internal billing system? Unless you're technically inclined, trying to develop custom applications for your business is like ordering dinner in a foreign country-but with more risk. It's one thing to waste money on a meal you didn't realize you asked for; it's another thing altogether when your company makes the mistake of pouring thousands of dollars into a project that doesn't pan out.
No matter what software development project you want, you can make it succeed even if a technical person isn't on staff. Here are some tips for working with outside developers:
- Know what you want. You should have a clear idea of what you expect in the application you're looking for. Drafting a document that details its purpose and desired functionality will convey those expectations to any development firm. If you're converting from a manual process, it's useful to have samples of forms and reports you use and a detailed description of the work flow. Sketching out the way the material could translate onscreen will help the developer understand what you want to get out of your software and could even inspire suggestions to improve efficiency. You might be surprised to see how many manual steps can be eliminated and done automatically via software.
In your first consultation with any developer-include people familiar with your current applications and those who will be using the customized software. Current users can offer additional insight into your software needs, while new users may be better able to explain the specifics of the desired functionality.
This should not be the only meeting you have. Just handing over a list of needs and expecting the developer to determine what comes next could be disastrous. Provide a lot of input in terms of developing the on-screen displays and the actions users should be able to take on each screen. Although awkward interfaces may work fine technically, they can result in dissatisfied users. To get the best results, you and others on your staff should constantly play an integral part in the development process.
- Seek multiple options. In most cases, you'll have several choices for carrying out your project. Different software, programming languages and even varying sets of skills can be used to accomplish the same result. As you interview potential firms to handle your project, ask why certain approaches are recommended, why they're better than others and what the drawbacks of their recommendations are.
- Focus on the build vs. buy recommendation. While some developers will recommend that they build your desired application from scratch, others will work with an existing application and build on top of it. By building an application from scratch, you have the ability to specify exactly what you want, but it might take more time to create. Taking advantage of an existing application can result in quicker turnaround with less expense, but it could also mean limitations in either functionality or interface.
Regardless of the method you choose, make sure to ask potential developers what they think will be the trickiest issues to resolve. Even if you don't understand everything they talk about, you can definitely get a sense of how well-thought-out the recommendations are by the developer's ability to explain his or her position.
Find out how the software will grow with you. In this ever-changing age of technology, you don't need software that can't change with the times.
- Find great developers. Look for developers who are well-versed in the programming languages you'll need. Ideally, they'll have built similar applications previously; it's recommended that each person working on the project has at least two years of hands-on experience with the required language. While this should not be a determining factor by any means, it doesn't hurt to find out whether they've provided similar services for other companies with needs like yours. If they've been down the same road before, they're familiar with its dips and bends. Always ask for-and check-references.
Compare the services offered by different developers and try to get the most for your money. But look beyond their skills; expand your focus and consider the overall software development package. You might not realize where the saving graces will actually lie. For example, one developer might offer to provide several prototypes for you along the way and then use your feedback to make necessary changes before the code is locked down. In the unfortunate event that you need a major redesign on the software, such a provision can save you from potentially draining costs.
Still, a successful project requires more than just great programming. Whether you work with a freelancer or a team of people, you should seek out developers who can create a formal specification-that's a document that details the functionality from a functional and technical perspective. Also look around for developers who "comment code" well-that's tech talk for adding notes that describe what the code does. It's money well spent to ensure that others can extend your application in the future.
- Test the software thoroughly before bidding your developer farewell. Even though the software developer should have taken care of this task before delivering the product to you, it's ultimately your responsibility to make sure your new software works correctly. Have qualified staff test the software, have the developer test it in front of you at your company, or hire an independent testing lab to go through and make sure everything works properly.
Despite the many hours spent poring over your needs and the desired results, it's almost a given that changes or minor adjustments will have to be made to the application after installation. Will the developer be able to handle those adjustments after he or she gets your initial feedback? And how will that factor into the price? Don't be caught by surprise at the tail end of this arduous process by a series of "extras"-get answers about costs in the beginning.
The other side of testing is fixing mistakes, or debugging. Will your developer be able to assist with this after the software is installed? Some firms bundle implementation and training into the software development package, so this might just be part of the deal. If it's not, make sure you have a trouble-shooting plan in place before your developer heads for the door. Going one step further, ask your designer what skills are needed to tackle these issues in case you end up scrambling to hire someone specifically to fix the bugs.
- Get it in writing. Avoid the blame game by covering details about such niceties as project due dates, payment milestones, code ownership and quality guarantees. If you'll be sharing sensitive information, having potential partners sign a nondisclosure agreement is wise.
It's particularly critical to establish ownership of the software when discussing a software development agreement. You might be surprised to know that ownership of the intellectual property is not an automatic inclusion in the transfer of the software from the developer to the client. Depending on your needs and wants, you could negotiate to be the sole owner, to merely have a license to use the software or any number of options in between.
- Start your search. You might want to start with my Web site at www.buyerzone.com/professional_services/consulting/buying_options.jhtml, to determine whether you need a firm or a freelancer. For a project that requires a variety of skill sets, consult firms that can provide a team of people. If your work is not as time-sensitive or as broad in scope, a freelancer should be more than able to address your needs. Rates range from $60 to $175 per hour, or you may want to negotiate to have fees tied to performance or the meeting of deadlines.
Software Developer Lingo
Application (app): a synonym for software program or software
Architecture: refers to the design of software or hardware, or to how the software and hardware work together to perform tasks. The architecture of a software program maps out the complete functionality of the application.
CAD (computer-aided design): CAD programs have replaced the drafting board as mission control for industries in need of multifunctional modeling and design systems.
CBT (computer-based training): software that allows users to create multimedia applications. Authors can combine text, audio and other elements to create a training manual, interactive resume or any number of other programs.
Client/server: This type of software enables your computer to communicate with a centralized server. Client/server software is critical if a company wants all employees to have access to information without loading that information onto every computer in the office.
GroupWare: software that allows users to share ideas, exchange information or work on the same project from different locations
License: A license is often what you actually pay for when you buy software. You aren't buying the software, but rather the license that gives you the right to use it on one computer (though some licensing agreements vary depending on the situation).
MiddleWare: refers to programs that connect two separate applications. MiddleWare is often used as the glue between database and Web-based applications-sometimes referred to as plumbing.
System requirements: a general term used to describe the capabilities a computer must have in order to successfully run a particular program. Most system-requirement information includes the minimum needs for memory (hard drive and RAM) and processor speed, what type of operating system the program can run on, and whether a CD-ROM drive or Internet access is required.
User interface (UI): User interfaces are what you see when you use a program, such as taskbars, pulldowns, scroll bars and so on.
Mie-Yun Lee is the founder and editorial director of BuyerZone.com, the Internet purchasing hub for small businesses. Doreen Vianzon contributed to this article.