12
Four Special Topics

  1. (a) Congratulations! You have won a competition for a new engineering project. How do you go about getting this new project started? Starting a new project turns out to be a special problem that requires a special set of skills, which I will teach you in this chapter.
  2. (b) Most systems today have large amounts of software, which provides particular benefits, but creates many particular liabilities and risks too. I show you how to deal with projects that involve large amounts of software development.
  3. (c) People will come and ask if you are going to use agile software development methods on your project. I show you some of the key differences between agile and conventional development methodologies, how to decide if your project is suitable for agile methods, and how to cope with some of the most common risks and weaknesses of the agile methods.
  4. (d) Projects are defined as temporary activities, so every project ends. I tell you what you need to do to end a project.

12.1 Launching Your Project

12.1.1 The Project Start‐Up Process

Any new work assignment is interesting and difficult. For example, to take over – and run effectively – a project that is already underway and doing well is a difficult task. You have people to meet, many things to learn, yet the project's schedule advances every day, whether you are up‐to‐speed yet or not.

It is, however, far more “interesting” and difficult to start a big engineering project from scratch. Even though every project is different, I believe that there are a set of common themes that need to be addressed when starting a new engineering project. So, in this section, we will discuss how to go about getting a new engineering project started.

Back in Chapter 5, we discussed how to go about writing a winning proposal for an engineering project. Because you were paying attention, you have now actually won a competition for a new engineering project. Congratulations!

How do you go about getting your project started? The project may call for 300 people, but you had only 50 people working on the proposal with you. Furthermore, since you turned the proposal in to the customer for their competitive evaluation nine months ago, 40 of those people have gone off to work on other assignments; only 10 of the people who worked on the proposal with you are still working with you by the day of the announcement that your company has won the competition. How ought you to proceed?

First of all, there are a set of things that have to be selected or created, and somehow brought into being:

  • A set of people, and some sort of organization
  • Facilities and infrastructure
  • A set of processes that define how certain things get done (e.g. who has the authority to purchase something, and how does that get accomplished?)
  • Tools and methods, together with instruction and training
  • … and many more.

Most of these have to be created essentially simultaneously. But they are not independent; there are likely linkages between them. Here's an example:

  • You need to recruit a large number of people to come and work on your project; remember, we said that you have 10 people today, but in just a few weeks, you need to have 300.
  • Generally, you recruit people by offering them a particular role on the project. This implies that those roles are already defined. Those people, before they accept the position, probably also want to know something about the organizational structure into which that role fits. This implies that the organizational structure too must already be defined.
  • But you need help from other people in order to define all of those roles – you cannot write all those job descriptions yourself – and to define the organizational structure into which all of those roles will fit.
  • Furthermore, at times, you will want to create the organizational structure around the skills/weaknesses of a particular person (including yourself!).

This would appear to say that you cannot recruit the people without having already defined the roles and the organizational structure, but also that you cannot define the roles and the organizational structure without having already obtained the services of some of those people. This sounds like a circular dependency, a Gordian knot. How do we break out of this apparent dilemma?

You start by creating a list of topics for which you need plans and initial preparation. Figure 12.1 shows a candidate set of project start‐up topics, which I provide in order to give you an idea of what you might need for your project.

Illustration listing out a candidate set of project start-up topics that need plans and initial preparation.

Figure 12.1 A candidate set of project start‐up topics.

That's a long list. No one can memorize even the top‐level concepts for all of these topics. So, you need to write down your approach for each of these topics. We call such a written document a plan. It doesn't really matter whether you create a separate document for each topic, or combine all of the topics into a single document. On bigger projects, each topic is likely to have a separate author (or a small team), and most project managers find it easier to coordinate the work of preparing and reviewing these plans if the item produced by each author is a stand‐alone document.

Of course, you need people to help you write all of these plans; you can't do it all yourself. But they some need guidance from you: how do you want to organize and operate the project?

Therefore, you and a small cadre of associates need to create – and document in writing – a set of top‐level strategies and approaches for everything. Then you can bring on additional people to start flushing those strategies out into actionable plans. You will need to interact with them almost daily to help them create what you need. I might schedule 15‐minute meetings with plan authors every two days during the early portions of the plan preparation, concentrating on strategy, key decisions, and a few key tables and graphics that capture our emerging decisions.

Most likely, your company actually has a library that can provide you and your authors with outlines for most of these plans, and that library probably also has examples of each type of plan that was produced by a previous project. The outlines are useful; in my view, however, using the previous complete example artifacts can sometimes bog your authors down in too much detail. I prefer that my authors just work from the outlines.

You will need to prepare some of these plans for your proposal, in order to convince your customers that you have a credible approach. Also, the specificity of these plans allows you to develop cost estimates for implementing each of these start‐up activities, which you need for the proposal. But it is likely that these proposal versions of the plans do not cover every topic, nor are they sufficiently detailed. Because of this, your team is likely to need to do some additional planning as the date of the anticipated contract award approaches.

Of course, writing a plan does not finish the job; it is just telling us what we need to set up for our project. Each plan needs to be implemented; the implementation can often wait until after you win and sign the contract.

For example, engineering projects need infrastructure:

  • Electronic mail
  • Directories of project personnel
  • Desktop and/or laptop computers, with the appropriate software and network connections
  • Security tools
  • Financial reporting tools
  • Schedule reporting tools
  • Tools for other routine aspects of business: timecards, status reports
  • Technical tools, for systems engineering, requirements management, software development, etc.
  • … and so forth.

You might be able to “inherit” some of this from your company, but likely much of it will need tailoring and adaptation (e.g. your company's email system does not include directories of customers and subcontractors, and in order to protect the company's network against intrusions and hackers, they likely place various limits on the use of these systems by non‐employees), and some of it will be new. Your customer might have requirements in the contract about particular tools that they require you use: they might want you to use LaTex or Open Office for the creation of documents; they might require that you use a particular programming language and a particular compiler for that language; and so forth. Even if your company is going to provide this infrastructure, someone from your team needs to determine exactly in what configuration, how many, which rooms each item is to be installed in, and so forth. This all needs to be planned, items purchased, the financial aspects considered, the appropriate purchasing procedures followed, and so forth. Without some written guidance – the plan we talked about above – it can't be done.

On a big project (or even on a small project inside a big company), every task needs a written process. How do orders for computers get placed with a vendor? How do people record their weekly work time, so that they can be paid properly? Who is authorized to approve which type of expenditures? How do we move and store materials in a way that does not damage them, and is also safe? As you can see, a large portion of the items in Figure 12.1 address this aspect of the start‐up challenge.

You will actually need more than a written process telling you how to do something too. For each work process, you will also need:

  • Some sort of training program, so that people can learn about the existence of the process, and how to use it.
  • A set of tools for implementing the process. These might be as simple as on‐line forms, or complex software that performs some task relating to the process, or the tools could take many other forms. They might even be hardware tools: wrenches and so forth.
  • Some sort of a database: who needs to be trained, who has been trained, and so forth.
  • Some sort of an enforcement program; for example, if a process requires that people receive annual training in a subject, you must have some mechanism that verifies this is being done.

Here's an example. If you (or the customer) have a requirement that a particular construct in the chosen programming language not be used (this is actually fairly common), you must:

  • Have a policy that documents this
  • Have a mechanism to disseminate that policy
  • Have a way to train your people about the policy
  • Have tools and processes that audit software code turned into the project library for compliance
  • Have a process to notify those whose code did not comply, and to track their corrective actions to completion
  • Have a mechanism to track how often each person fails to comply, so that you can have a plan for retraining, or even discipline, if a given person is a repeat offender.

Since you are starting the project, you must create/borrow/steal/adapt this process, and all of those supporting steps, into being.

And then, of course, you must do that for every item on your list (e.g. your own version of Figure 12.1).

The list provided in Figure 12.1 is fairly generic, but your project might need some processes or tools that are very specific to the goals of that project. For example, when we built the world's first complete laser weapon, it involved crane operations; many of the pieces were simply too big and too heavy to be moved and placed by hand (Figure 12.2). But some of these heavy pieces had optics, mirrors, and other fragile components, so the crane operations required a balance of capacity, safety, and not over‐stressing the fragile components. This combination, however, was different from what the company's crane operators normally did; they had not worked in the past with heavy parts that also had large, fragile, glass components. We discovered that we had to create new processes and procedures for crane operations on these components. Your project too will likely have some unique aspects that will require such novel processes and procedures.

Photograph of Tactical High-Energy Laser, the world's first complete laser weapon comprised of heavy pieces of optics, mirrors, and other fragile components.

Figure 12.2 The Tactical High‐Energy Laser, the world's first complete laser weapon.

Source: The photo is by the US Army, and was released by them into the public domain.

Good companies should have project start‐up procedures, check lists, and teams of people who will come in on a temporary basis and help you get the project start‐up defined and accomplished (project start‐up teams). To give you an idea of the magnitude of project start‐up, on a big project, start‐up can be a three‐ to four‐month task.

Figure 12.3 depicts an excerpt from an actual project start‐up check list, as used by an actual company.1 The complete list is 10 pages long; I just want you to get an idea of the level of detail that a good project start‐up check list will include.

Illustration depicting an excerpt from an actual project start-up check list, as used by an actual company for setting up a project.

Figure 12.3 An excerpt from an actual project start‐up check list.

12.1.2 The Earned‐Value Baseline: A Special Project Start‐Up Task

We talked about earned value, and the creation of the schedule and cost estimates in Chapter 7. One special aspect of starting a project is the creation of a special version of those schedule and cost predictions, which is called the baseline.

You create, as we described in Chapter 7, an initial version of these predictions during the proposal activity. You use this version to obtain approval from your company to submit the bid to the customer, and of course you also provide this version to the customer as part of your proposal.

That initial version of the schedule and cost predictions is good enough for those purposes, but is seldom detailed enough actually to use in order to manage the project. Since at the time you prepare them, you don't know yet if you are going to win the competition or not, it may not be worth the effort and money to create them at that level of detail during the proposal. You probably don't have enough people available during the proposal to create schedule and cost estimates at that level of detail, anyway.

Therefore, right after you win the competition and sign the contract, you have to create a second version of the schedule and cost predictions, one that this time will be sufficiently detailed to use in order to manage the project. We call this second version – the one that we will actually use to manage the project, following the procedures of Chapters 10 and 11 – the baseline. We use that term because it is the base set of values and measurements against which we write the schedule and cost variances described in Chapters 10 and 11.

There is another reason to create this second version too: as discussed in Chapters 7 and 10, the schedule and cost predictions are worthless if each little piece is not created (and psychologically “owned”) by the actual cost‐account manager who is responsible for that piece of the work. But many of these people do not show up until after the contract is signed; remember, we discussed how the team that writes the proposal is likely much smaller than the team that will actually do the work, once we win the competition. So, it is important to allow the actual cost‐account managers to prepare the schedule and cost predictions that will be used to manage the project (which will be accomplished using the methods described in Chapter 10).

But what if these new predictions are different from the previous predictions? After all, your company actually signed a contract based on the proposal version of those predictions. Well you, as the project manager, have the challenge of trying to negotiate with the actual cost‐account managers to try to get the baseline version of these estimates to fit within the constraints of the proposal version. You may not succeed, in which case you will be starting the project “in the hole” in schedule and/or cost.

Since each cost‐account manager must “psychologically own” the result, they must generate bottom‐up estimates in which they believe, while “noticing” the top‐down guidance that you have provided (in the form of the prediction for that cost account from the proposal version of the predictions). You must therefore negotiate with each of them, clarifying/reducing scope, so that they end up as close as they can to your top‐down guidance … while still believing in the baseline predictions to which they commit.

Some cost‐account managers will meet your top‐down guidance, some will not. You must try to make it all balance at the project level. But do not “force” them to agree to numbers in which they do not believe! That always leads to later failure.

So, you and the team get to do the schedule and cost predictions all over again – and in far more detail – right after you win (in order to create this baseline version).

It is often the case (and always the case if your contract is with the US Government) that people from outside your project team will actually come in and audit your new baseline, to see if you and the team did it right; that is, that your baseline is both procedurally correct and faithfully represents the requirements for the project as defined in the contract.

Passing this audit is often both a company and a contractual requirement. Your financial staff will know how to pass this audit. Not passing the audit the first time is a sure way to annoy your customer and your management. My advice is to ask for help from corporate personnel that have done this before!

Note that when you pass the audit, you likely will “pass with findings.” This means that there are some things that the auditors think are incorrect or non‐compliant in your baseline, but the auditors also believe that these can easily be fixed. In this case, you fix those items, write a memo describing what you did for each, and submit that memo to the auditors. If they are then satisfied, they will send you a letter saying that you have now resolved all of the issues that arose out of audit, and your baseline is approved. This counts as passing the audit the first time.

Even if your contract is not with the US Government, you probably still have to conduct and pass this audit. This is because many non‐US‐Government contracting agencies have adopted similar audit requirements, and also because many companies now require such an audit, even if the contracting authority does not.

In Chapters 10 and 11, I described a process by which we update the schedule and cost predictions every month, and write variance analyses in which we compare the set of recent schedule and cost predictions from the previous several months (so that we have a time series) to our baseline. In Chapters 10 and 11, I did not describe the process which created the baseline; you may have thought that the baseline was the version of the schedule and cost predictions that was created during the proposal. In the discussion above, however, I have now made it clear that the proposal‐time version of the schedule and cost predictions is not the baseline, but instead the baseline is that version created immediately after you win the competition and sign the contract. You are usually allowed three or four months after the award of your contract to establish the schedule and cost baseline, and to pass the audit; this deadline will likely be specified in your contract, or in your corporate policy manuals.

Of course, you cannot execute the process described in Chapters 10 and 11 – of doing monthly updates to the baseline schedule and cost predictions – until after you have established the baseline. So, you don't actually start the processes of Chapters 10 and 11 until after you complete the baseline.

You do not, however, need to wait until you pass the audit to start the processes of Chapters 10 and 11. Those monthly updates can start as soon as you have a baseline, even while you are preparing for and conducting the audit, and correcting any deficiencies found during the audit.

12.1.3 Preparing to Operate at a Large Scale

One of the biggest challenges of running a big engineering project is operating at a large scale. You have people who must be recruited, trained, and aligned (Chapter 13). You have tasks and deliverable products. You have a complicated activity network that represents the schedule. You need processes and plans. You have stakeholders that have opinions, and demand attention. You need an organizational structure that makes it clear what each person and each subteam is responsible for. You need a way to monitor progress, and to notice if someone is falling behind. You need a way to help those people who are having trouble or falling behind. You need to know on what you need to spend your own time, and what you must delegate. All of this requires planning and thought, and ends up being documented in project procedures, processes, policies, and directives, and implemented via tools and training. The project start‐up procedures described in this section are intended to establish the infrastructure that will get you ready to operate at such large scale.

A special aspect for you, as project manager, on preparing to operate at large scale is the question of what tasks you should spend your own time on. We answered a portion of that question in Chapter 11: you participate in the periodic management rhythm.

But a large portion of your time is not so determinate. People will want and/or need to see you, both because of planned, but also because of unplanned, occurrences. Your daily calendar will be scheduled in 30‐minute meetings, for the entire 10‐hour work day. Most of these people will be asking for a decision. You must learn when to decide on the spot, and when to say “let me think about this for a day or two,” so that you can gather some additional data, consult with others, and just think about it. You cannot dither, but you must make good decisions. In addition, it can be valuable to instill (through your example) in your team members the notion of thinking carefully before deciding.

What you will learn is that often, your only decision variable, your only degree of freedom in making such a decision, is “who can I assign to go and fix this problem?” So, you need to build up a list of people you consider trustworthy … and be constantly on the look‐out for new people you can add to the list. This is a big part of the social benefit of the periodic management rhythm process that we described in Chapter 11; you get to see members of your staff in action, and can figure out who is ready to become one of your set of problem‐solvers. You should make it clear through actions that successful problem‐solvers are rewarded, both financially, through recognition, and through promotions and choice assignments.

12.1.4 Summary for Starting a Project

  • Starting a project is fun, interesting, stressful, and a lot of work.
  • You have great freedom to design the project's operations to be the way you want.
  • All projects require plans, infrastructure, and processes; on big projects, the scale of these items is very significant.
  • As the project manager, you have to see to the creation of all of these items.
  • A special task is the creation of the schedule and cost baselines, and getting through the corresponding auditing process.
  • You will need a start‐up checklist, and a set of people whose full‐time job is to get all of those start‐up tasks completed.
  • Your company likely has outlines and example artifacts of the plans that you will need to create.
  • Projects usually operate at a large scale, and the start‐up process is where the foundations for the capacity to operate at a large scale are developed.

12.2 Systems and Projects With Large Amounts of Software

Most systems today have large amounts of software in them. Cars, airplanes, elevators, telephones, washing machines, and almost everything else contain staggering amounts of software. A modern car is reported to contain 200 000 000 lines of software code. Your laptop computer has even more. Your phone – with all of the useful applications that you have loaded onto it – likely has several tens of millions of lines of software code, all in the palm of your hand.

12.2.1 The Benefits

There are good reasons for this: software turns out to be a mechanism by which we can implement desirable functionality into our systems. It also allows us to improve our systems after we deploy them, by loading new and (presumably) improved software onto them. We can even add functions to our system that we did not envision when we built the system. Think of all those useful applications on your phone: many of them did not exist when the phone was designed and manufactured.

12.2.2 The Problems

What comes, however, to the mind of many engineering project managers when they think about software is software as a source of problems. When an engineering project is late or over budget, it is all too frequently the case that software is the portion of the work‐breakdown structure where these problems arise. It is not unheard of for projects that entail a large amount of software development to end up taking three times as long as originally planned – and be five times over budget. Some projects without software can have larger schedule and cost over‐runs too, but projects with large amounts of software seem especially at risk for this problem.

We might be tempted to say that this must be a problem with the original estimation of schedule and cost for the software. No one apparently even tried to create a methodology for estimating the schedule and cost of software until the 1970s, when Dr. Barry Boehm of TRW (now at the University of Southern California2) started working on creating systematic methods for estimating the magnitude of a software development effort, both in terms of time (schedule) and cost.

Dr. Boehm likes to tell a story about how he came to work on this problem. In the early 1970s, TRW was getting ready to submit a proposal to a customer to build a satellite. At the final review of the cost before submitting the proposal, the experts from each segment – structure, power generation and distribution, sensors, and so forth – stood up and presented the estimation methodology for their segment of the project. The software team stood up and said “this is our estimate,” but had no rationale for how they arrived at the numbers, or why that might be a credible estimate or not. Dr. Walquist, the executive reviewing the bid, pulled Dr. Boehm aside after the meeting and said “I don't want ever to have to make a bid that includes software again until we have a credible method to estimate the schedule and cost of that software. Go and create such a method.”

Certainly, having no systematic method for estimating the time duration and cost of a software project is not a happy situation for a company that must make a bid for an engineering project that includes large amounts of software. Thanks to Dr. Boehm (and to the others who have since created similar estimation models for software), we now have estimation models, but like all other models and estimates, they are imperfect. The desire to win the bid, of course, always creates a temptation to be optimistic in these estimates, which probably reduces their credibility even further.

Having read Chapter 2, you can provide a more sophisticated, additional answer about why software projects are often late and over budget: with so many lines of code, the opportunity for unplanned dynamic behavior is very large. Having read Chapter 9, you can then improve this answer by pointing out that the entries on the project's risk register about what could go wrong with the software development are often superficial. And having read Chapter 8, you can conclude by pointing out that the measurements and analysis that we use to monitor the technical performance of the software are subject to all of the errors and misinterpretations that we discussed in that chapter.

12.2.2.1 Scale

Many of these problems derive from scale. Those 200 000 000 lines of software code in your car are in many ways like having 200 000 000 separate parts. In contrast, I read somewhere that the Apollo moon rocket at take‐off – the booster, the cabin for the crew, the module that landed on the moon, the equipment that kept the three astronauts alive and guided their return to Earth, and everything else – was comprised of just a few hundred thousand parts. This means that each new BMW on the road today has something like 1000 times as many parts as did the Apollo moon rocket.

Humans are imperfect, so there remain latent defects in all of our creations. In a creation that contains 200 000 000 parts, there will be a large number of such latent defects. A latent defect rate considered typical for software is one such latent defect per 1000 lines of software code. For a human creation, one error per 1000 steps sounds pretty good. But this means that there are likely to be 200 000 latent defects from the software in that car which has 200 000 000 lines of software code! Of course, the mechanical and electrical portions of the car will have latent defects too.

Latent defects are those errors that remain in the product after we deliver the product to the customer. Of course, through the integration and test activities described in Chapter 3, we endeavor to find and fix all such defects before we deliver the system. In general, if a system has more lines of software code, it will contain more defects upon completion of the coding, and it will take more time and money to try to find and remove some reasonable portion of these before we deliver the system. But there will still be defects that remain after delivery; on average, at that one latent defect per 1000 lines of code rate that I cited above. So, systems that have more lines of software likely have more latent defects, just due to the linear increase in the number of lines of software code they contain. But it gets worse: in addition, there are data which indicate that systems containing more lines of software code usually have higher defect rates, both at the end of software coding and upon delivery (e.g. latent defects). That is, scale makes this problem worse, and therefore, as our systems contain ever larger numbers of lines of software code, the average latent defect rate likely increases. The effort to remove a reasonable number of these before delivery therefore increases as a percentage of the total effort. Scale, all by itself, increases the cost per line of software code.

There is another effect that makes software “parts” more prone to problems than hardware parts, in addition to their sheer quantity: they are likely to be more densely interconnected. In principle, any line of software code can call to any other line of software code; there is no inherent limit on such interconnections. This is part of what makes predicting unplanned dynamic behavior in software so difficult. In contrast, the potential interactions between hardware components are far more limited than those for software. For example, electronic devices are connected by wires only to a small subset of the total number of electronic devices in a chip or system; mechanical parts are connected only to adjacent mechanical parts.3 Because of the explicitness of the interactions, and the far smaller number of potential interactions, it is far easier to envision and correct for sources on unplanned dynamic behavior in hardware components than it is in software components.

So, the sheer scale of the software that we put into our engineered systems today creates problems that contribute to software development projects taking longer and costing more than planned.

12.2.3 Lessons Learned for the Project Manager About Software

Your team will want to be optimistic in their estimation of schedule and cost for the software; they want to win the bid. You must drive them to realism, by grounding the estimates in past rates of software productivity. You do this with the top‐down parametric estimation techniques discussed in Chapter 7, under the heading “Injecting realism into our estimates.”

In today's systems, software is where most of the adverse unplanned dynamic behavior (discussed in Chapter 2) comes from. This is, in my experience, where most of the schedule and cost problems for software originate; optimistic and unrealistic original estimates are only the second most important contributing factor. This is why I focus so much on the goodness of the design, and provide you with tools and methods both to create better software designs (Chapter 2) and to monitor the risk (Chapter 9) and progress (Chapters 10 and 11) of the software development effort within the project.

Software gets behind schedule and over cost to a shocking degree; often not just a few percent, but actual entire multiples (2×, 3×, 5×, 10×, and more). The two main causes are those cited above: (i) adverse unplanned dynamic behavior and (ii) unrealistically optimistic initial schedule and cost estimates.

Software has the ability to multiply its adverse effect on schedule and cost too. If your software is late, you may have to keep other project personnel around until the software team finishes. If you are building an airplane, if the software is years late, you have to keep the hardware designers, the engine designers, the testers, the human factors personnel, the safety personnel, the project finance personnel, and many others around, so that they can participate in integration, testing, and training after the software is finally delivered. Therefore, not only do you have to pay for the extra costs of the software, you also incur additional extra costs in order to keep your access to all of these other personnel. This multiplicative aspect – sometimes called the marching army effect – is often overlooked.

It is very tempting to your team, and to the customer, to expect that you can reuse existing software from other projects on your project. Of course you can, but experience repeatedly shows that this reuse seldom works nearly as well as expected. This reused software can require subtle adaptations in order to be suitable for your project, and it is easy to underestimate dramatically the complexity, difficulty, and therefore the time and expense of making these modifications. This is a place where looking at your company's historic archive of project activities will be helpful: you will discover that many previous projects suffered significant schedule and cost over‐runs as a result of problems with their planned level of software reuse. You can use these data to lessen your project's predictions of credible software reuse to more realistic levels.

It is also very tempting to buy software products on the market that seem to be able to perform some significant aspect of your project's mission. There is a significant risk in this, however: there is often a major discrepancy between the capabilities and levels of performance claimed for these products, and those actually provided. By all means try to make use of purchased software components in your system design, but never depend on the claims of the manufacturer. Always get the software and experiment with it yourself before committing to it in your design. Benchmark its capabilities and performance yourself; do not depend on data from the manufacturer. Try out the interfaces, data‐importing, and data‐exporting capabilities. Set up a test bed that mirrors your operational conditions, and measure achieved performance rates under those conditions. For software, seemingly small differences in operating conditions can result in a 10× (or more) difference in performance and capacity!

To some extent, this is true for anything that you buy: what the manufacturer promises, and what the product actually delivers, may be different. But the magnitude of the discrepancies between promises and delivered capabilities seems generally to be larger for software than for other purchased components.

Another, related problem is that when you buy software, you cannot control when problems get fixed, which ones get fixed first, and which ones get deferred. Neither can you control when new features get added, and in what order. Vendors who build software are often serving gigantic markets, and are often unwilling to adapt their plans to the needs of a single customer, even for a single customer as large as the entire US Government. My experience is that the large software vendors will not adapt their plans at all, in response to requests from even a large customer. Beware! They may say that they will be responsive to your needs, but unless such commitments are spelled out explicitly in your purchase order with that vendor, they have the ability to ignore such promises.

There is another, often under‐utilized source of software: something called open‐source software. Open‐source software is, as its name implies, software where the source code is made available to customers. You may not realize this, but when you buy software from a commercial vendor, almost all of the time you get only executable software code, not the source code. Not having the source code of the software that you buy means that you have no ability to diagnose problems, to correct those problems, or to add new features to that software; only the manufacturer can do that. It may even be illegal4 for you to try to do so. With open‐source software, since you are provided with the source code, you do have the ability to diagnose problems, correct those problems, and add new features (and the ability to decide when to do these things). You can also analyze that software. For example, you can analyze it for security vulnerabilities. When you buy commercial software, you have little to no ability to analyze that software; again, it may be illegal even for you to try to do so.

Note that when you use open‐source software, you may be required to contribute any improvements that you make back into the open‐source library. This will allow other organizations, even your competitors, to be able to benefit from those improvements! Open‐source software is not for everyone.

Open‐source software is often free, or priced very low, compared to commercial software. As I said, it may not be the answer for every software development need, but in my experience, open‐source software is often overlooked as a resource for your project. Just to give you the perspective from some actual data, at one point in time, my former company used on average about 100 open‐source packages (some large, most small) in every software‐intensive system that we delivered.

Software is intellectual property, and therefore comes with intellectual property and license provisions, whether it is commercial software or open‐source software. Beware: the specifics of these provisions vary fantastically from case to case. Never make assumptions about what the license terms for software are likely to require. Always have your legal staff review these provisions before you purchase commercial software, or before you decide to adopt open‐source software.

Since you are likely to be using both commercial and open‐source software on your project, you need to have someone keep careful track of these intellectual property and license provisions, keep appropriate records, and make sure that your project's planned use complies with the intellectual property provisions and license terms.

Just because the customer asks you to do something, that does not make it either possible or legal. I have seen government contracts that required the delivery of source code for all software, even purchased software. As noted above, when you purchase software, you almost never get the source code, so of course you cannot sign a contract that obliges you to deliver that source code. Similarly, I have seen contracts that required a particular piece of open‐source software be used, even though the license terms for that open‐source software prohibited such use.5 You cannot sign a contract that requires you to violate the terms of a license agreement; even the government (at least, not in the United States) cannot authorize your company to do that.

For that matter, your company probably creates intellectual property and licensing provisions on the software that your project develops and delivers to your customers. These need to be in compliance with the terms of your contract too. Do not overlook the potential for intellectual property and license provisions to be a potential competitive differentiator in a competition to win the contract for an engineering project; at times, customers react very positively to offers that provide them with generous intellectual property and software licensing terms.

Patents are treated slightly differently. If your contract is directly with the US Government, you may have a clause in your contract that provides for a patent indemnity. This type of clause basically says that if, in the course of the project, you infringe a US patent owned by some other entity, it will be the US government, rather than your company, that will be liable for any damages. This is not a “get‐out‐of‐jail‐free” card; your company may still be sued by the patent holder, and you may incur costs to defend that suit, but in the end, if you lose, the government will pay the damages (but perhaps not all of the costs). Some software – but not nearly all software – is covered by patents. Much software is not covered by patents, but instead covered by trade‐mark law, and by its licensing provisions. In any case, this is a complicated area, and you should have your legal staff (and specialized patent counsel – not all lawyers are knowledgeable about patent law) look into these matters and advise you.

12.3 The Agile Software Development Methodology

People will ask if your new engineering project will be using something called agile methods. In this section, I will define this term, help you understand when it might be appropriate for your project, and describe the principal hallmarks of the agile method.

As discussed in the previous section, since many of today's systems that you will be building through your engineering projects have a large amount of software, you, as the manager of an engineering project, need to understand a fair amount about software. Agile is a particular methodology for performing software development. It has become somewhat fashionable, and as a result, the label agile is attached to different types of methodologies. So, be warned that your company or your customer may use the term slightly differently than I do herein.

Developing large, complex, software‐intensive systems is hard. Not surprisingly, problems are frequently encountered. As we discussed in the previous section, the ones that attract the most attention are: (i) software often takes far longer to develop than was originally planned or promised; (ii) software often costs far more to develop than was originally planned or promised; and (iii) when delivered, the software does not perform as promised. We have already discussed all of these.

Another problematic aspect of system development is ensuring that the values, needs, and desires of the eventual users are addressed adequately. We already discussed this aspect, in Chapter 4 and other places as well.

An additional, interesting, and important problem with software (and one that sometimes is the cause of schedule and cost problems) is that it can be hard to make small changes to a large piece of software; one segment of the software sometimes seems interconnected to another, and by the time you run down all of these little interconnections and the unexpected interactions (a form of unplanned dynamic behavior – as discussed in Chapter 2), the process of introducing what you had hoped would be a small change ends up taking longer (and costing a lot more) than you expected. If you have a very large, highly integrated piece of software responsible for operating a large portion of your business or enterprise, this can be a particular problem. If you find a problem with one aspect of (for example) an inventory control system, you do not want to wait 24 months until the next scheduled major upgrade in order to fix it; you want to create a small change (often called a patch) and distribute it now.

This is the special virtue of agile methods: they are designed to create software systems that are agile, in the sense that these systems can be readily adapted and improved frequently in small ways.

So, what projects are appropriate for agile development methods? Systems that need to be readily adapted and improved frequently in small ways. Here is my opinion:

If you have a project that:

Would benefit from frequent, small updates, and

The project is large, and

The resulting product will be in service for many years

then agile may be a good fit. Agile will allow you to structure your product and your methods so that you can provide those frequent updates over the long anticipated use life of the product. I suggest that you only do this if your project is large, because the costs of implementing all of the infrastructure that it takes to do agile properly are not small, and in most cases it is only worth expending these funds if those costs can be amortized over a large development cost and long use life.

Many consumer‐oriented products and services do fit this profile well, and many of the large, consumer‐oriented software platforms that we are all familiar with in our personal life in fact use agile methods, so that they are able to create updates and patches to the software on a frequent basis. I read somewhere that Amazon puts out a patch to some portion of its software every 17 seconds.

If, in contrast, your product has stringent licensing, certification, or credentialing requirements – an airplane, for example, which requires an update to its airworthiness certificate with every modification (which would most definitely include any modifications to its software), or systems with stringent safety requirements (such as medical diagnostic systems, the control rooms of complex industrial facilities, and most military systems) – you are unlikely to want to follow a model of frequent small updates to the product. This is because each update requires extensive testing and some type of partial recertification; this is very expensive, and trying to do it frequently can itself become a source of errors. Therefore, agile methods are usually not a good choice for systems of this sort. Instead, systems like this are usually updated at far longer time intervals, so that each update can be tested to the degree of thoroughness required, and all of the licensing, certification, and credentialing requirements addressed carefully and in detail.

Often systems like these latter ones require extensive training of their users too; and most of the time, when you release a software update to a system of this sort, you must provide and perform some type of actual training on the revised software. It would probably not be practical to require a weekly training session for a safety‐critical system, mandated because you were putting out patches for that system every week. This is another motivation for the longer time interval between updates to such systems.

This is quite different from the case for large‐scale consumer systems of the sort that we said are likely to be suitable for agile: these systems almost never involve training of the users – consumers just won't pay attention. Since these systems usually do not have significant safety issues, this is not a problem; consumers seem to prefer just to figure out how to use the systems (and any changes to the operation of these systems entailed by one of their frequent patches) by themselves. They make mistakes, but since these systems are not safety‐critical, this is only an inconvenience, and not an actual hazard. As discussed in the section about the user experience at the end of Chapter 4, you need to know which category of user your system is going to have (e.g. formally trained experts, or untrained members of the general public), and you must design the system appropriately.

One thing that I like very much about the agile approach is that it places explicit focus on the delivery of value to the users who will be using the software; this is exactly congruent to what was discussed in earlier chapters about understanding your customer and how they determine value, and making sure that the system you are designing will in fact deliver value to those users and other stakeholders. The steps that I described in Chapters 2 and 4 give you tangible methods and tools for accomplishing this important goal. That is to say, the project management approach advocated in this book already incorporates this important aspect of agile methods; we can accomplish this aspect without calling our project agile.

What are some of the characteristics of agile development methods? Here are a few:

  • Significant focus on the structure of interactions between different portions of the software, and significant focus on simplifying interfaces and service calls. These are accomplished through techniques called encapsulation and controlling visibility.
  • Frequent but small releases of fixes and capabilities. These can be viewed as small cycles around the spiral method of Chapter 2. Agile practitioners embrace the key aspect of the spiral model: each iteration is actually used by real customers, so feedback can be provided to the development team, and that feedback incorporated relatively quickly into another near‐term iteration. Some agile practitioners even go so far as to advocate a regular interval for such iterations, believing that the social benefit to the customer of having a predictable timeline for improvements, and the social benefit to the development team of having continuous deliveries (which feel to the team like progress and success) and constant feedback from actual users, make the increased tempo and expense of such frequent and regular iterations worthwhile.
  • Automation of development‐team tasks. Agile projects usually develop automated test scripts and data sets for each small package of software, and deliver these test artifacts into the testing process at the same time that they deliver the source code for the software itself. This enables the project to automate much of the testing of these small, individual packages of software. In fact, agile projects will often run such automated tests on some regular, frequent interval: once per week, or even every single night. This allows changes that may have accidently “broken” a portion of the software to be spotted quickly. Many non‐agile projects do this as well. Such automated tests are usually confined to the smallest units of software; they seldom reach into the integration activity that we described in Chapter 3. This limits the type of error that such tests can detect; they are unfortunately unlikely to detect problems that derive from the unplanned dynamic behavior that we discussed in Chapter 2.
  • Plans can be adjusted. Like all other large engineering projects, projects using agile methods require a large amount of up‐front planning, just like we have discussed in previous chapters. But agile projects also usually explicitly embrace the idea of continuously replanning and optimizing the approach to the work. I discussed how actually to accomplish this continuous replanning in Chapters 9 to 11. Again, we can do this without calling our project agile.
  • Small, cross‐functional teams. There is a natural tendency for us to organize our projects around individual technical disciplines: we form teams entirely of software coders, for example. This provides focus, but just as we have discussed that it is important for the designers to understand the customers, it is similarly important for the different technical disciplines to understand each other. Software designers, coders, integrators, testers, trainers all benefit through regular interactions. Agile development methodology codifies this by recommending that teams be formed which include all of the skills necessary to successfully deliver each piece of software, including analysis, design, coding, testing, writing, user interface design, planning, and management. This approach has potential virtues, but has often proved difficult to scale to large projects. This is an aspect that I believe must be assessed on a case‐by‐case basis for your project.

None of this is easy or inexpensive. This is often a source of confusion: people sometimes expect agile to mean inexpensive and quick. But that is not what agile software development means; agile software development means readily adaptable through many small patches, and thereby adjustable to many small changes in the requirements and able to accommodate new insights about the customers and users.

12.4 Ending Your Project

Way back in Chapter 1, we defined a project as a temporary activity, intended to create a specific item or items. Therefore, every project eventually ends. Let's talk for a moment about the end of a project.

There are many reasons why a project will end. We may have planned to finish the project in a particular manner and at a particular time, but the project might also end prematurely. Figure 12.4 depicts the ways that a project can end.

Chart summarizing the many ways that a project can end - positive, negative, neutral - that are governed by the termination provisions within the contract.

Figure 12.4 The ways that your project can end.

All of the possibilities described in Figure 12.4 will be defined in a section of the contract called the termination provisions.

The reason a contract between two commercial companies might contain a clause that permits the prime contractor to cancel the contract upon a change of control is that the company that purchased your company might be a competitor to the prime contractor. The prime contractor might prefer not to do business with a competitor, or the government might not allow it (because of potential restraint‐of‐trade issues).

Internal projects might also end because of a change of organization.

Figure 12.5 depicts a list of steps that are usually required in order to end an engineering project. It is a long list! The main point that I want you to take away from this list is that ending a project takes time, money, and people. You therefore need to incorporate these items into the project plan and the project budget, in the proposal.

Chart listing out the various steps that are usually required to end an engineering project because of a change of organization.

Figure 12.5 Steps to end an engineering project.

12.5 Your Role in All of This

We discussed four separate topics in this chapter: starting a project, projects with large amounts of software, the agile software development methodology, and ending a project. I grouped them together into a single chapter because they interact.

Your engineering project likely has large amounts of software. When you start planning your project, you will have to decide whether you will use an agile development methodology, or perhaps just selected aspects from that methodology. I have given you some guidelines to help you make that choice, and showed you how methods that we taught you earlier in this book provide your project some of the same benefits while still allowing your project to operate at large scale. Agile is not suitable for every project, but for those projects that meet the characteristics identified, it can be very helpful, especially at allowing your product to be adapted through small changes at frequent intervals.

All projects, but most especially big projects – whether agile or not – require plans, infrastructure, and processes. As the project manager, you have to see to the creation of them all.

The project start‐up process is an important and non‐trivial activity, which requires planning, time, and resources. A special task within the project start‐up process is the creation of the schedule and cost baselines, and getting through the corresponding auditing process. The most important engineering projects operate at large scale, and the project start‐up process is where the foundations for the capacity to operate at a large scale are created and institutionalized.

Engineering projects usually contain large amounts of software and software development, because software has proven to enable certain desirable characteristics to be incorporated into the end product. Unfortunately, getting that software completed on time and within budget frequently proves beyond the capacity of a particular project manager and the team. We discussed methods that can allow you and your project to do it better.

Since a project is by definition a temporary activity, it must eventually end. In many ways, ending a project is similar to launching a project: there is a long list of activities that need to be planned and executed, and you must make sure that the money to perform these activities is in your schedule and your budget.

12.6 Next

At many places in this book, we have brought up the question of dealing with people, of motivating and aligning the people on your team, of resolving conflict in a productive and polite manner, and many other aspects of the social responsibilities of the project manager. In the next chapter, we tackle this aspect of the project manager's job systematically, discussing many aspects of the people‐oriented and social aspects of the job.

12.7 This Week's Facilitated Lab Session

In this week's facilitated lab session, you will continue working in your teams. Today's topic is team exercises about project start‐up.

Refer back to the same project that your team selected earlier in the course. Using the guidance provided in this chapter, create a project start‐up check list of no more than eight items for your selected project. Conduct a group discussion of findings and insights.

This will be turned in as a section in your team project, at the end of the course.

Notes

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.22.51.241