Technical Book Club: Code Complete – Measure Twice Cut Once: Architecture Prerequisite
Consider getting a call from someone to ask if you can send them a dress. When you hang up you realize that in the context of the situation you assumed it was “a dress” but later you realize that there was some ambiguity and perhaps they meant “address”. Software projects have confusion like this at every level, how do you ensure you’re on target?
Carefully defining problem and requirements ensure you’re software solution is on target. As Code Complete puts it: “Know what you’re aiming at before you shoot” and “don’t miss the mark on specific aspects of the problem”.
While these aspects focus on the right problem, architecture ensures that software construction focuses on the right solution. This section focuses on the many aspects that are commonly found in good architecture documents.
- Program Organization
- Major Classes/Hierarchies/State Transitions
- Organization of Data
- Business Rules and Design Impact
- User Interface (UI) Design
- Resource Management
- Security
- Performance
- Scalability
- Interoperability
- Internationalization and Localization
- Input and Output (I/O)
- Error Processing
- Fault-Tolerance
- Core Decisions and Decision Processes such as:
- Feasibility
- Buy vs. Build
- Reuse
- Change Strategy
Let’s consider a few examples and how these core architectural pieces have a downstream effect on software construction.
Example 1: Software for High School Class
Ed’s SWC is constructing an application for a high school class to learn about and create research reports. When scoping out his architecture he didn’t include a section on the permissions/entitlements that a user would need to run the application. His development team assumed that the user of the application would have administrative privileges on the machine. The developers took license to launch process only available to an administrator. Luckily when they tested a prototype for the high school class, they discovered the reduction in privileges and were able to make the update before their initial release.
When the class used the first release of the product, they discovered that certain searches used keywords that were blocked by the high school systems. Searches such as the XXXI Olympics caused the program to crash due to the restriction of XXX content for high school students.
What critical piece was Ed missing from his Architecture to address these problems earlier in the software development lifecycle?
Example 2: Voice-enabled timesheet application
Sherry was working with her local governor's office to create a timesheet application. She visited the office to talk with some of the temporary employees who would use the application. Upon her visit she discovered that many of the workers had poor eyesight and would rely on the voice-enablement of the application for guidance. She included this in the problem definition. Which architecture elements are critical in addressing this requirement?
Answer 1: One key aspect of this architecture will be the ability for errors to be read off to the users. This requires that all error statements be enclosed in separate text documents for the voice engine to effectively process the error messages. This is a key architectural component that would cost a lot to change if it was not addressed by both the problem definition, requirements and architectural documents.
What other architectural elements are critical for this requirement?
Spend your summer with Software for Students’ Technical Book Club to give yourself a competitive edge in the job market: