Smooth Development Maxims - Making Specifications Work
Make specifications sparse, precise, and verifiable.
In the TL;DR age, too much documentation is unfortunately nearly as much an issue as too little. Modularity is important - just as it is in software design. Specifications represent the most important part of any system's documentation tree. Good specifications provide developers, architects, test analysts and other product-related specialists with clear requirements and methods for verification in a minimalist structure. We describe this as "sparse, precise and verifiable.
The most effective specifications are built from many single-topic items. While complex components or interfaces may benefit from an additional "theory of operation" in prose, focus first on quantitative requirements that map to success. Build a taxonomy of the important kinds of specifications. Then build small (Markdown-based) documents for components, interfaces and systems that cover a single topic. We can use auto-build systems to build a larger document by combining many small ones.
Working in this manner makes it easy to get started and to focus on the areas your particular system needs most. In our
@3LEAPS Flow Lanes syntax, we always include what we call Key Assurance Metrics: testable attributes tagged as functional, performance, availability, and security. These key inputs work to an overall verification plan, representing the KPIs that define success.
At the component or interface level, start by deciding what needs a specification. Interfaces should be precise - JSON Schema, JSON Type Definition, OpenAPI, and AsyncAPI are tools you might consider. External interfaces in particular need formal specifications that are accessible by (external) users.
Document algorithms and functional logic using simple flow diagrams or text and by storing the (Markdown) documents in the code as noted in another post (
3lps.co/ny5 ). When reviewing what constitutes an adequate specification, think from three key perspectives.
1.) What does a developer need to know in order to address the full range of inputs and boundary conditions? Consider numeric precision as an often overlooked item.
2.) How are high-level system requirements (Key Assurance Metrics) particularly impacted by this component?
3.) How can a test analyst confirm operation in black box fashion?
While the specification count might seem overwhelming, recognize that no system and no component requires every type of document for every use case. Start with new work, adding specs that cover the most important areas based on your own analysis of where gaps lie. Ensure the acceptance process for each development cycle includes specifications.
As you build up an inventory of specifications, your devops team can add CICD operations to create a larger validation "suite." Don't let TL;DR attitudes create ambiguity or inconsistency in your system design!
#smoothdevelopment #flowlanes #3leaps
ALT Multi-colored graph with white background showing 3 Leaps Flow Lanes Element Specification