13. Project Design Example

While Chapter 11 illustrated an example project, its main purpose was to teach the thought process when using project design techniques and how they interrelate. Only secondarily did the example demonstrate end-to-end project design. The focus in this chapter is how to drive project design decisions in a real-life project and when to apply which project design techniques. The project designed here builds the TradeMe system, the example system from Chapter 5. As with the system design case study in Chapter 5, this chapter derives directly from the actual project that IDesign designed for one of its customers. The design team consisted of two IDesign architects (a veteran and an apprentice) and a project manager from the customer. While this example scrubs or obfuscates the specific business details, I present here the project design as it was. Both the system and the project design effort were completed in less than a week.

All of the data and calculations used in this chapter are available as part of the downloadable reference files for this book. However, when reading this chapter for the first time, I advise you to resist the temptation to crosscheck constantly between the text and the files. Instead, you should focus on the reasoning leading to those calculations and the interpretations of the results. Once those are in hand, you can use this chapter for reference as you explore the data in detail to confirm your understanding and to practice the techniques.

Caution

This chapter does not duplicate the previous chapters and avoids explaining specific project design techniques. A thorough understanding of the prior chapters will help you get the most out of this example.

Estimations

The TradeMe project design effort performed two types of estimations: individual activity estimations and an overall project estimation. The individual activity estimations were used in the project design solutions, and the overall estimation served to validate the project design results.

Individual Activity Estimations

Estimating the individual activities started by listing the types of activities in the project to avoid missing crucial activities. The team classified the TradeMe activities into three categories:

  • Structural coding activities

  • Nonstructural coding activities

  • Noncoding activities

When building the list of activities, the design team expanded each list to include the individual activities and the duration estimation for each activity. The team also indicated the designated role responsible for each activity according to the customer’s process or their own experience.

Estimation Assumptions

The design team clearly documented any initial constraints or assumptions on the estimations. The TradeMe project relied on the following estimation assumptions:

  • Detailed design. The individual developers were capable of doing the detailed design, so each coding activity contained its own detailed design phase.

  • Development process. The team was set to build the system quickly and cleanly, while relying on most of the best practices in this book.

Structural Activities

The structural activities of TradeMe derived directly from the system architecture (see Figure 5-14). These activities included Utilities, Resources, ResourceAccess, Managers, Engines, and Clients, and were mostly tasks for developers. The architect was responsible for the key activities of the Message Bus and the Workflow Repository. Table 13-1 lists the duration estimation for some of the structural coding activities of the project.

Table 13-1 Duration estimation for some of the structural coding activities

ID

Activity

Duration (days)

Role

14

Logging

10

Developer

15

Message Bus

15

Architect

16

Security

20

Developer

18

Payments DB

5

DB Architect

23

Workflow Repository

15

Architect

26

Payments Access

10

Developer

35

Search Engine

15

Developer

38

Market Manager

10

Developer

45

Marketplace App

25

Developer

Nonstructural Coding Activities

The TradeMe design team identified a few coding activities that did not map directly to the architecture. These activities were the result of both the system operational concept and the company’s development process. Table 13-2 lists the team’s duration estimation for the non-structural coding activities of the project.

Table 13-2 Duration estimation for nonstructural coding activities

ID

Activity

Duration (days)

Role

10

System Test Harness

25

Test Engineer

36

Abstract Manager

30

Developer

40

Regression Test Harness

10

Developer

The abstract Manager was a base service for the rest of the Managers in the system. It contained the bulk of the workflow management as well as the message bus interaction. Derived Managers executed specific workflows. The other two activities were both testing-related. The System Test Harness was owned by a test engineer, but the Regression Test Harness was owned by a developer.

Noncoding Activities

TradeMe had many noncoding activities, which tended to concentrate at the beginning or the end of the project. The noncoding activities were owned by various members of the core team, the test engineer, testers, or external experts such as a UX designer. These activities are shown in Table 13-3. This list was also driven by the company’s development process, planning assumptions, and commitment to quality.

Table 13-3 Duration estimation for the noncoding activities

ID

Activity

Duration (days)

Role

2

Requirements

15

Architect, Product Manager

3

Architecture

15

Architect, Product Manager

4

Project Planning

10

Architect, Project Manager, Product Manager

5

Management Education

5

Architect, Project Manager, Product Manager

7

UX Design

10

UX/UI Expert

8

Dev Training

5

Architect

9

Test Plan

25

Test Engineer

11

Build and Setup

10

DevOps

12

UI Design

20

UX/UI Expert

13

Manual

20

Product Manager

25

Data Migration

10

Developer

46

Manual Polishing

10

Product Manager

47

System Testing

10

Quality Control

48

System Rollout

10

Architect, Project Manager, Product Manager, DevOps

Overall Project Estimation

The design team asked a group of 20 people to estimate the TradeMe project as a whole. The only input provided was the static architecture of TradeMe and the system’s operational concept. The design team used the broadband estimation technique and came up with duration of 10.5 months and average staffing of 7.1 people. This equated to a total cost of 74.6 man-months.

Dependencies and Project Network

The design team then proceeded to determine the dependencies between the various activities. The starting point for TradeMe was the architecture and the behavioral dependencies between the structural components. To those, the team added nonbehavioral dependencies such as noncoding activities or coding activities that were independent of the architecture. The design team also leveraged project design patterns and reasonable complexity reduction techniques both to simplify the network and to ease the upcoming project execution. The result was the first iteration of the project network.

Behavioral Dependencies

When building the first set of dependencies, the design team examined the use cases and the call chains supporting them. For each call chain, they listed all the components in the chain (often in the architecture hierarchy order, such as Resources first and Clients last) and then added the dependencies. For example, when they examined the Add Tradesman use case (see Figure 5-18), the design team observed that the Membership Manager calls the Regulation Engine, so they added the Regulation Engine as a predecessor to the Membership Manager.

Distilling dependencies from the use cases required multiple passes, because each call chain potentially revealed different dependencies. The design team even discovered some missing dependencies in the call chains. For example, based solely on the call chains of Chapter 5, the Regulation Engine required only the Regulation Access service. Upon further analysis, the design team decided that Regulation Engine depended on Projects Access and Contractors Access as well.

Abstract Structural Dependencies

The Abstract Manager encapsulated the common workflow management actions (e.g., persistence, state management). Therefore, the design team added a dependency between the Abstract Manager and the Workflow Repository. The other Managers themselves depended on the Abstract Manager. Similarly, the Abstract Manager provided the Message Bus dependency for all Managers.

Operational Dependencies

Some code dependencies were implicit in the call chains due to the system’s operational concept. In TradeMe, all communication between Clients and Managers (and between Managers and other Managers) flowed over the message bus, creating an operational (not structural) dependency between them. The dependencies indicated that the Clients needed the Managers ready for test and deployment.

Nonbehavioral Dependencies

TradeMe also contained dependencies that could not be traced directly to the required behavior of the system or its operational concept. These involved coding and noncoding activities alike. Such dependencies originated mostly with the company’s development process and TradeMe’s planning assumptions. For example, the new system had to carry forward the legacy data from the old system. Data migration necessitated that the new Resources (the databases) complete first, so the data migration activity depended on the Resources. Similarly, the completion of the Managers required the Regression Test Harness. In addition, at the time of the project’s design, the plan still had to account for a few remaining front-end activities. Finally, the company had its own release procedures and internal dependencies, which were incorporated as dependencies between the concluding activities.

Overriding Some Dependencies

In TradeMe, a core operational concept was the use of a message bus. It was crucial to choose the right message bus technology and align the detailed design and coding activities of messages and contracts with the message bus. The call chain–derived dependencies showed that the project could defer the Message Bus activity until it was needed by the Clients and the Managers. However, that ran the risk that the message bus chosen by the development team might invalidate prior decisions about design or implementation. The team decided it was safer to address the Message Bus activity first in the project.

Similar logic applied to security. While the call chain analysis indicated that only the Clients and the Managers needed to take explicit security actions, security was so important that the project had to assure Security completed before all business logic activities. This ensured all activities had security support if they needed it and avoided security becoming an after-thought or a late-stage add-on.

Reducing Complexity

The project design team also overrode dependencies so that they could reduce the complexity of the emerging network. Specifically, they changed the following dependencies:

  • Implementing infrastructure first. In TradeMe, most activities depended on Utility components such as Logging. Moving the infrastructure (which also included the Build) to the beginning of the project drastically reduced the number of dependencies in the project. It also had the benefit of making the infrastructure available to all components in case the need arose, especially those components that had no obvious need based on the call chains alone.

  • Adding milestones. Even at this early stage of the project, the design team introduced three milestones. The SDP Review milestone concluded the front-end activities. The other two milestones were Infrastructure Complete and Managers Complete: All development activities depended on the infrastructure milestone, and all Clients depended on the completion of the Managers.

  • Consolidating inherited dependencies. The design team consolidated dependencies into inherited dependencies where possible. For example, even though the Clients require the Message Bus, that dependency could be inherited via their Manager dependencies.

Sanity Checks

With the initial network laid out, the design team performed the following sanity checks:

  1. Verified the TradeMe project had a single start activity and a single end activity.

  2. Verified that every activity in the project resided on a path ending somewhere on the critical path(s).

  3. Verified that the initial risk measurement yielded a relatively low risk number.

  4. Calculated the duration of the project without any resource assignment. This came to 7.8 months and later would serve as important check of the normal solution.

The Normal Solution

The company provided the following planning assumptions:

  • Core team. The core team was required throughout the project. The core team consisted of a single architect, a project manager, and a product manager. The core team was allowed to work directly on the project only infrequently. Such work included key high-risk activities done by the architect and producing the user manual, which was assigned to the product manager.

  • Access to experts. The project had access to experts or specialists, such as test engineers, DB architects, and UX/UI designers.

  • Assignments. There was a 1:1 assignment of developers to services or other coding activities. On top of assigning based on floats, whenever possible, TradeMe maintained task continuity (see Chapter 7).

  • Quality control. A single quality control tester was required from the start of construction to the end of the project. The tester was treated as a direct cost only during the system test activity. One additional tester was required for the system testing activity.

  • Build and operations. A single build, configuration, deployment, and DevOps specialist was required from start of construction until the end of the project.

  • Developers. Developers between tasks were considered to be a direct cost rather than an indirect cost. TradeMe’s high quality expectations eliminated the need for developers during system testing.

Table 13-4 outlines which roles were required in each phase of the project.

Table 13-4 Roles and phases of the project

Role

Front End

Infrastructure

Services

Testing

Architect

X

X

X

X

Project Manager

X

X

X

X

Product Manager

X

X

X

X

Testers

 

X

X

X

DevOps

 

X

X

X

Developers

 

X

X

 

Network Diagram

Assigning resources to the various activities affected the project network. In several places, the network included dependencies on the resources in addition to the logical dependencies between the activities. After consolidating the inherited dependencies, the network diagram looked like Figure 13-1.

Figure 13-1 Logical dependencies network diagram

Figure 13-1 contains a couple of collapsed dependencies (indicated by two activity numbers per arrow) that simplified the diagram without affecting its nature. The most notable aspect of this network diagram is that it contains two critical paths.

Planned Progress

Figure 13-2 captures the planned earned value of the first normal solution. The duration of this solution stood at 7.8 months, indicating that the staffing assignments had not extended the critical path. The chart in Figure 13-2 has the general shape of a shallow S curve but is not ideal. The project starts reasonably well, but the second half of the project is not very shallow. The steep planned earned value curve was also reflected in the somewhat elevated risk values. Both the activity risk and criticality risk were 0.7.

Figure 13-2 The first normal solution planned earned value

Planned Staffing Distribution

Figure 13-3 shows the staffing distribution chart of the first normal solution. As with the planned earned value chart, the distribution in Figure 13-3 is problematic. The distinct peak at the center of the project indicates waste and implies an unrealistic expectation of staffing elasticity (see Chapter 7 and Figure 7-10).

Figure 13-3 The first normal solution staffing distribution

Cost and Efficiency

Based on the staffing distribution, the project total cost came to 59 man-months: 32 man-months of direct cost and 27 man-months of indirect cost. The higher direct cost compared to the indirect cost indicated that this solution likely was very much to the left side of the time–cost curve, where the indirect cost is still low.

The calculated project efficiency was 32%. Since the upper practical limit is 25%, such high efficiency was questionable. Taken together, the direct cost higher than the indirect cost, the conspicuous peak in the staffing distribution chart, and the high efficiency strongly indicated overly aggressive assumptions about staffing elasticity. The solution expected that across all the parallel network paths, resources would always be available at the right time to maintain progress. The rather steep planned earned value chart visualized this expectation. In short, this first attempt at the normal solution assumed a very efficient team, likely one too efficient to be practical.

Results Summary

Table 13-5 summaries the project metrics of this first normal solution.

Table 13-5 Project metrics of the first normal solution

Project Metric

Value

Duration (months)

7.8

Total cost (man-months)

59

Direct cost (man-months)

32

Peak staffing

12

Average staffing

7.5

Average developers

3.5

Efficiency

32%

Activity risk

0.7

Criticality risk

0.7

Compressed Solution

The next step was to consider options for accelerating the project. Due to the presence of the two critical paths, the best course of action was to compress this project by enabling parallel work.

From Figure 13-1, it was evident that the Manager services (activities 36, 37, 38, 39), along with the Regression Test Harness (activity 40), capped the two critical paths, as well as the two near-critical paths. The Clients (activities 42, 43, 44, 45), in turn, depended on the completion of all the Managers, prolonging the project. This made the Clients and the Managers natural candidates for compression.

Adding Enabling Activities

For each Manager service, the design team added the following activities, which enabled the compression:

  1. A contract design activity that decoupled the Clients from the Manager. The various contract design activities could perhaps have started after the SDP review, but it was deemed better to postpone them until after the infrastructure was complete. Estimated work per contract: 5 days.

  2. A Manager simulator that provided a good-enough implementation of the Manager’s contract. The simulators had to enable full development of the Clients, which now depended on the simulators, not the actual Managers. The simulators had no dependencies on lower-level services such as ResourceAccess or Engines. The simulators needed only the Manager contracts to simulate and the Message Bus. The contracts themselves depended on the infrastructure, which included the Message Bus. Estimated work per simulator: 15 days.

  3. A dedicated activity that integrated and retested the Clients against the Managers. The integration activity depended on the completion of the actual Manager and its Clients. The system testing activity now required not just the Clients but also all the Manager integrations to be completed. Estimated work per integration activity: 5 days.

Figure 13-4 shows a simplified network diagram capturing the compression-related activities in red. In the compressed network, the Managers were only near-critical and were developed on a similar timeline to the normal solution. The most important change (which allowed the compression in the first place) was that the Clients now completed a month sooner. However, the reduction in the duration of the project was less than a month because of the additional integration activities following the Managers.

Figure 13-4 Simplified network diagram for the compressed solution

Managers’ Duration Estimation

The duration estimation for the Managers themselves remained unchanged. In the normal solution, each Manager activity had to internally include some investment in designing the service contract. In theory, once the design team had extracted the contract design out of the Managers into separate activities, each Manager should have taken less time. However, in practice, this reduction is unlikely. Splitting activities is never 100% efficient, and inevitably some effort is lost due to the need to understand the contract and how it affected the internal implementation of the Managers. To compensate for these shortcomings, the design team kept the duration estimation of the Managers the same as for the normal solution.

Assigning Resources

The rest of the steps for the compressed solution were virtually identical to those for the normal solution. However, the design team discovered they could reduce the staff by two developers throughout the project by using the architect for one development activity and by pushing the schedule out one week. The company judged trading the slight delay for the reduced staff as acceptable given its challenge in securing more developers. The duration of the compressed solution came in at 7.1 months, a 3-week (9%) acceleration compared with the normal solution (7.8 months). The new resources did consume more of the floats, and the new risk number for the project was 0.74.

Planned Progress

Figure 13-5 shows the planned earned value for the compressed solution. The curve now tapers somewhat at the end of the project, better than that in the normal solution.

Figure 13-5 Planned earned value for the compression solution

Planned Staffing Distribution

Figure 13-6 shows the staffing distribution of the compressed solution. The staffing distribution looks solid for the most part. The initial ramp-up from 3 to 12 people is a bit challenging, but doable. Peak staffing of 12 is the same as the normal solution. Average staffing is at 8.2, compared with 7.5 of the normal solution.

Figure 13-6 Staffing distribution for the compressed solution

Cost and Efficiency

The cost of the compressed solution came in at 58.5 man-months, slightly less than the normal solution’s cost of 59 man-months. Direct cost was 36.7 man-months compared with the normal solution’s direct cost of 32 man-months. Although this project design solution was faster and at lower cost, the real difference from the normal solution was the expected project efficiency—37%. If the normal solution’s efficiency of 32% required a highly efficient team, the compressed solution demanded nothing less than a team of heroes. Combined with the elevated risk of 0.74, this compressed solution was a disappointment waiting to happen.

Results Summary

Table 13-6 summarizes the metrics of the compressed solution. The compressed solution made an already challenging project (see Figure 13-1) more challenging and created an unrealistically high efficiency expectation. Its major downside, however, was the integration—not the increase in execution complexity. The multiple, parallel integrations occurring near the end of the project offered no leeway. If any of them went awry, the team had no time for repairs. The increase in both the execution complexity and the integration risk in exchange for less than a month of compression was not a good trade.

Table 13-6 Project metrics of the compressed solution

Project Metric

Value

Duration (months)

7.1

Total cost (man-months)

58.5

Direct cost (man-months)

36.7

Peak staffing

12

Average staffing

8.2

Average developers

4.7

Efficiency

37%

Activity risk

0.73

Criticality risk

0.75

Even so, this compression attempt was not a waste of time—it proved the compressed solution would be an exercise in futility. The compressed solution also helped the design team to better understand the project and provided another point on the time–cost curve.

Design by Layers

The main problem with the first normal solution was not the unrealistic efficiency but the complexity of the project network. That complexity is evident just by examining the (already simplified) network diagram in Figure 13-1. The cyclomatic complexity of the network is 33 units. Coupled with the high efficiency expected of the team, this implied a high execution risk.

Instead of confronting the high complexity, the design team chose to redesign the project by architecture layers, as opposed to the logical dependencies between the activities. This produced mostly a string of pulses of activities. The pulses corresponded to the layers of the architecture or the phase of the project: front end, infrastructure and foundational work, Resources, ResourceAccess, Engines, Managers, Clients, and release activities (Figure 13-7).

Figure 13-7 Design-by-layers network diagram

While the pulses were serialized and sequential to each other, internally the pulses were done in parallel. In Figure 13-7, all the pulses are collapsed except for the expanded Manager’s pulse. A few remaining support activities, such as UI Design and the Test Harness, were not part of the string of pulses, but they had very high float.

An instantly noticeable aspect of Figure 13-7 is how simple that network is compared with that of Figure 13-1. Since the pulses were sequential in time, the project manager would only have to contend with the complexity of each pulse and its support activities. In TradeMe, the complexity of the individual pulses was 2, 4, 5, 4, 4, 4, 4, and 2. The complexity of the support activities was 1 and, due to their high float, had essentially no effect on the execution complexity.

Design by Layers and Risk

As discussed in Chapter 12, design by layers yields riskier projects. The design team found that with TradeMe, the risk of the design-by-layers solution was 0.76, up from the 0.7 of the original normal solution (which used design by dependencies). The risk went even higher to 0.79 when ignoring the high-float support activities.

Staffing Distribution

Figure 13-8 shows the planned staffing distribution for the design-by-layers solution. The overall shape of the staffing distribution chart was satisfactory. The project needed only 4 developers, and staffing peaked at 11 people.

Figure 13-8 Design-by-layers staffing distribution

Results Summary

Table 13-7 shows the project metrics for designing TradeMe by layers.

Table 13-7 Project metrics for the design-by-layers solution

Project Metric

Value

Duration (months)

8.1

Total cost (man-months)

60.8

Direct cost (man-months)

32.2

Peak staffing

11

Average staffing

7.5

Average developers

3.4

Efficiency

31%

Activity risk

0.75

Criticality risk

0.76

Subcritical Solution

The design-by-layers solution called for four developers. The company was concerned about what would happen if it was unable to get those four developers. It was therefore important to investigate the implications of going subcritical. The planning assumptions still allowed for access to external experts.

For this project, any design-by-layers solution with fewer than four developers became subcritical, so the design team chose to explore a two-developer solution. These developers were assigned the database design as well. The subcritical network diagram was similar to the one in Figure 13-7 except that internally each pulse consisted of only two parallel strings of activities.

Duration, Planned Progress, and Risk

The subcritical solution extended the project to 11.1 months. The planned earned value curve (shown in Figure 13-9) was almost a straight line whose linear regression trend line had an R2 of 0.98.

Figure 13-9 Subcritical planned progress

The subcritical nature of the solution was also reflected by its risk index of 0.84. If the company had to pursue this option, the design team recommended decompressing the project by at least a month. Decompression pushed the schedule into the 12-month range, 50% or more longer than the design-by-layers solution.

Cost and Efficiency

The total cost of the subcritical solution was 74.1 man-months, with a direct cost of 30.4 man-months, and the expected efficiency was more reasonable at 25%. The staffing distribution chart (not shown) was missing the hump in the center, as is typical for subcritical solutions (see Chapter 7).

Results Summary

Table 13-8 shows the project metrics for the subcritical solution.

Table 13-8 Project metrics for the subcritical solution

Project Metric

Value

Duration (months)

11.1

Total cost (man-months)

74.1

Direct cost (man-months)

30.4

Peak staffing

9

Average staffing

6.7

Average developers

2

Efficiency

25%

Activity risk

0.85

Criticality risk

0.82

The subcritical time and cost metrics (11.1 months and 74.1 man-months) compared favorably to those for the overall estimation (10.5 months and 74.6 man-months), differing by about 5% in duration and less than 1% in cost. This correlation suggested that the subcritical solution numbers were the likely option for the project. The more realistic 25% efficiency also gave credence to the subcritical solution.

Comparing the Options

Analyzing the results of Table 13-5 and Table 13-7 revealed several telling observations. First, the project duration remained largely the same regardless of whether the team used design by layers or design by dependencies. As explained in Chapter 12, this similarity was expected. After all, call chain–based dependencies are principally a product of the layers, and the project duration is dictated by the longest path through the layers. Also, the average staffing level of developers and efficiency were unchanged. The main differences related to the drastically reduced execution complexity and the higher risk with the design-by-layers solution.

In short, for TradeMe, design by layers was comparable to or better than the first normal solution in every respect except risk. Even if the design-by-layers solution had cost more and taken longer, its execution simplicity made it the obvious choice for TradeMe. The design-by-layers solution was also far better than the subcritical solution derived from it. The subcritical solution cost more, took longer, and was riskier. The design team adopted the design-by-layers solution as the normal solution for the remainder of the analysis.

Planning and Risk

At this point the design team had produced four solutions for building the system: the compressed solution, the normal solution by dependencies, the normal solution by layers, and the subcritical option of the design-by-layers solution. Since the subcritical solution was a fallback position for the design-by-layers solution, the design team excluded it from the risk analysis.

Risk Decompression

The design-by-layers solution had elevated risk and critical pulses, which the design team mitigated by using risk decompression. Since the appropriate amount of decompression was unknown, the design team tried decompressing by 1 week, 2 weeks, 4 weeks, 6 weeks, and 8 weeks, and observed the risk behavior. Table 13-9 shows the risk values of the three design options and the five decompression points.

Table 13-9 Risk values for the options and decompression points

Option

Duration (months)

Criticality Risk

Activity Risk

Compressed

7.1

0.75

0.73

Design by Dependencies

7.8

0.70

0.70

Design by Layers

8.1

0.76

0.75

D1

8.3

0.60

0.65

D2

8.5

0.48

0.57

D3

9.0

0.42

0.46

D4

9.4

0.27

0.39

D5

9.9

0.27

0.34

Figure 13-10 plots these options and decompression points against the timeline. The criticality risk behaved as expected, and the risk dropped with decompression along some logistic function. The activity risk also dropped with decompression, but a gap appeared between the two curves because the activity risk model did not respond well to an uneven distribution of the floats. The calculations that produced the values in Table 13-9 addressed this issue by adjusting the float outliers as described in Chapter 11—that is, by replacing the outliers with the average of the floats plus one standard deviation of the floats. In this case, the adjustment was simply insufficient. A float adjustment at half a standard deviation aligned the curves perfectly. However, the design team chose to just use the criticality risk curve, which did not require any adjustments. The team observed that decompression beyond D4 was excessive because the risk curve was leveling out.

Figure 13-10 Discrete risk curves

With the values in Table 13-9, the design team found a polynomial correlation model for the risk curve with R2 of 0.96:

Risk=0.09t32.28t2+19.19t52.40

where t is measured in months.

Using the risk model, maximum risk was at 7.4 months, with a risk value of 0.78. This point was between the deign-by-dependencies solution’s 7.8 months and the compressed solution’s 7.1 months (see Figure 13-11). The design team removed the compressed solution from consideration because it was past the point of maximum risk. Even the design-by-dependencies solution was borderline risk-wise: At 7.8 months, the risk was already 0.75, the maximum recommended value. The design-by-layers solution was at a comfortable 0.68 risk. The point of minimum risk was at 9.7 months with a risk value of 0.25.

Figure 13-11 Risk model curve and points of interest

Table 13-10 captures the risk value of these points, and Figure 13-11 visualizes them along the risk model curve.

Table 13-10 Risk model values and points of interest

Option

Duration (months)

Risk Model

Compressed

7.1

0.75

Maximum Risk

7.4

0.78

Design by Dependencies

7.8

0.74

Design by Layers

8.1

0.68

Minimum Direct Cost

8.46

0.56

D2

8.53

0.53

Minimum Decompression Target

8.6

0.52

D3

9.0

0.38

Minimum Risk

9.7

0.25

Finding the Decompression Target

Using the technique explained in Chapter 12, the design team calculated the minimum risk decompression target (where the risk curve’s second derivative is zero) at 8.6 months, with a risk value of 0.52. This point lay between the D2 and D3 decompression points (see Figure 13-10), making the point to its right, D3, the recommended decompression target. The risk at the duration of D3 was 0.38 on the risk model, slightly less than the actual value of 0.42 for D3. While the risk value for the decompression target may seem low (significantly less than the ideal 0.5), it was in line with the recommendation in Chapter 12 to decompress design-by-layer projects to 0.4 to compensate for their inherent risk.

The last technique put to bear on finding the decompression target was calculating the point of minimum direct cost. However, the direct cost at the decompression points was unknown.

Examining Figure 13-8 and Table 13-7, the design team conservatively estimated that the decompression required three out of the four developers to keep working during the decompression. This allowed the team to calculate the direct cost for extending the project to the D5 decompression point. The design team added that extra direct cost to the known direct cost of the design-by-layers solution, which provided a direct cost curve and a well-fitted correlation model:

Direct Cost=2.98t250.42t+244.53

Using the direct cost formula, the design team found the point of minimum direct cost at 8.46 months, right before D2. Substituting the 8.46-month duration into the risk formula provided a risk of 0.56. The duration difference between the minimum point of the direct cost model and the zero point of the second derivative of the risk model was 1%, confirming D3 as the decompression target. Incidentally, the minimum direct cost was 31.4 man-months, while the direct cost at D3 was 32.2 man-months, a difference of merely 3%.

Recalculating Cost

Recommending D3 required the design team to provide the total cost at that point. While the direct cost was known from the prior formula, the indirect cost was unknown across the decompression range. The design team modeled the indirect cost for the three known solutions, obtaining a simple straight line described by the following formula:

Indirect Cost=7.27t30.01

The design team added the direct and indirect cost equations together to come up with the formula for the total cost in the system:

Total Cost=2.98t250.42t+244.53+7.27t30.01=2.98t243.5t+214.52

Using this formula, the total cost at D3 was 67.6 man-months.

Preparing for the SDP Review

The best project design option so far was D3, the one-month decompression from the design-by-layers solution. It provided a simple, achievable project at reduced risk and virtually at minimum direct cost. The somewhat low indirect cost made this solution the optimal option for the project from duration, cost, and risk perspectives.

In addition to this optimal point, the design team presented the design-by-dependencies solution to the company’s decision makers. It demonstrated that any attempt of decreasing the schedule would drastically increase the design risk and the execution risk due to high complexity and the unrealistic expected efficiency of the team.

Because of the potential resource shortage, the design team found it necessary to include the subcritical solution, but only with adequate decompression. Repeating similar steps as for the design-by-layers solution, the decompressed subcritical solution provided a risk of 0.47, a duration of 11.8 months, and a total cost of 79.5 man-months. The decompressed subcritical solution was presented both to show the consequences of understaffing the project and to show that the project was still feasible, if the need should arise.

Due to their higher risk, there was no point in considering the non-decompressed options of the design-by-layers and subcritical solutions. Table 13-11 summarizes the project design options that the design team presented at the SDP review.

Table 13-11 Viable project design options

Project Option

Duration (months)

Total Cost (man-months)

Risk

Complexity

Activity Driven

8

61

0.74

High

Architecture Driven

9

68

0.38

Low

Understaffed

12

80

0.47

Low

For the presentation, the design team renamed the design options to avoid project design jargon such as “normal,” “decompression,” “subcritical,” and “by layers.” In Table 13-11, the label “Activity Driven” stands for design by dependencies, “Architecture Driven” stands for design by layers, and “Understaffed” stands for subcritical.

The table used plain-language terms such as “High” and “Low” for complexity and rounded all numbers other than the risk values. The table gently prodded the decision makers toward the decompressed design-by-layers solution.

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

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