| The Software Development Cycle |
| Written by Sam Azer | |||||||
| Tuesday, 08 April 2008 | |||||||
|
When BNT Solutions was incorporated in 2001 there was one goal in particular that ran as a thread through everything that was done: simplify, simplify, simplify! Of course there are some things that, even though you try to keep them as simple as possible, are still going to be somewhat complicated. In these cases, the only solution is to Hold Hands with the customer as We Walk Through the Project Together. Towards that end, many documents were written and prepared over the years that try to help the customer to understand the How and Why of success in various areas. The Software Development Cycle is one of those documents. The on-time and on-budget delivery of a successful software project is not difficult to achieve but it's never an accident. The only way to build a software system successfully is to work together, taking all the necessary steps while following a solid and reliable process. This article is a big-picture overview of the Software Development Cycle as followed at BNT Solutions, Inc.
This is accomplished through the use of many short development cycles, each one consisting of four distinct phases: Evaluation, Design, Implementation and Testing. By keeping the cycles short, we can release early and often - the key to ensuring that our project meets the real and immediate needs of the end-users. Let's take a quick look at each phase in the SDC: EvaluationBefore starting our project, we prepared a roadmap showing where we wanted the project to go and how we wanted to get there. As such, the first development cycle doesn't include much of an evaluation. Still, it’s always a good idea to review the work that is planned for the future to see if there is anything we can do better. Subsequent cycles will also benefit from anything that was learned in the previous cycle. The results of our evaluation will be used to update the roadmap. The main purpose of this phase is to reduce costs and avoid problems. There are often many ways to complete a task. We want to review all our tasks, prioritize them, evaluate risk and find the simplest and easiest way of moving forward with each of part of the system. Improvements in the plan that are made in this phase might dramatically reduce costs throughout the project. If we find a simpler way of getting something done in this step, we will have saved the cost of the more complicated steps that we avoided. If we find a problem with our existing plan and correct it before the work begins, we will have saved the cost of implementing the buggy code, testing and correcting it. This can add up to a significant time and cost savings for each cycle and the overall project. DesignThe initial design stages of the project are devoted to the detailed analysis of the project requirements and the design of a plan that will meet them. Once we have verified that the design will meet the requirements as documented, we build a task list that the programmers can follow. Later design stages involve amending the long-term plans as a result of the decisions taken in the Evaluation Phase of the cycle. Once we have amended our long-term plans, we are able to update our design and amend our task list. Note that the level of communication with you, the customer, may be reduced during the Design, Implementation and Testing phases in the cycle. You, of course, are still thinking about the project. You get all sorts of great ideas and you discuss them with your colleagues. It would be a problem, though, to stop the implementation work and revisit the Evaluation and Design phases of a cycle whenever new ideas are proposed - the software development team wouldn't be able to get anything done if that were allowed to happen. So, at this stage in the process, the software development team begins working on the conclusions from the Evaluation phase of the current cycle. Everything you discuss with your colleagues - even if you discuss it with the Project Managers - will have to wait until the next Evaluation cycle before it can be evaluated, incorporated into the requirements, analyzed, prioritized and designed. In practice, most projects get into trouble from time to time in the Design and Implementation phases of a cycle. This is usually because the stakeholders lack the discipline necessary to allow the development team to complete a cycle. It takes time for customers to learn just how easy it is to get everything they want and to understand and know that anything that they think of can be done - but only if some of the things that they want to do are allowed to be completed. Note that, on the flip-side: projects that have numerous completed development cycles behind them are able to incorporate new ideas quickly! Getting back to the amended task list: RiskAny new tasks on the task list must be evaluated for risk. Some tasks, as designed, are too complicated or might lead to future problems:
Such tasks must be redesigned to eliminate the unwanted risks. ScheduleNext, we need to prioritize the tasks remaining in our project. We need to determine what we want to do next. From the prioritized task list we need to pick enough of those tasks to fill up the anticipated development time for this cycle. Here we estimate man-days of work per task and divide it among the developers in the team. The idea here is to make sure that we don't try to do too much in the current cycle. We want to have something useful to show for our work without spending too many weeks between reviews and evaluations. This step is also designed to ensure that the current cycle will result in something that we can look at. Hopefully it will be something that can be released to the users so that they can offer some practical feedback. ImplementationOnce a short list of prioritized tasks has been assigned to the development team for this cycle, they start coding. At the same time, the Quality Assurance team is able to review the task list and prepare Test Plans that will be used, once coding is completed, to determine if the software works as expected. Although this phase appears in the charts and diagrams as being the same size as the other phases, Implementation is often the longest phase in the overall cycle. FAQ
Testing & ReviewIn this phase the developers tag the completed modules as being ready for testing and copy their product to a testing sandbox so that the Quality Assurance staff can execute the test plans that were written/updated during the development phase of the cycle. After each test execution, a meeting is held to review the bugs that were found and prioritize them. The developers then fix the prioritized bugs and the tests are executed again. These test-fix cycles continue until the product is stable. Once a stable product is ready for User testing, the developers tag the completed modules and copy their product to a sandbox that is accessible to the users. Not all users will test this product. The Project Manager will find a few Power Users who will take the time to review the software and report their conclusions. They might also log bugs into the bug tracking system which will be reviewed and most likely fixed by the development team (after being prioritized.) ExpectationsRemember that, during the Design and Implementation phases, the customers were discussing all sorts of great ideas between themselves - but the development team is not working on any of these ideas. It is very important to manage the expectations of the customers who see the software in this phase. Customers who will be involved in testing must understand that they will be looking at the results of the last Evaluation Phase. To maintain end-user buy-in for the project, it is important that the users have a clear picture in their minds of what has been done with the ideas that they've been discussing. In practice their ideas may not have been passed along to the Project Manager - so the development team is often limited in their ability to discuss specific new ideas and how they are being integrated into future cycles. Nevertheless, the customers need to know that their ideas have been documented and will be considered. End-users need to have a clear idea of what they will be testing in the current phase of the software development cycle. In later cycles, after the stakeholders have experienced a few cycles of regular software releases, expectations will become a much less important issue - everybody will know that their ideas will be passed along to the development team during the Evaluation phase in a future cycle and not the current one. Failure to manage these expectations can result in a situation where the Design and Implementation phases of the current cycle are revisited without completing the current cycle. This prevents the building of a solid foundation on which the project can grow successfully. Over time, development will continue but there will be no way to determine if the project meets the real needs of the end-users. Perceived needs will be met but at a cost which can't be evaluated relative to the real value of the features produced. This stretching of the Implementation phase can seriously threaten the success of the project overall. Acceptance TestingIf this cycle is expected to produce a result which is intended to satisfy a contractual obligation, a special test is executed. This test, called an Acceptance Test, contains only test steps designed to verify that the software meets the contractual obligation. Acceptance tests are usually simple and quick to execute. They are far less detailed than the majority of tests that are performed before the acceptance step. The customer may already have been using the software for some time prior to the acceptance test and is already prepared to accept the software. Therefore, the acceptance test is often omitted if the customer signs an acceptance statement or approves the software for release to a production server. Go No-Go ApprovalIf this cycle is expected to produce a result which is to be posted to a production server, formal approval of the posting is required from the customer. To obtain this approval a Go-No-Go meeting is held. During this meeting the heads of any departments affected by the release of the software will review all bugs remaining in the Bug Tracking System. Department heads will be able to query the development team leaders to ensure that everybody has a clear idea of the risks, if any, involved in making the release. If all department heads approve the release, the package can be installed on the production server. Otherwise, the various managers must decide what they want to do and take action to ensure that it is done. Unfortunately, many Go-No-Go meetings result in the software being approved but the release being deferred. There are many reasons for this:
Regardless of the results of a Go-No-Go meeting, the development team can simply branch the software in the Revision Control System and move forward with the Evaluation Phase of the next cycle. When the next Go-No-Go meeting is called, the software will still be available for posting to production. At this point, we know that we have a solid product in our hands. It does what the customer wants it to do and it works correctly - thereby meeting the two main objectives of the Software Engineering process. When we start writing additional software, we know we won't have any problems with the software we've written already; we are confident that the work will go smoothly as we will be building on a solid foundation. Finally, we close this Software Development Cycle with a review of the work that has been done in the current cycle. Are we on track? Did we learn anything in this cycle that we need to incorporate into our future cycles (good or bad?) Is there anything we need to change in our Project Roadmap? Following this review, we start the Evaluation Phase of the next cycle and repeat these steps again. SummaryThe Software Development Cycle is critical to the success of any software project. By properly performing the simple steps involved in this process, we can ensure the successful completion, on-time and on-budget, of our project. Each iteration in the cycle can produce not only a useful result, but also an understanding of any disparity that exists between the real needs of the user community and the project being implemented. If it becomes necessary to change course at some stage in the project, the mass of work that will be affected is limited to whatever was done in previous cycles - not the whole project. Most importantly, customers can exercise precise control over the process, especially during the Evaluation and Design phases. Any stakeholder or member of the user community can make suggestions which will be added to the task tracking system. These suggestions, called Enhancement Requests, will be prioritized by the Project Manager. The Lead Developer for the project can then determine how much the change will cost. During the Evaluation and Design phases of a SDC, the various Project Managers can decide if they want to include the enhancement work in the next cycle or not. The same is also true for tasks that are planned: The Project Manager can delay or cancel them altogether as per the needs of the project. In all cases, the consequences of these actions can be determined prior to the start of the implementation phase so that the project manager is able to make the best possible use of the time allotted to the cycle. ![]() FAQ
|
|||||||