Published Jul 27, 2023

SE Radio 574: Chad Michel on Software as an Engineering Discipline

Chad Michel sheds light on viewing software as an engineering discipline, stressing the importance of managing complexity, maintaining a design focus, and fostering leadership to ensure quality and adaptability in software development. He offers insights into juggling evolving requirements, team dynamics, and the need for engineering rigor to meet customer needs effectively.
Episode Highlights
Software Engineering Radio - the podcast for professional software developers logo

Popular Clips

Episode Highlights

  • Engineering Rigor

    Chad Michel highlights the critical need for engineering rigor in software development, drawing parallels between software engineering and traditional engineering disciplines. He notes that many developers lack awareness of structured methods and frameworks like the Software Engineering Body of Knowledge (SWEBOK), which are essential for building reliable software systems 1. Michel acknowledges resistance to rigorous engineering principles, often due to misconceptions about agility and the desire to start coding immediately 2. He emphasizes the importance of planning and documentation before coding to ensure predictable outcomes 2.

    The number of people that have heard of SWEBOK and actually know what that means in the software industry probably isn't that many.

    ---

    Jeff Doolittle, the host, supports this view by distinguishing between software engineering and software development, emphasizing the need for rigor in the former 3.

       

    Quality Assurance

    Quality assurance is a cornerstone of engineering discipline, yet often misunderstood in software development. Chad Michel differentiates between quality assurance and quality control, advocating for institutionalized quality where everyone in the organization is responsible for maintaining high standards 4. He draws inspiration from Toyota's Andon cord system, where any team member can halt production to address quality issues, emphasizing the importance of a collective quality mindset 5. Michel stresses that achieving high-quality software requires a collaborative effort across all roles, from developers to UX designers 6.

    We want quality to be kind of something that everybody buys into super essential for everybody's role.

    ---

    Jeff Doolittle adds that empowering individuals to address quality issues can lead to significant improvements, as demonstrated by Toyota's success in the 1950s 6.

       

    Designing for Change

    Designing software with change in mind is crucial for long-term adaptability and system integrity. Chad Michel discusses the principle of designing for change, emphasizing the need to anticipate future modifications and ensure systems can evolve without degrading 7. He highlights the role of a chief engineer in maintaining consistency and communication within teams, ensuring new team members are effectively onboarded 8. Michel also underscores the importance of modular design, which allows for flexibility and adaptability in software systems, drawing parallels to modular hardware designs like the framework laptop 9.

    We want to design our solutions where we assume it's going to change.

    ---

    Jeff Doolittle concurs, noting that engineering is about managing constraints and ensuring systems can adapt to changing requirements 7.

Related Episodes