Building a software is like building a house

Technical Debt Meme
Tech Debt Explanation

How will you explain the software development process to your non-developer friends or colleagues?

I’d like to compare it to building a house. What steps do we need to go through when building a house?

  • Know your budget & need
  • Design or buy design
  • Transform the design to construction plan
  • Estimate cost and adjust the design by cost
  • Hire and manage workers
  • Prepare construction site
  • Choose materials
  • Build the foundation & Framing
  • Install walls, doors, windows, roofs, grounds
  • Hook up to water line & electricity line then install other devices
  • Decorate
  • Check Endurance & verify with design requirements
  • Maintain, fix or replace broken parts.

Each of the steps above has a corresponding phase in software development, along with matching roles:

Building stepsSoftware Team Role
(a person can take many roles)
Know your budget & needProject Owner,
– Has Money, Business Domain Knowledge & Idea
Business Analyst
– Deep Understanding on Business Domain and User needs
– To clarify which features should be developed
Design or buy designDesigner
– Drawing: Photoshop,Illustrator,
– Art concepts,
– UX understanding
Transform the design to construction planArchitect Developer
– Broad knowledge on technology to choose appropriate solutions
– Experience on Scalability, Latency, Security, Performance issues
Estimate costArchitect Developer/Project Manager
– Knowledge on solution’s pricing and average salary for developers & other roles
Hire and manage workersProject Manager
– Hiring
– Assigning works and report the progress to Product Owner
– Internal & External communication
– Develop working environment, policies
Prepare construction siteSystem Engineer
– Setup machines, connect machines to machines and configure/tune them
– Linux or other operating systems knowledge to install requested components
– Monitoring system & handle system issues
– Benchmark test
(latency, maximum load)
Choose materialsArchitect Developer
– Choose appropriate languages, frameworks, technologies, infrastructures that serve project’s criteria
Build the foundation & FramingArchitect Developer
– Deep experience on Programing to define a healthy source code structure, coding conventions and solutions, building life-cycle and other communication support tools like task manager, group chat, source code management, etc…
Build wall, doors, windows, roofs, ground, wallBack-end Developer
– Experience on chosen languages & frameworks to create components, connect components to solve business ideas
Hook up to water line & electricity line then install other devicesBack-end Developer
– Integrating to third-party services
DecorateFront-end developer
– Create interfaces (website, mobile applications,… ) to let users to interact as designed
Check Endurance & verify with design requirementsTester, QA/QC
Maintain, fix or replace broken partsDevelopers
– Fix bugs, refactor/refine code, optimize solutions

Depends on each project’s complexity and budget; some roles are included in another role. It is similar to the differences between building a small house and a skyscraper. For example, for a system that serves millions to billions of users, the role of Architect Developer is extremely important, and architectural problems are far more difficult and complex than coding problems. This kind of system contains a number of machines, possibly located all over the world, which requires a real need for a System Engineer. In contrast, a common system that only has to serve hundreds to thousands of users is easy to achieve by simply applying existing solutions without any significant tuning. This project level usually only needs Senior developers with strong programming skills. For a small team (3-4 members), communication can be more transparent than in a large team, so the role of Project Manager can be merged into another role. However, for a large team, communication becomes more problematic, and to maximize member abilities and avoid duplicating work as well as conflicting work, a Project Manager is needed.

Different from building a house, the design of software can be changed more frequently, even in the middle of progress. Because it is easier to change than to reconstruct a building, it is acceptable and, in fact, happens every time. The Business Analyst is the role that has the closest contact with users, has the clearest vision of the business, and is the one who writes the requirements. In a small team, the Product Owner is usually also the Business Analyst. Depending on those requirements, the design may be altered, and some changes may lead to modifications in infrastructure as well. Of course, every change costs money.

The endurance of a building depends on materials and construction methods. Similarly, the code written by developers determines the endurance of software, which is called stability. The measurement of stability corresponds to the number of bugs and errors. A bug is the symptom of mistakes; humans make mistakes, and a coding method is designed to reduce the chances of making errors. A building constructed with mistakes can endanger lives. Software with bugs cannot kill people, but it does damage to the business, whether significantly or marginally. Testers or QA/QC professionals play a crucial role in ensuring these standards are met.

Above are some thoughts that I hope can help give clearer insight for people who always wonder what we – developers – do daily.

Build – Secure – Evolve with the-tech-lead.com


Leave a Reply