On this page there are two topics: Pick a strategy that will pay off financially, and carefully choose an implementation strategy that is likely to work.
In most case we can not make a good choice of the best projects, or the best way to do a project without breaking it down into components and estimating the costs and benefits of different ways of developing or obtaining the components. This leads to cost-benefit analysis. Choosing the best development strategy and system architecture is often the key to a successful project. There many ways to implement one logical solution to a problem.
| Grades | Work | Grade Work | Submit Work | Return Work | Read Grades | Fix Errors |
|---|---|---|---|---|---|---|
| Paper | Paper | Pen, Paper | Manual | Manual | Ask the teacher | Manual |
| Paper | Paper | Pen, Paper,Calculator | Manual | Manual | Ask the teacher | Manual |
| Paper | Paper | Pen, Paper+Pascal Program | Manual | Manual | Ask the teacher | Manual |
| Hypercard Stack | Paper | Pen, Paper & Mac | Manual | Manual | Ask the teacher | Manual |
| UNIX Files | Paper | Pen, Paper & awk | Manual | Manual | Ask the teacher | Manual |
| Spread Sheet | Paper | Pen, Paper & PC | Manual | Manual | Ask the teacher | Manual |
| Spread Sheet | UNIX, vi & PC | Ask the teacher | Manual | |||
| Spread Sheet | Paper | Pen, Paper & PC | Manual | Manual | Web Pages | Manual |
| Spread Sheet | Paper | Pen, Paper in class | Manual | Manual | Web+PHP |
. . . . . . . . . ( end of section Example -- My Grading System) <<Contents | End>>
Notice: In this class we don't want or need to work out how to code a program -- it is better to find a way of not coding it at all!
. . . . . . . . . ( end of section Principle -- No Programming is good programming) <<Contents | End>>
Some methods completely omit the Analysis above -- they go directly to an essential model (logical model) of what needs to change.
Some methods focus on one small fix at a time.... This is called evolutionary development or incremental development. When done well it handles changing or risky situations well (but not efficiently). However be aware that these are what cyberneticians call "Hill Climbing" systems. They tend to get stuck on top of "Hills" -- local optima -- where any small change makes the system worse. They do not have to end up in the best state -- the global optimum. Under these circumstances the only thing to do is launch a big project to move the system a distant part of the "systems landscape".
A compromise method focusses on just the parts of the system that need fixing before doing any modeling.
. . . . . . . . . ( end of section Background) <<Contents | End>>
In medium to large sized enterprises there will be a committee called a Steering Group who are tasked to select the projects that have time and money invested in them. They typically start with a list of Systems Requests from stakeholders. They have to resolve the political forces to classify projects (typically) in one of the categories listed below:
The decision is based on ranking projects in terms of feasibility, efficiency, stability, security, needs, Cost/Benefit analysis(next), etc..
In a Service Oriented system the assembling of parts is done on the fly, as the software runs. Different components can advertise their services on the Internet. At any time a different set of components cooperate as parts of the current system. Service oriented systems are a new technology.
The first step is to have a pretty firm schedule for each strategy you are comparing.
Benefits typically follow a "Sigmoid" curve
Typically costs follow a Bathtub curve
Tangible costs and benefits have an obvious monetary value. A classic example would be computer equipment. An intangible costs and benefits tend to be hard to quantify. The classic intangible benefit is "goodwill". You can't touch it but the fact the customers have had good experiences with a company in the past has a value to the enterprise.
You start cost/benefit analysis by documenting all the benefits and costs for a project. If there are different projects you do a different list for each and compare the values at the end. Given a list of benefits and costs then there are two or three traditional ways of evaluating a project. Most of these can be calculated using simple spreadsheets. I'll show them (mostly) as tables in this document.
Here is an example of how a small company that might invest in replacing their van by a new one:
We summarize this data in a table like this:
Table
| Time(years) | Cost | Cumulative Cost | Benefit | Cumulative Benefit |
|---|---|---|---|---|
| 0 | 20000 | 20000 | 1200 | 1200 |
| 1 | 0 | 20000 | 1200 | 2400 |
| 2 | 0 | 20000 | 1200 | 3600 |
| 3 | 0 | 20000 | 1200 | 4800 |
| 4 | 0 | 20000 | 11200 | 16000 |
| Total | 20000 | - | 16000 | - |
If a project is worth tackling then there should come a time when the cumulative benefits outweigh the cumulative costs. This is called the Break Even point.
It is simple to calculate the break-even point and return-on-investment from a table like the one above. We can see that in this project there is no time in the 5 year plan when the benefits pay back the cost. Perhaps the project should run longer, or a cheaper way to pay for the van should be found.
The return-on-investment is calculated as
And in this example project the ROI is negative -- -20%.
A more sophisticated calculation is to find the cash-flow for each period. Where
Table
| Time | Cost | Benefit | Cash-flow |
|---|---|---|---|
| 0 | 20000 | 1200 | -18800 |
| 1 | 0 | 1200 | 1200 |
| 2 | 0 | 1200 | 1200 |
| 3 | 0 | 1200 | 1200 |
| 4 | 0 | 11200 | 11200 |
The above tables do not allow for the fact that money that arrives (or departs) in the future is not as valuable as today's money. Here is the key concept: the Present Value of Future Money. This is the money you would give up now to buy the money in the future.
In the above calculation, benefits and costs that will occur in the future are of less value than the money flowing in the present. There is even a well known formula to convert 2 birds in the bush into a bird in the hand. Money that is in the bank accumulates interest and so gains value as time goes one. So, if the interest rate is 6% then if you invested $100 now, then it would become say $106 in a years time. So $106 in one year is actually worth $100 today! Further, money that comes in or is spent in the future should be decreased in value to allow for the risk of it not happening. This is calculated using a current interest rate. It thus balances the value of a dollar in the bank today vs two dollars in the future. You can also discount risks by increasing the interest rate above the bank rate...
Example -- with a discount rate of 6% per year then $1 is worth different
amounts if it arrives or leaves in the future:
Table
| Years | PV (rounded to nearest cent) |
|---|---|
| 0 | 100 cents |
| 1 | 94 cents |
| 2 | 89 cents |
| 3 | 84 cents |
| 4 | 79 cents |
| 5 | 75 cents |
| 6 | 70 cents |
| 7 | 66 cents |
| 8 | 63 cents |
| Years | PV (rounded to nearest cent) |
|---|---|
| 0 | 100 cents |
| 1 | 99 cents |
| 2 | 98 cents |
| 3 | 97 cents |
| 4 | 96 cents |
| 5 | 95 cents |
| 6 | 94 cents |
| 7 | 93 cents |
| 8 | 92 cents |
There is a formula (called the present value (PV)) that discounts the amount depending on how far in the future(t) the cash flow(c) is for a given rate (r) --
You don't need to memorize the formula.... you'll find it in most spreadsheets and one the Wikipedia. But you do need to recognize it and be able to describe how we use it in cost-benefit calculations.
In calculations it is easier (often) to record the discount -- the number you divide
by.
For example, in the above example and assuming an interest rate of 6%
per year, the cost benefit analysis would be:
Table
| Time | Cost | Benefit | Cash-flow | Discount | Present Value(PV) |
|---|---|---|---|---|---|
| 0 | 20000 | 1200 | -18800 | 1 | -18800 |
| 1 | 0 | 1200 | 1200 | 1.06 | 1132 |
| 2 | 0 | 1200 | 1200 | 1.12 | 1068 |
| 3 | 0 | 1200 | 1200 | 1.19 | 1008 |
| 4 | 0 | 11200 | 11200 | 1.26 | 8871 |
| NPV | - | - | - | - | -6721 |
Conclusion: Definitely rethink this project... for example, lease a van rather than buy it, perhaps. Or, perhaps keep the van longer ( but the resell benefit will decrease..).
Here is a summary of the procedure for cost-benefit discounted cash-flow calculations.
| Time | Cost | Benefit | Cash-flow | Discount | PV |
|---|---|---|---|---|---|
| 0 | c0 | b0 | c0-b0 | 1 | c0-b0 |
| ... | |||||
| t | c | b | b-c | d | (b-c)/d |
| t+1 | c' | b' | b'-c' | d'=d*(1+r/100) | (b'-c')/d' |
| ... | |||||
| NPV | - | - | - | - | SUM(column above) |
The above calculations should be done for every alternative. In theory the one with the best cost/benefit is chosen. If not then at least you know what the more expensive choice may have cost the enterprise.
You can also use the above table to calculate a Discounted ROI and discounted Break-Even figures that will be more pessimistic than the original.
In this course we will assume that the discount rate is constant in all projects -- but different projects or at different times may have different discount rates.
Notice the preliminary report develops easily from a less complex "Project Scope" document -- if you did one.
Once your Business Case has been accepted and the project approved you will have a lot of things to do to "kick off" the project. Here is a quick check list:
Here are some useful tools when modeling designs:
A very useful thing to say: "What I hear is ..." and then describe objectively and fairly what you've seen happening in the meeting: "Jim say A, but Joan says B."
Process:
Notes:
Inspection Process:
. . . . . . . . . ( end of section Tool -- Meetings) <<Contents | End>>
. . . . . . . . . ( end of section Initiating Projects) <<Contents | End>>
(1) you need a product or service, a way to advertise it, a way to deliver it, control systems, a way to scale up, ..., In other words: you need a Business Plan.
(2) A classic rule of thumb is that you must have enough money or credit to operate for 3 years without a profit!
Many years ago I looked into starting a business developing and selling games for the new "Personal Computers" that were coming on the market. When I analyzed the business model, I realized that piracy would be a gigantic drain on the company... in fact I'd have to spend more time and effort defending my intellectual property than developing (and playing) games. So, I decided to work for the UK Civil Service instead... and wrote a few games as a hobby.
When I started up a consulting company in the 1980s the two legal requirements were a bank account and an accounting system. This is for a California Sole Proprietorship. The bank account was easy. And I figured out that the old fashioned accounting system would be good enough. I used an old paper based accounting procedure based on a couple of books: a journal of credits and debits, a paste book of receipts and invoices, and a list of assets.
Some of following will be needed for any new company.
. . . . . . . . . ( end of section Development Strategies) <<Contents | End>>
The commonest techniques are the Walk-through and Inspection above.
The key steps are:
Black box tests are derived from the specification of the system under test not the finished code. They can be worked out before the code is written. The place to look for tests are the functional requirements. So system level tests should be derived from the scenarios and use cases for the system. Each test should be a particular scenario of the use case... and every scenario needs to be tested at least once.
White box tests
are written after examining the code and aim to exercise
every part of the code at least once.
Here is a list of the minimum set of white-box tests:
Performance testing. Here you input a particular load to the system under test and see how fast it handles it. For example you use a script to input 25 requests in a second to a PHP script and see how long it takes to complete them.
Basically you need to accept that you are going to have a lot of errors to fix because initially the tests won't even compile. But one test at a time you change the code until it compiles, and then change it until all the tests produce the correct result.
In class I demonstrated using the C/C++ 'assert' function from the <cassert> library. This is an excellent tool for writing programs that do unit tests. For example suppose we need to implement a class counter [ Counter.png ] we could write tests like this [ ttest.cpp ] and make the class Counter [ counter.cpp ] works as specified.
This technique scales well -- as the psolutions become more complex then the technique continues to work pretty well... especially when combined with better tools like make [ Makefile ] and/or an IDE like Eclipse. In Java there is JUnit...
Notice that the tests are a very good way to document typical ways to use the component.
. . . . . . . . . ( end of section Testing) <<Contents | End>>
. . . . . . . . . ( end of section Training) <<Contents | End>>
Garbage In; Garbage Out.is still true. So clean the data: review it, use programs to look for odd and bad data.
One thing to watch out for is different character codes. In my experience the 3 or 4 different code sequences used to indicate "end of line" is the most problematic. MacOS, UNIX, and MSWindows use different conventions.
Also watch out for the ASCII vs UNICODE vs EBCDIC(OLD) differences.
However most systems provide tools to convert codes, or you can write one or pervert an existing tool. For example, my MS WordPerfect automatically converts UNIX text to Windows text.
. . . . . . . . . ( end of section Data Conversion) <<Contents | End>>
| Name | Strategy | Cost | Risk | |
|---|---|---|---|---|
| Cut Over or Big Bang | The legacy system is shut down and the new system starts up and replaces it. | Lowest | Highest | 1 |
| Pilot Operation | A part of the enterprise uses the new system while the rest uses the old one. Once the bugs are removed the old is replaced by the new in the whole organization. | Medium | Medium | 2 |
| Phased Operations | Parts of the legacy system are replaced by new parts. | Medium | Medium | 3 |
| Parallel Operation | The legacy system is left running and the new one introduced. In time the old system is shutdown. | Highest | Lowest | 4 |
| - | Low Cost | Medium Cost | High Cost |
|---|---|---|---|
| Low Risk | - | - | 4 |
| Medium Risk | - | 2,3 | - |
| High Risk | 1 | - | - |
. . . . . . . . . ( end of section Installation plans and change over) <<Contents | End>>
. . . . . . . . . ( end of section Implementation) <<Contents | End>>
Analyse the project in terms of SPORTs and the development plan.
How could this money not have been wasted?
. . . . . . . . . ( end of section Online Exercises) <<Contents | End>>
. . . . . . . . . ( end of section Strategic Thinking) <<Contents | End>>
Notes -- Analysis [ a1.html ] [ a2.html ] [ a3.html ] [ a4.html ] [ a5.html ] -- Choices [ c1.html ] [ c2.html ] [ c3.html ] -- Data [ d1.html ] [ d2.html ] [ d3.html ] [ d4.html ] -- Rules [ r1.html ] [ r2.html ] [ r3.html ]
Projects [ project0.html ] [ project1.html ] [ project2.html ] [ project3.html ] [ project4.html ] [ project5.html ] [ projects.html ]
Field Trips [ F1.html ] [ F2.html ] [ F3.html ]
Metadata [ about.html ] [ index.html ] [ schedule.html ] [ syllabus.html ] [ readings.html ] [ review.html ] [ glossary.html ] [ contact.html ] [ grading/ ]