As a software developer, you may have experienced firsthand the mediocrity that unfortunately plagues many companies in the industry. Dysfunctional teams, bad management, and a lack of software engineering culture can all contribute to subpar work environments.
However, simply focusing on technical practices like Test Driven Development and adopting Agile methodologies like XP and Scrum is not enough to ensure success. In fact, the average “spaghetti code” that plagues so many projects could be a symptom of a larger issue.
Melvin E. Conway famously stated that “Any organisation that designs a system (defined broadly) will produce a design whose structure is a copy of the organisation’s communication structure." In other words, the way a company communicates and it’s organised directly impacts the structure of the systems it creates. This means that, in addition to technical expertise, understanding the domain, business, and people involved is crucial to the success of a project.
To truly excel in our profession, we must not only be proficient in code and technology but also understand the needs of both the people and the business. This may require a big mindset shift. By adopting a helicopter view we can create systems that not only function well but also meet the needs of the business.
For example, I have personally witnessed the benefits of this approach in my own career. As a software developer, I have always focused on building things the right way and striving to do the best job possible. I have learned technical practices like Test Driven Development, read numerous technical books, and adopted different Agile practices.
However, I have also learned that technical expertise alone is not sufficient. Understanding the domain, business, and people involved in a project is important as the technical part.
I’ll quote from Alberto Brandolini: “As much as implementing the solution is an exciting challenge, this should not be the main problem in enterprise software development. Understanding the dynamics of the domain is a more durable asset than encoding it in a technology that will inevitably become obsolete over time."
Recently, I have become particularly interested in domain-driven design and the mindset shift it requires. This has allowed me to see the “big picture” and understand the importance of communication, team topologies, psychology, leadership, and management in software development.
My journey as a software developer has taught me the value of a holistic approach, and I believe that this is key to creating successful teams and projects that meet the needs of all stakeholders.