Conway's Law - sgml/signature GitHub Wiki

Team Software Process

Phase         Description
Plan          Plan the work and document the plan
Design        Design the program
Code          Implement the design
Compile       Compile the program and fix and log all defects found
Test          Test the program and fix and log all defects found
Postmortem    Record actual time, defect, and size data on the plan
Manager       assigns responsibility
Owner         responsible for the success or failure
Consultant    offers input or advice
Helper        assists with or does some of the work
Approver      signs off on decisions

Project Activity Management (PAM)

PAM Template

- **Encapsulation**  
  Bundles related data and behavior within a single unit (class) to protect internal state and expose only necessary interfaces. In the context of PAM, this ensures each `Activity` manages its own inputs, logic, and outputs without leaking implementation details.

- **Single Responsibility**  
  Each class or object serves one well-defined purpose. For example, an `Activity` object focuses solely on executing its designated task, while a `Validator` or `Notifier` handles auxiliary concernsβ€”streamlining complexity and maintainability.

- **Specialization**  
  Extends base behavior through subclassing. A generic `Activity` may be subclassed into `ScriptedActivity` or `ManualActivity`, each implementing task execution in its own way while inheriting shared structure from the parent.

- **Composable Sub-Activities**  
  Allows nesting or coordination of smaller activity units within a larger workflow component. Each sub-activity operates independently but contributes to the overall stateβ€”ideal for modeling multi-step tasks using helpers, DSL hooks, or chained executables.

- **Dependencies**  
  Refers to external conditions or upstream activities that must be completed or available before an activity can proceed. These are modeled as required object relationships or `preconditions` that enforce sequencing in execution flows.

- **Blockers**  
  Represent active constraints or conflicts that prevent an activity from progressing. This may include resource contention, missing approvals, or failed validation checksβ€”typically triggering fallback logic or escalation paths in well-designed OOP workflows.

- **Risks**  
  Denotes uncertain events or conditions that may negatively impact activity execution. These are flagged and tracked, often encapsulated in `Risk` objects with probability, impact, and mitigation strategiesβ€”supporting dynamic decision-making and adaptive flow control.

PAM Execution

                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚      Initiation        β”‚
                         β”‚  Identify delivery needβ”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚     Requirements        β”‚
                         β”‚  Scope + Success Criteriaβ”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚      Standardization    β”‚
                         β”‚  Define process templatesβ”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚      Resource Setup     β”‚
                         β”‚  Assign roles/tools     β”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚     Execution Phase     β”‚
                         β”‚  Deliver per standards  β”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚     Monitoring & QA     β”‚
                         β”‚  Track metrics & qualityβ”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β–Ό
                         β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                         β”‚     Feedback Loop       β”‚
                         β”‚  Post-mortem & refine   β”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Common Mistakes

When working on a specification, there are common mistakes an editor can make when writing conformance requirements that makes them difficult, if not impossible, to test. For technical specifications, the testability of a conformance requirement is imperative: conformance requirements eventually become the test cases that implementations rely on to claim conformance to a specification. If no implementation can claim conformance, or if aspects of the specification are not testable, then the probability of a specification becoming a ratified standard, and, more importantly, achieving interoperability among implementations, is significantly reduced.

The most common mistakes that editors make when writing conformance requirements include, but are not limited to:

Creating conformance requirements for products that don’t have behavior, e.g. β€œan XML file must be well-formed.” β€” this cannot be tested since it doesn’t say what the outcome is on that condition.

Using a passive voice for describing the behavior, e.g. β€œan invalid XML file must be ignored” β€” this hides what product is supposed to follow the prescribed behavior.

Using under-defined behaviors, e.g. β€œa user agent must reject malformed XML” without defining the algorithmic process that is to β€œreject” something β€” this makes it impossible to define the outcome of the testable assertion.

Handling Complexity

Writing inline assertions helps immensely for large stories.

Every time you fix a bug, you want to avoid making the same mistake again. In order to do so, write down the problem, the workaround, and the permanent solution before you forget

Tracing function calls, generating a workflow data model, and visualization of the data flow is the best way to analyze all the code paths

Define an initialize cache for default data, a user-data cache for event-driven data, and a sync function to merge the two after initialization

References

⚠️ **GitHub.com Fallback** ⚠️