CON: Requires management from the customer. However, there is not a style that does not require your management to some degree. A project that is staffed with the wrong people is a nightmare. Also, budget control becomes a larger issue here. Again this should be controlled by "managing" the project and not just hoping for the best.
Project Management is always a real issue and must be done. We provide strong project management with major checkpoints at the 25%, 50% and 75-80% development stages while also doing weekly checks. You should know ahead of time if the project is having issues, not after the fact.
CON: You and your vendor are now on opposite sides of the fence. No specification can be 100% complete, including colors, screen design, and complete processing prior to development. Also, typically the business customer wants changes over the time the software is being developed. This creates a "Change Order", and has to be estimated and agreed upon. This could be new features, pages, etc. The business customer doesn't want to deal with 100s of change orders and typically expects most of these to be included in the original price. The vendor, however, has to pay the programmers and other staff for the work. Every change order is an increase in cost. Now the vendor and customer have to negotiate, which is not a friendly situation over time.
Not-To-Exceed also means different things to different people. Typically in a commercial environment it means that the project must be completed and not exceed this price. Not-To-Exceed is rarely used in a commercial environment. In government Not-To-Exceed typically means work continues until the specified ceiling is reached and then work stops until a new budget amount can be allocated to the project. We've seen government projects span years because of this, but many times this is the only method a government agency can utilize to get a project done.
The definition should always be clarified before work begins.
A computer program has so many variables, that it's difficult to estimate the time required to estimate the time required to give you exactly what you want.
Now I've heard - "I know exactly what I want!"
Okay, do you know what every piece of data, every field on the screen and every piece of data on a report should look like and act like?
If you really think about it, you don't.
Let's try a little example.
Let's define a simple program to track phone calls.
Let's keep it simple and say only one person is going to enter information into this system.
Now, we know we need the obvious: time and date, who called, a topic plus maybe a notes field for details.
Simple, but do you need first name and last separately - are you going to want to look up by last name or first? Do you want to type the names in all the time or do you want to be able to look them up? Do you want it to type in the date and time or do you want a button to automatically enter it for you?
Do you want to track who they were calling for - or what they were calling about from a list so you can keep reports on it later?
Do you want to track the resolution of the phone call?
Whether they need a call back or not?
And so it goes down to the color of the screen and buttons.
Some people say my home builder can give me a price why can't a programmer. A home builder has plans that you've either purchased - or had made. This most likely has cost you thousands of dollars. Programmers can do the very same thing but you have to go through a detailed analysis document before the programmer can start and just like building a home, this costs thousands of dollars. Most customers do not want to pay for this. The alternative is to build in small phases to make sure the program is built how you want it without huge mistakes.
For those of you who have had your own home built then you know about the things that are missed. Enough electrical outlets and in the right spots, enough lighting, enough cupboard space, enough room here, doorways, ventilation, etc.
ANSWER: When you hire a programmer to create a program, or modify an existing system you should receive the following items.
1 - The system you asked for
2 - The source code. (why you need this!)
AND If you asked for it...
3 - Business process flowcharts and analyses
4 - Documentation on how to use the program
5 - Training on how to use the new system
In simple terms, programs have two flavors, one your computer understands and runs, this is typically called the executable.
The other is the source code which is in a computer language that a programmer can understand and work with.
Without the source code your program cannot be modified, or updated by anyone other than the original programmer who has the source.
If you are paying for programming by the hour then you are paying for the source code and not just the executable.
Don't hire a programmer who is not willing to give you the source code and make sure this is in the contract.
There can be circumstances where you might not get the source code - you are paying a fixed price for the system with an understanding that the programmer is going to resell that program or it is a commercially licensed system that is sold publicly, eg: Quickbooks.
Anything else and you are being held hostage, you'll always have to go to them to get modifications done, and they can and typically do start raising their rates.
The language your new system is written in, and the tools used to create it, will determine the cost of maintenance in the future.
If your programmer uses a programming language that is not one of the few popular computer languages, then you could end up paying a lot more to have changes made in the future.
Think of it this way, if you want your biography written, do you want it in English or Aramaic.
Think how expensive it would be to have it changed in the future, you'd have to find a person who is an expert in Aramaic - that would undoubtedly cost you more than a typist who knows English.
Programmers will want to use their favorite language citing many wonderful reasons why that language is the best.
This may be true, but it's still going to cost you.
Current popular programming languages include: PHP, C#, Java, Javascript(NodeJS), Python, ASP, Microsoft Access, and depending on the application along with the web standards, HTML, CSS, and JavaScript (React, Angular).
ALL are advised to consult an expert for your particular application.