Requirements, Conceptual Design, and Technical Design: No-Fluff Guide
Practical, code-level breakdown of requirements gathering, conceptual and technical design, with house and course search analogies. Actionable, terse, and example-driven.
3 min read
Requirements, Conceptual Design, and Technical Design: No-Fluff Guide
1. Requirements Gathering (Elicitation)
- Don't code before you know what to build.
- Ask probing questions, not just what's stated. (e.g., "No kitchen?" "Room sizes?" "External constraints?")
- Clarify ambiguities and missing info.
- House Example:
- "Do you want a kitchen?"
- "How big should the gym be?"
- "Any building codes?"
- Software Example:
- "What does 'search for courses' mean?"
- "What filters?"
- "What's a 'relevant' course?"
2. Conceptual Design
- Sketch the big pieces and their responsibilities, ignore implementation.
- Components = major parts (house: kitchen, gym; software: search page, course, input field).
- Connections = how components interact (living room connects to kitchen; search page connects to input field, results page).
- Responsibilities = what each part does (kitchen: meal prep; search page: search courses).
- Use mockups (hand-drawn or digital) to visualize.
- Don't specify tech details (no wiring, no database schema yet).
Example (Course Search):
graph TD
A[Search Page] --> B[Input Field]
A --> C[Search Button]
A --> D[Results Page]
D --> E[Course]
3. Technical Design
- Break down each component into smaller, implementable parts.
- Add technical details: how will each responsibility be fulfilled?
- House: Gym needs reinforced floor → design beams/columns.
- Software: Search page needs to query a course database → define API, data flow, error handling.
- Use technical diagrams (UML, flowcharts, etc.) to specify structure and behavior.
- Identify and resolve conflicts (e.g., gym floor reinforcement vs. open basement).
Example (Course Search, Technical):
// SearchPage.tsx
const handleSearch = async (keyword: string) => {
const results = await fetch(`/api/courses?query=${encodeURIComponent(keyword)}`).then(res =>
res.json()
)
setResults(results)
}
graph TD
User -->|enters keyword| InputField
InputField -->|triggers| SearchButton
SearchButton -->|calls| APIServer
APIServer -->|queries| CourseDatabase
CourseDatabase -->|returns| APIServer
APIServer -->|returns| ResultsPage
4. Iteration & Feedback
- Constantly check with stakeholders (client, users) to validate both conceptual and technical designs.
- Be ready to revise requirements and designs as new info or constraints emerge.
Actionable Takeaways
- Never skip requirements. Ask "what's missing?" and "what if?" questions.
- Draw conceptual mockups before any code or tech diagrams.
- Only after the conceptual design is clear, break it down into technical details.
- Use diagrams and sketches to communicate, not just text.
- Iterate: requirements ↔ conceptual design ↔ technical design, until all are solid.
Contrarian/Speculative
- For small projects, you can sometimes merge conceptual and technical design, but always do some requirements elicitation.
- For rapid prototyping, use "just enough" design, but document assumptions so you can refactor later.
Summary: You wanted a direct, code-level, and example-driven explanation of the importance and process of requirements gathering, conceptual design, and technical design, using both the house and course search website analogies, with actionable steps and no high-level fluff.
Last updated: June 9, 2024