Skip to main content

skip to main content

developerWorks  >  Architecture  >

Manage the unmanageable

The importance of governance in the project life cycle

developerWorks
Document options

Document options requiring JavaScript are not displayed

Discuss


Rate this page

Help us improve this content


Level: Introductory

Danielle Ruest (architectures@reso-net.com), Senior IT Enterprise Architect (EITA), Resolutions Enterprises
Nelson Ruest (architectures@reso-net.com), Senior IT Enterprise Architect (EITA), Resolutions Enterprises

16 May 2006

Development -- whether internal or commercial -- is a cornerstone of IT. But if performed in an uncontrolled manner, the development process can result in a high-failure rate and become the bane of a project manager's existence. To reduce the risk of failure, organizations must move to a governance model for IT development -- a model that ensures that projects are controlled from start to finish and are always on track.

Introduction: Good development gone wrong

Software development projects are notorious for cost overruns, missed deadlines, and constantly changing scopes. Why is that? Why is it that when you set out to develop a product -- be it an operating system, a device driver, an internal application, or even just a Web page -- you can't seem to get programmers to deliver on time, on budget, and with the level of quality that can make you shine?

Of course, not all development projects run into these issues, so what makes them different? What makes them succeed? In many cases, these projects achieve their goals because of proper IT governance. Governance helps you lead and especially control the progress of development projects and keep them on track. Governance doesn't have to be onerous, nor is it monolithic. While there is no "magic" solution to proper governance of development projects, you can implement a key set of processes that will help alleviate the most common issues.



Back to top


Define your view of governance

Governance doesn't mean the same thing to all people. First, governance doesn't mean rigidity or, if it does, it's only as it applies to compliance to a process. Too many organizations use spur of the moment processes for development. If they use an internal process, they either stick to it too rigidly or not enough. Too much, meaning everyone sticks to the letter of the process, often concentrating on the wrong aspects and failing to focus on key factors that make the process work. Too little, and there's no direction to make sure that the right aspects of the process are covered at the right time.

No, effective governance means putting the right process in place and, if you need to, putting in the right tools to support this process. But, keep in mind that what's important here is the process itself. It must focus on the right activities at the right time, and rely on one main key factor: communication among all interested parties. Too many projects fail because no communication exists among all the interested parties.



Back to top


The ideal development process

So, what makes up the ideal development process? It should be in the form of a life cycle and include, at the very least, the following phases:

  • Project definition
  • Preparation
  • Development
  • Testing
  • Code maturation
  • Deployment
  • Support
  • Retirement

Project definition

This stage is probably the most important in the process, because it determines how the project will evolve. The key activities of this phase are the proper definition of the requirements as well as the determination of the project scope and budget. Interview skills are important here, as is the formal capture and reiteration of the requirements to stakeholders.

Keep the overall scope of a project as small as possible: Taking on massive development undertakings only leads to failure, because there are too many moving parts. Keep it simple, and you're much more likely to succeed. With the advent of service-oriented architectures (SOAs) and their reusable components, keeping project scopes smaller is much easier today that in the past.

Preparation

After you've defined all the key elements that make up the project, you can move to the preparation of the project. In this phase, you refine budgets, develop the teams that will be involved in the project, and assign their responsibilities. Ensure that communication channels are established among all team members.

Too many organizations make the mistake of involving only development team members at this stage, which leads to products that are ill-prepared for delivery to production environments and that will lack support, training, and any other nondevelopment mechanism required for their operation. Because several teams will be required to ensure high quality for the product, each one should have a representative in place at this time. Communication mechanisms should also include frequent feedback to stakeholders to ensure they are completely aware of both unforeseen challenges and successes as development proceeds.

Development

In this phase, you actually code the product. Today, many organizations are using geographically dispersed development teams, which can lead to scope creep unless, once again, proper communication channels are in place. The best way to approach this distributed development model is to ensure that your development tools support proper source management, providing both a single repository for the code you're working on and audit trails for who is working on what. In addition, you might include frequent code builds with checkpoints that help indicate overall project progress.

Testing

Testing begins after you start releasing core code components. Several levels of testing are required: unit, functional, integration, staging, pilot, and finally, production. Testing involves different team members from the developers themselves to end users who will provide acceptance for the final product.

One of the best ways to facilitate this process is to ensure that a strong dialog among technical and development teams. Many projects fail at this level, because developers discover that they need to code to environment specifications that were unknown to them. One excellent example is the difference between unit testing and integration testing. In unit tests, developers often test on their own computers, where they act as users with very high privileges and where few standards are implemented. After they get to the integration level, the code no longer works, because this level begins to provide the same standards found in production. It is therefore vital that a complete list of environmental specifications be provided to developers at a very early stage. Ideally, the same standards should be used at all levels of testing and development, ensuring that won't be any surprises as the product progresses through various testing cycles. The best way to achieve this is to use the same build process for development, production workstations, and servers.

Code maturation

Maturation is the integration of all aspects of the new product's functions into a single coherent component. If proper communication is implemented throughout the testing cycle, this phase becomes mostly perfunctory and focuses on minor corrections to documentation, installation instructions, support materials, and training tools. It also focuses on ensuring that the code is stable and can provide the level of reliability expected from the product. Versioning is important at this phase to ensure that all team members know which level of the product they should be working with.

Deployment

If a proper graduation process was used in the two previous phases, deployment is simply a matter of reiterating the same process, but on a grander scale. Feedback on all the deployment mechanisms should be provided through the pilot project. You can then make adjustments to ensure that the production deployment goes as smoothly as possible.

Support

Now that the product is in production, it enters its support and maintenance phase. Depending on the business value derived from the product, this phase can last much longer than any other. It involves the delivery of patches as unforeseen glitches are discovered, and additional requirements are defined. These requirements often arise from the use of the product: Users now discover that their needs have been changed because the product now supports processes that were not available to them before.

Retirement

After the business process, the product support changes (as is typically the case with today's fast pace of business), it becomes slated for retirement or replacement. This can take the form of the preparation and deployment of a completely different product or simply an upgrade to the existing version. In some cases, the whole process becomes obsolete, and the product must be completely retired from production. If the project's scope is properly defined in the beginning, this retirement will be planned and ordered.

This process is illustrated in Figure 1. For most development teams, this process may come as a surprise, as they tend to think that development ends with delivery to production. However, each product has a life cycle that doesn't end until retirement from production. A holistic view of this life cycle serves to add value and quality to products as they are prepared and delivered.


Figure 1. The development product life cycle
Development product life cycle


Back to top


Look to your peers

Governance is applied by ensuring compliance to this process for each development project. The Enterprise Information Technology Architect (EITA) is the ideal role for ensuring that compliance is met in all such projects. In fact, this should be one of the EITA's major responsibilities, along with the overview of communication processes among all interested team members and the documentation of all required architectures.

Another way to ensure that code is properly prepared and designed to meet expectations is to perform regular peer reviews throughout the entire life cycle. Peer reviews can occur at each level of the process and should include not only fellow developers but users, stakeholders, technical and support staff, as well as the EITA. This process can only help ensure the overall quality of the product, because it helps find defects early in the development process, allowing the development team to provide immediate corrections. Perform peer reviews often, and make sure that your development process provides the proper mechanisms for feedback to appropriate team members.



Back to top


Experience is the sum of your mistakes!

As you know, there's no magic solution to cost overruns, scope creep, or other development project failures, but process -- especially process that focuses on the right project factors -- can greatly alleviate these issues. You can see this in most projects.

Recently, our team was working on the delivery of a new application and its testing in a series of different environments prior to its release into production. As testing progressed, we discovered a number of issues with the operation of the application. One of the team members -- the official scribe for the team -- put together an e-mail message with all the remediation steps we performed to get the application working properly. The team member sent the message to the entire team, which included the developers who were in charge of preparing the next release. Two weeks went by before the next reinstallation was to occur. Once again, we ran into the same operational issues, and we had to dig to discover what was wrong.

The EITA suggested that we pull up the e-mail message that was sent after the last installation, and lo and behold, each resolution was documented in the message, but it turned out that the developer in charge of making these modifications had put the message away and ignored it because it only came from the scribe and not a more official team member. In short, an installation meeting that should have taken 10 minutes took more than five hours and involved several team members. The problem wasn't actually resolved until the EITA recalled that many of the issues we were seeing were already documented.

Each project you complete adds knowledge and expertise that helps you gain a better understanding of the overall process. Experience is the sum of your mistakes! Learn to rely on your teammates -- all of them. Governance is nothing more than making sure you use the proper course of action in your development projects and that you follow through on them. Often, it is only a matter of adjusting expectations -- not only those of your stakeholders but also of your developers and every other team member.



Resources

Learn

Get products and technologies
  • Build your next development project with IBM trial software, available for download directly from developerWorks.


Discuss


About the authors

Danielle Ruest

Danielle Ruest is a senior enterprise IT architect (EITA) focused on people and organizational issues for large IT projects. Danielle has been involved in the design and support of complex collaboration implementations, including deployment of technologies for e-mail, team sharing, and secure instant messaging. With her partner Nelson Ruest, she is the author of Preparing for .NET Enterprise Technologies, (Addison Wesley, 2001). and Windows Server 2003: Best Practices for Enterprise Deployments (McGraw-Hill Osborne, 2003) and participates in many webcasts and conferences. You can reach Danielle at architectures@reso-net.com


Nelson Ruest

Nelson Ruest is a senior enterprise IT architect (EITA) with more than 20 years of experience in migration planning and network, computer, server, and overall solution design (including MCSE, MCT, Microsoft MVP Windows Server). He has been a computer operator, a systems administrator, a trainer, a help desk operator, a support engineer, an IT manager, a project manager, and now, an IT architect. He was recently named a Microsoft Most Valuable Professional for the Windows Server product line. You can reach Nelson at architectures@reso-net.com.




Rate this page


Please take a moment to complete this form to help us better serve you.



YesNoDon't know
 


 


12345
Not
useful
Extremely
useful
 


Back to top