Depth and Breadth in Software Engineering

Business Drivers

Product Management / Business Analysis

Engineering

Operations

Now with this understanding, we will try to understand the journey from a Developer to an Architect Role.

Developer Role

Architect Role

  1. Architecture & Design

  2. Deployment

    • Deployment is part of the implementation of Architecture - see the diagram above.

    • Deployment involves the following:

      1. Setting up the Environment
      2. Creating a build from the Codebase
      3. Installing the build
      4. Setting the Configurations for the target Environment

    • A small mistake in the Deployment of a release can create serious problems, and damage all the good work done in Architecture and Codebase.

    • As the complexity and size of Software grow, Deployment itself becomes complex and very critical. Errors are likely in a Manual deployment procedure. That's why today all these four aspects are generally automated (CI\CD and Infra-as-Code) fully or partially.

    • Having a good understanding of how a Codebase is made to run in an Environment is required for Architectural and Design decisions.

  3. Operations

    • There will always be problems once Software is deployed and in use. Example:

      • Emails are not going out. Someone needs to troubleshoot and isolate the problem from different possibilities: (a) the external email service is down, (b) a logical error in the program (bug) resulting in an error, (c) wrong configuration, etc., and so on.

      • First, "Email not going out" needs to be identified, so monitoring is required, and then the ability to troubleshoot via logs, tracing in the database, etc. is required.

    • Having a good understanding of the challenges of Operations will allow designing solutions for ease of Operations.

  4. Business Drivers

    • Business Drivers are the foundation on which everything is built. Having a good understanding of it will allow for building flexibility in Architecture. Example:

      • We need to build a SaaS-based diagramming tool.

      • In the beginning, it will be free. Later paid plans will be introduced with feature restrictions on free usage.

      • Feature restrictions for users based on their subscription is a fundamental implementation. It will be good if it is designed and implemented from start instead of doing it when the Business wants to introduce paid plans.

    • One of the steps in Process of Architecting is identifying Architectural Characteristics (AC) / Non-functional Requirements. Some of these AC is derived from Business Drivers like compliance requirements, scale requirements, etc.

    Association with Codebase

    • As the focus moves to other areas, association with the Codebase may go down. But a person in an Architect Role needs to be at least familiar and comfortable with the Codebase. Otherwise, the feedback loop is broken.

    • The Codebase may become less highlighted but should never disappear from the view.

So far we have discussed what and why of Depth and Breadth in Software Engineering. Now we will understand the second capability required in the Architect Role: Problem Solving in a Group.

Problem Solving in a Group

  1. Ability to listen and take feedback

    • At a high level, the Architect Role's main objective is to convert Requirements or Feedback into designs that can be implemented.

    • Without this skill, it will be very difficult to create designs that meet the expectations of different stakeholders.

  2. Convey / Articulate views clearly

    • The key is to be able to convey your views to different types of stakeholders e.g., conveying a design to an Engineer is different than explaining Security requirements to a Customer - the former may require going into details and the latter may require just providing a summary / enough details. That change in style is required to be effective.

    • Using diagrams and maintaining good docs can be useful here.

  3. Balancing conflicting needs - Long-Term vs Short Term

    • Sometimes doing something in the "right way" (Engineering Correctness for the long term) will require more time than Business priorities will allow.

    • The Architect Role has few options in this case:

      1. Present the pros and cons, and convince the management to give more time to do it the "right way".

      2. Find some way to achieve both objectives - Engineering Correctness and Timelines.

      3. Find some compromise solution that will satisfy timelines with reduced damage to long-term Engineering objectives.

    • This is a very common scenario and the ability to work out some solution that balances both needs will be of great value to all stakeholders.

In the end...

Please share your feedback in the comments.