Back to Basics - Engineering


Posted by Willy-Peter Schaub on Mon 26 February 2024

The notion of developers relying on testers to validate changes can be so startling that it feels like my head might explode.

I am from an era characterized by distinct roles of programmers, testers, and systems analysts, each with their specialized tasks and a rigid handoff of responsibilities for testing. However, over past decades I have transitioned into a modern DevOps landscape where engineers function as integral members of cross-functional teams. In this DevOps environment, every team member holds themselves accountable for the entire product lifecycle, from conceptualization to retirement, fostering a collective commitment to product excellence, quality assurance, and delighted end-users.

To thrive in our software development ecosystem, it is imperative for all team members to grasp these fundamental principles:

  • Embracing cross-functional product teams, where diverse expertise converges to achieve common goals.
  • Cultivating a T-shaped engineering mindset, blending deep expertise in one area with a broad understanding across disciplines.
  • Understanding the key traits that define an effective engineer, encompassing technical prowess, adaptability, collaborative spirit, and a relentless pursuit of excellence.

Let me delve into these three pillars.


Cross-functional product team

A cross-functional product team is a group of people who have various abilities and experiences and work together as a unit to accomplish a common objective related to the development, evaluation, deployment, upkeep, and enhancement of a product from beginning to end. Each team member contributes their distinct viewpoint, knowledge, and skills to form a product team that can adapt to changing needs and take responsibility for quality and service excellence.

Terminology that has no place in a effective cross-functional product team:

  • Them and us.
  • Organizational and/or responsibility silos.
  • Specific role functions, such as developers and testers.

I like to call a cross-functional product team a smooth-working team of engineers.


T-Shaped Engineers

t-shaped

A T-shaped engineer is a term that refers to a professional who has both specialization in one area and a wide range of skills and knowledge across various areas.

The vertical part of the "T" represents the specialization – the depth of knowledge and skill in a particular technical area, such as software development.

The horizontal part of the "T" shows the engineer's ability to cooperate and work across different technical areas, such as project management, communication, teamwork, problem-solving skills, and quality assurance.

quality

I argue, for example, that quality is the responsibility of every member of the team. This includes development, maintaining, running, and analyzing quality assurance – such as unit, integration, system, and regression tests.

As shown above, I expect everyone on the product team to be experienced in, to own, and to collaborate around QUALITY.

Some terms that are not helpful in a productive cross-functional product team:

  • Not my job.
  • Not my responsibility.
  • You do the coding, I do the testing – or vice versa.

Effective Engineers

Finally, I want to discuss what traits are essential for being an engineer. As you can see below, I look for thirteen (13) traits in engineers who join our team(s).

DNA

Sorted alphabetically ...

  • CHANGE - thirst for change, evolution, and continuous learning.
  • COLLABORATE - collaboration and presentation skills and a constant desire to improve them.
  • CURIOSITY - peek under the hood, open the black-box, and show an unstoppable curiosity of finding out the WHAT, WHO, and WHY.
  • DETAIL - notice the details.
  • FAIL - do not be afraid to try new things and fail. "If things are not failing, you are not innovating enough." - Elon Musk.
  • IMPROVE - make things better, more efficient and effective.
  • INNOVATE - think creatively, experiment continuously, learn, pivot, and apply new ideas.
  • LOGIC - having a logical mind and analytical skills.
  • OPTIMISM - stay optimistic when dealing with challenges and uncertainties that are part of an engineer's world.
  • PASSION - show a deep passion and strong commitment to specialized and generalized knowledge and role areas.
  • SOLVE PROBLEMS - problem-solving skill and eagerness to constantly overcome and solve problems we face daily.
  • TEAM - help the team succeed. "We are in this together."
  • TRUST - trust is crucial for creating strong bonds between colleagues, teams, and organizations.

Expressions that send shivers down my spine when uttered by someone claiming to be an engineer:

  • I have no time to explore and learn.
  • Why would I want to learn something new?
  • It is 5 o'clock and time to call it a day. We will troubleshoot tomorrow.
  • No need to change, this has worked for us for many years.

I have been a software engineer for four decades and LOVE my work - which is why I have probably never felt like working in my life q;-)


Am I off course? What are your thoughts on this topic?

Special thanks to Office 365 Copilot for helping me copy-edit this post.