01 December 2021
Do I really need a skilled Software Architect? Guide for CTOs
Do you think of software development mostly as a collection of difficult issues to solve and deal with? Do you find that you can’t focus on the exciting part of the process like creating new features and business logic and really turning your wildest ideas into (digital) reality? One of the reasons behind this may be that you have never hired a proper software architect to set up a strong foundation for an efficient and scalable app. Let’s find out why you need a software architect for your project.
Have you ever encountered a project that was written by experienced engineers, and yet it was still really hard to maintain, with multiple programming languages, different technical standards, architectural styles and approaches to user interfaces? Or perhaps you were assigned a JIRA Ticket which seemed like an easy feature, but when you started integrating it with the whole system, it seemed like everything was against you?
Chances are that the chief reason behind your woes is bad architecture. But how can you modify your development process to avoid such scenarios? Let’s start by going deeper into what software engineering in terms of architecture really is.
What is Software Architecture?
In order to answer this question, I believe we should take a step back and ask ourselves:
“What is architecture?”
If you type this question into Google, you might encounter the following definition:
Architecture is the art or practice of designing and constructing buildings.
Let’s tie it to software.
“Software” is a very broad term. We can have embedded software, web software, machine learning, data modeling, and much more. There are also many software coding standards. We can’t pinpoint a template to good software architecture nor can we create a to-do list that would ensure that we will end up with a great design every single time. There are multiple different challenges between contexts (enterprise architecture, computer science), application sizes, and industries and consequently – various software solutions. There are hard and soft skills involved here. This leads us to the following conclusion:
There is an art to architecture software, a certain beauty in self-supporting software, and “doing the important stuff”.
Whatever that is, there is one element that touches both social, technical, and business contexts. Software Architecture is a glue that combines all those bits and pieces into a working unit of software. It is a multidisciplinary tool that has a variety of sockets. That’s why software architect job description typically encompasses so many different topics and include both technical skills (hard skills), soft skills and more. The software architect role surely is one of the most difficult ones to understand in a project.
Finally, it is the product of people who took time and effort to gather experiences, skills, mechanisms, and instruments to be able to deliver well-engineered expertise in an Agile environment, meeting the requirements they faced in the first place.
Knee-deep in Software Architecture
In the world of software development, there is only one law that is always true: the “It depends […]” law.
Jokes aside, if you ask different people you will get different answers. Partially, because it’s a wide specialization and summarizing any problem down to a couple of sentences is not an easy task. It’s one of those things that you can easily point to when you encounter it, but it’s hard to go about creating just one definition, which will encompass most of its meaning.
For the purpose of this article let’s define Software Architecture as follows:
The art of designing and constructing meaningful software.
If you don’t believe that defining Software Architecture is really that difficult, check out the definition by Martin Fowler.
Since we more or less know what Software Architecture is, let’s see how you can spot a bad example of it.
There is definitely something wrong with the Software Architecture when:
- a given piece of software is hard to test for the development team,
- there is high coupling within the system,
- it’s hard to integrate new modules,
- there are high costs of scaling (or scaling is not cost-effective),
- the system lacks efficiency or resiliency, making DevOps practices more difficult.
And some less obvious Software Architecture problems:
- feature development takes too long,
- software can’t keep up with an Agile environment,
- developers are afraid to change working modules,
- on-boarding of new developers is hard,
- the developer’s satisfaction with working on a project is low,
- the quality of deliverables decreases over time.
And that’s it for the theory. Let’s make it a bit more personal!
Who is a Software Architect?
Having discussed the signs of bad architecture that you can encounter, the next logical step is to go over who a Software Architect is, how to become a Software Architect, and what kind of skills and character traits are the most desirable for Software Architect position.
A Software Architect is a person who is experienced with designing software.
This person should have broad experience under their belt in terms of software design, with projects of various sizes, which shaped their judgment to be sharp and firm. The knowledge of design patterns, including microservices design patterns, as well as infrastructure offerings in the market, combined with the ability to anticipate future development, allow them to choose the most suitable solution for any given scenario, leaving enough doors open for future choices. The software architect is different than a full stack developer in that the latter is mostly about implementing features, rather than designing the high-level software design.
Personally, I don’t like the assumption that a Software Architect works only at a high level of software development. There are many examples of decisions that benefit from the input
and perspective of an architect. Among others, these would be the issues of Transactional Script vs Domain Model, or whether the usage of ORM is a good choice for the project.
That being said, there is a high possibility that a Software Architect will more frequently work with C4 diagrams, planning and cutting complex problems into reasonable modules, etc. Implementing features comes next.
It is important to say that the decisions of a Software Architect always depend on many variables. There are different options and opportunities for a greenfield project vs operating a complex system. The skills of the team, timelines, and stakeholder expectations are important factors as well.
Depending on the environment, Software Architect will be having a mix of the following skills and traits:
- being a team player,
- decomposing complex problems into smaller pieces,
- identifying and defining problems,
- creating C4 diagrams,
- creating UML and Sequence Diagrams,
- creating Infrastructure Diagrams,
- full understanding and experience with SDLC,
- writing good technical documentation,
- technical expertise backed up with solid development experience,
- explaining complicated matters to both technical and non-technical team members and stakeholders,
- team management and mentoring,
- empathy and imagination that allow for switching contexts and analyzing problems from different perspectives,
- experience with designing and implementing Cloud Infrastructure,
- working in DevOps culture,
- ensuring coding standards are consistent,
- designing components and ensuring that contracts between them are respected (for example, the shape of API).
That’s all nice when you read it, but what bringing a Software Architect to the project actually provides?
Benefits of hiring a Software Architect
Any developer will quickly realize if the Software Architecture they work with is well-made.
Good Software Architecture will look seamless. It will feel “just right”. When it’s done right, there is a high chance you won’t be thinking too much about architecture. In the everyday job of a Software Engineer, the architecture will make them feel empowered. It will be as if the software itself helped you write code rather than forced you into a battle for every new feature.
Below, I have written some benefits Software Architects brings to the table:
- the application is easier and faster to test,
- adding new features is as easy as it was on an earlier level of the product life,
- developers feel empowered and helped to deliver new features,
- code degeneration is slower over the time of development,
- integration between modules is easier and faster,
- the chosen infrastructure provides flexibility and scalability,
- the IT system is Agile enough to keep up with the business environment delivering the desired value,
- low overhead for understanding the purpose of different software units,
- software solves business problems better and in a more effective way,
- possible issues are identified before they occur or have possible solutions prepared beforehand,
- documentation provides a high level of insights into how a system operates on multiple levels of complexity,
- core business values are protected by abstraction providing multiple implementation possibilities, while the domain is not spoiled by implementation details.
Why is the value of a Software Architect not easy to assess at first glance?
Getting a skilled Software Architect is essential regardless of whether you are just starting up with a small SaaS application, or you have a complex production system, but it is not always easy to see the need for a Software Architect at first glance, because the contribution is not always expressed in tangible deliverables.
Most of the time, you will encounter issues that could be solved in more than one way (often more than two or three ways). Because usually there are multiple requirements, which can sometimes be mutually exclusive. Finding a one-size-fits-all solution can be a tricky task. Typically, these are open questions such as:
- Should I sacrifice development speed for better maintainability of a system in the future?
- How can I protect my system from changes in areas where I have no jurisdiction?
- How can I better solve business needs?
Finally, the same way a traditional Architect designs a building and then lets the builders do the actual work with concrete, bricks, and roofs, a Software Architect delegates well-established and ready-to-be-developed components to the developers.
Moreover, it is crucial that a Software Architect oversees the implementation, ensuring it respects the coding standards, contracts, and abstraction it was designed for.
Usually, most of the architect’s work is done before the project starts. And yet, we should not underestimate the value that an architect can bring in the middle and near the end of the project. Some issues can be identified only during the implementation.
Sometimes, business requirements change along the way, and at times it’s just helpful to be able to consult day-to-day problems. No matter at which stage your project is, it can benefit from Architect insights.
The value of Software Architect – summary
Software Architecture is a complex subject, but I think that at this point you should know that:
- Software Architecture is a foundation upon which your application depends; if the foundation is of good quality, the same will go for the whole app,
- developers absolutely love working with an app that has great Software Architecture; they are more efficient and happier,
- bringing a skilled Software Architect on board may incur some costs at the very beginning, but if your application is to succeed in the market, the investment will easily pay off in the future.
- a good Software Architect should have both hard skills (e.g. the knowledge of unified modeling language) and soft skills.
Having a Software Architect on your side can help you solve your problems easier, faster, and in a more efficient way. That’s we highly recommend people can find software architect jobs on your website.
No matter what environment and scale you are operating, an experienced Software Architect will be able to help you make your software more secure, resilient, faster, and friendlier to work with. Software Architects can help you during all project stages.
Is your software architecture of choice microservices?
We have compiled a resource full of expert insights and data on the state of microservices. Check it out!