How will you explain software development process to your non-developer friends or colleagues ?
I’d like to compare it to building a house. Which 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 above step has a corresponding phase in software development with corresponding roles :
Building steps | Software Team Role (a person can take many roles) |
---|---|
Know your budget & need | Project 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 design | Designer – Drawing: Photoshop,Illustrator, – Art concepts, – UX understanding |
Transform the design to construction plan | Architect Developer – Broad knowledge on technology to choose appropriate solutions – Experience on Scalability, Latency, Security, Performance issues |
Estimate cost | Architect Developer/Project Manager – Knowledge on solution’s pricing and average salary for developers & other roles |
Hire and manage workers | Project Manager – Hiring – Assigning works and report the progress to Product Owner – Internal & External communication – Develop working environment, policies |
Prepare construction site | System 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 materials | Architect Developer – Choose appropriate languages, frameworks, technologies, infrastructures that serve project’s criteria |
Build the foundation & Framing | Architect 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, wall | Back-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 devices | Back-end Developer – Integrating to third-party services |
Decorate | Front-end developer – Create interfaces (website, mobile applications,… ) to let users to interact as designed |
Check Endurance & verify with design requirements | Tester, QA/QC |
Maintain, fix or replace broken parts | Developers – Fix bugs, refactor/refine code, optimize solutions |
Depends on each project’s complexity and budget, some roles are included in another role. It is the same to the differences between building a small house and a skyscraper. For example, for a system that to serve millions to billions users, the role of Architect Developer is extremely important and Architect problems are far more difficult and complex than coding problems. This kind of system contains a number of machines, maybe located cross over the world and that requires real need of System Engineer. And on the contrary, a common system that only have to server hundreds to thousands users is easy to achieve by simply applying existing solutions without any significant tuning. This project level usually only need Senior developers with strong programming skill. For a small team (3-4 members), communication can be more transparent than a large team, so the role of Project Manager can be merged into other. But for a large team, communication become more problems and to maximize member abilities and avoid duplicating work as well as conflicting work, it needs a Project Manager.
Different from building a house, the design of a software can be changed more frequently, even in the middle of progress and because it is easier to change than reconstructing a building, it is ok and in fact, it happens every time. Business Analyst is the role that has closest contact with users, has clearest vision in the business and is the one who writes the requirements. For small team, Product Owner is usually the Business Analyst too. Depends on those requirements, the design may be changed and some may lead to changes in infrastructure too. And of course, every changes COSTs.
The endurance of a building depends on materials & construction methods. Similarly, the code written by developers determines the endurance of a software which is called Stability. The measurement of Stability is corresponding to the number of bugs and errors. Bug is the symptom of mistakes, human makes mistakes, and coding method is to reduce the changes of make mistakes. A building built with some mistakes can kill people. A software with bug can’t kill people but it does damage to the business, much or less. Tester or QA/QC is the role to ensure this criteria.
Above is some thoughts that I hope can help to give clearer insight for people who always wonder what us – developers do daily.
Thanks for reading !