C. Design Standard

The ideas in this book are simple and consistent both internally and with every other engineering discipline. However, it can be overwhelming at first to come to terms with this new way of thinking about system and project design. Over time and with practice, applying these ideas becomes second nature. To facilitate absorbing them all, this appendix offers a concise design standard. The design standard captures all the design rules from this book in one place as a checklist. The list on its own will not mean much, because you still have to know the context for each item. Nevertheless, referring to the standard can ensure that you do not omit an important attribute or consideration. This makes the standard essential for successful system and project design by helping you enforce the best practices and avoid the pitfalls.

The standard contains two types of items: directives and guidelines. A directive is a rule that you should never violate, since doing so is certain to cause the project to fail. A guideline is a piece of advice that you should follow unless you have a strong and unusual justification for going against it. Violating a guideline alone is not certain to cause the project to fail, but too many violations will tip the project into failure. It is also unlikely that if you abide by the directives that you will have any reason to go against the guidelines.

The Prime Directive

Never design against the requirements.

Directives

  1. Avoid functional decomposition.

  2. Decompose based on volatility.

  3. Provide a composable design.

  4. Offer features as aspects of integration, not implementation.

  5. Design iteratively, build incrementally.

  6. Design the project to build the system.

  7. Drive educated decisions with viable options that differ by schedule, cost, and risk.

  8. Build the project along its critical path.

  9. Be on time throughout the project.

System Design Guidelines

  1. Requirements

    1. Capture required behavior, not required functionality.

    2. Describe required behavior with use cases.

    3. Document all use cases that contain nested conditions with activity diagrams.

    4. Eliminate solutions masquerading as requirements.

    5. Validate the system design by ensuring it supports all core use cases.

  2. Cardinality

    1. Avoid more than five Managers in a system without subsystems.

    2. Avoid more than a handful of subsystems.

    3. Avoid more than three Managers per subsystem.

    4. Strive for a golden ratio of Engines to Managers.

    5. Allow ResourceAccess components to access more than one Resource if necessary.

  3. Attributes

    1. Volatility should decrease top-down.

    2. Reuse should increase top-down.

    3. Do not encapsulate changes to the nature of the business.

    4. Managers should be almost expendable.

    5. Design should be symmetric.

    6. Never use a public communication channels for internal system interactions.

  4. Layers

    1. Avoid open architecture.

    2. Avoid semi-closed/semi-open architecture.

    3. Prefer a closed architecture.

      1. Do not call up.

      2. Do not call sideways (except queued calls between Managers).

      3. Do not call more than one layer down.

      4. Resolve attempts at opening the architecture by using queued calls or asynchronous event publishing.

    4. Extend the system by implementing subsystems.

  5. Interaction rules

    1. All components can call Utilities.

    2. Managers and Engines can call ResourceAccess.

    3. Managers can call Engines.

    4. Managers can queue calls to another Manager.

  6. Interaction don’ts

    1. Clients do not call multiple Managers in the same use case.

    2. Managers do not queue calls to more than one Manager in the same use case.

    3. Engines do not receive queued calls.

    4. ResourceAccess components do not receive queued calls.

    5. Clients do not publish events.

    6. Engines do not publish events.

    7. ResourceAccess components do not publish events.

    8. Resources do not publish events.

    9. Engines, ResourceAccess, and Resources do not subscribe to events.

Project Design Guidelines

  1. General

    1. Do not design a clock.

    2. Never design a project without an architecture that encapsulates the volatilities.

    3. Capture and verify planning assumptions.

    4. Follow the design of project design.

    5. Design several options for the project; at a minimum, design normal, compressed, and subcritical solutions.

    6. Communicate with management in Optionality.

    7. Always go through SDP review before the main work starts.

  2. Staffing

    1. Avoid multiple architects.

    2. Have a core team in place at the beginning.

    3. Ask for only the lowest level of staffing required to progress unimpeded along the critical path.

    4. Always assign resources based on float.

    5. Ensure correct staffing distribution.

    6. Ensure a shallow S curve for the planned earned value.

    7. Always assign components to developers in a 1:1 ratio.

    8. Strive for task continuity.

  3. Integration

    1. Avoid mass integration points.

    2. Avoid integration at the end of the project.

  4. Estimations

    1. Do not overestimate.

    2. Do not underestimate.

    3. Strive for accuracy, not precision.

    4. Always use a quantum of five days in any activity estimation.

    5. Estimate the project as a whole to validate or even initiate your project design.

    6. Reduce estimation uncertainty.

    7. When required, maintain correct estimation dialog.

  5. Project network

    1. Treat resource dependencies as dependencies.

    2. Verify all activities reside on a chain that starts and ends on a critical path.

    3. Verify all activities have a resource assigned to them.

    4. Avoid node diagrams.

    5. Prefer arrow diagrams.

    6. Avoid god activities.

    7. Break large projects into a network of networks.

    8. Treat near-critical chains as critical chains.

    9. Strive for cyclomatic complexity as low as 10 to 12.

    10. Design by layers to reduce complexity.

  6. Time and cost

    1. Accelerate the project first by quick and clean practices rather than compression.

    2. Never commit to a project in the death zone.

    3. Compress with parallel work rather than top resources.

    4. Compress with top resources carefully and judiciously.

    5. Avoid compression higher than 30%.

    6. Avoid projects with efficiency higher than 25%.

    7. Compress the project even if the likelihood of pursuing any of the compressed options is low.

  7. Risk

    1. Customize the ranges of criticality risk to your project.

    2. Adjust floats outliers with activity risk.

    3. Decompress the normal solution past the tipping point on the risk curve.

      1. Target decompression to 0.5 risk.

      2. Value the risk tipping point more than a specific risk number.

    4. Do not over-decompress.

    5. Decompress design-by-layers solutions, perhaps aggressively so.

    6. Keep normal solutions at less than 0.7 risk.

    7. Avoid risk lower than 0.3.

    8. Avoid risk higher than 0.75.

    9. Avoid project options risker or safer than the risk crossover points.

Project Tracking Guidelines

  1. Adopt binary exit criteria for internal phases of an activity.

  2. Assign consistent phase weights across all activities.

  3. Track progress and effort on a weekly basis.

  4. Never base your progress reports on features.

  5. Always base your progress reports on integration points.

  6. Track the float of near-critical chains.

Service Contract Design Guidelines

  1. Design reusable service contracts.

  2. Comply with service contract design metrics

    1. Avoid contracts with a single operation.

    2. Strive to have 3 to 5 operations per service contract.

    3. Avoid service contracts with more than 12 operations.

    4. Reject service contracts with 20 or more operations.

  3. Avoid property-like operations.

  4. Limit the number of contracts per service to 1 or 2.

  5. Avoid junior hand-offs.

  6. Have only the architect or competent senior developers design the contracts.

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

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