Apiumhub team organized a Software Architecture Interview with João Rosa – GSAS speaker, Apium Academy Professor and Strategic Software Delivery Consultant @ Xebia to know more about key issues he has faced in the industry as well as recommendations he would like to give to his software architecture peers. 


Software Architecture Interview with João Rosa


1. What is software architecture for you?

Software architecture is the game of trade-offs as I usually call it. It needs to balance different aspects of the sociotechnical system in order to have a coherent architecture while delivering value. Every context is unique, and there are different heuristics and patterns in our industry that can support our decision-making process.

2. What are the top 3 soft skills you believe software architects need?

I believe that a software architect needs to have strong communication skills, ability to negotiate at all levels and have facilitation skills. The role of a software architect is shifting since the organisations are adopting technologies like cloud; due to his dynamic and ephemeral nature, allows systems to grow in the complexity, and it is hard to have a single mental model of the technical system. Having those 3 soft skills allows software architects to navigate complexity, having a coherent action while fostering diversity.

3. What are the top 3 responsibilities of a Software Architect within the company?

It is highly dependent on the organisation size, industry and even geographical area. I’m in Europe, and most of my experiences are in European countries. One can argue that a software architect is responsible (1) to help the organisation to translate the options to strategic plans; (2) facilitate the organisation to make sense of the reality, from a complexity theory point of view; (3) facilitate, coach and mentor teams that create software, enabling the agency of a department and/or organisation

4. What are the key software architecture attributes?

Software architecture should be compared to a building. We build and live in it. Therefore, attributes as fit for purpose, ability to adapt (in a viable time) to new/different needs and resilience to adverse conditions are key attributes.

5. What are the key software architecture metrics?

I’m a fan of Accelerate book, the work started by Dr. Nicole Forsgren. I use the four metrics that predict the software delivery & operational performance: (1) lead time for changes, (2) deployment frequency, (3) time to restore service, (4) change failure rate. On top of it, I also recommend using a fifth metric from the Chaos Engineering communication, mean time to detect.
On a more granular level, cohesion and coupling metrics are important. Last but not the least, team metrics: happiness, ability to reteaming and agency are crucial to balance the sociotechnical system.

6. Critical Thinking vs System thinking in software architecture, what does it mean for you?

I’m a student of complexity theory, in particular Cynefin from Dave Snowden. I use it daily, to help make sense of reality. As such, I use different thinking methods depending on which domain (from a Cynefin point of view) we are located. In the ordered domains, Clear and Complicated, system thinking is very powerful. However, most of the time we are in the unordered domains, namely Complex. We need different methods, techniques and tools to navigate those challenges since they have an interesting attribute: every time that we interact with a complex problem, the problem changes itself. We can have intended and unintended consequences, and that is why some methods that assume an ordered view of the world falls short.
In terms of software architecture, it enables me to have the right conversation at the right time. Based on the domain (Clear, Complicated, Complex, Chaotic or Confused) I can manage my own expectations and other expectations, using proper methods or tools for the challenge at hand.

7. What is your opinion about Innovation vs Pragmatism?

It depends. Short and sweet (also the preferred jargon of consultants). There are multiple dimensions, and I tend to fall back to the work of Simon Wardley to help me chose the correct approach with regards to the evolution phase of the product (assuming digital attributes where software architecture is key). I also combine it with the X3 model from Kent Beck. Saying that, you need both, however, the tools, techniques and behaviour are different.
If we are innovating, trying to disrupt a market, creating a product, we need to keep the ability to the flexible and pivot. Stability of the system doesn’t come as first thought. “Things” tend to be chaotic, and if we are innovating, it is important to read weak signals to help move the product (and architecture) in the right direction. What is the right direction? That is the hard one, since innovation is uncertain, and experiments and efforts fail. The ability to do safe-to-fail experiments is crucial to innovate.
On the other side, we have pragmatism. If the product and the underline architecture are in an evolution phase such as Product (+rental), using Simon’s Wardley lingo), removing waste and be pragmatic is key. It will allow retaining the core capabilities of the product and focus on the parts of the software architecture that need to increase resilience and stability, removing features that are not needed for this evolution phase.
Again, as a software architect is our job to facilitate the organisation to use adequate methods to problem-solving. Taking into account multiple dimensions will give the necessary data points to make a decision.

8. What are your thoughts on intellectual control?

To frame my reply, let’s assume that we are using the definition of intellectual control from George Fairbanks (you can see the keynote here). As the software industry evolves, we lose intellectual control over the full stack. When I say full stack is from the webpage presented in the browser, down to electrical impulses in optic fibre cables. It is too much knowledge to know all the details. Let’s face it, control is an illusion.
Base on this premise, we need to look to the value that we create. Once again, using Simon’s Wardley work, every time that something is commoditised we are able to create a high order system. Let’s make it tangible. With the rise of the cloud, we start to have commodity resources, as a started virtual machines. The way to operate a fleet of virtual machines in the cloud become standardise when comparing to the ones that we operate in our datacenter. It allowed to different paradigms to emerge, as for example functions-as-a-service (different names in different cloud providers). Although it is an abstraction (we still have servers and network components), we focus on the value creation in different areas. Everything evolves, and we need to embrace it. As such, losing intellectual control over the full stack is a trade-off to be able to create high order systems.

9. What are your insights about Performance & Responsiveness?

I see people use them as if the concepts are interchangeable, but in my opinion, they are not. Performance is a concept that has different attributes in different contexts, and responsiveness is more narrowed. As an example, Amazon has amazing responsiveness, where even if your payment method is not correct (beyond basic validations), they accept it. The system behind the scenes needs to have performance (handle payments at Amazon scale) to give feedback to me in a timely fashion. Once, my credit card expired, and they still accepted the order, but a few minutes later I received a notification that I need to review my payment method.
I hope with this example, you can think about the wider applicability of performance, namely in what is acceptable for a persona point of view.

10. What are your expectations regarding software architecture events, do you think in 2021 everything will be online?

I believe that most of the events will be only, with some in a hybrid fashion. We still have challenges in regards to the pandemic, but I would leave those to the specialist and to my part: stay at home and wear a mask.

11. What software architecture trends have you noticed this year?

Flow architecture patterns and implementations, and adoption of cloud-native components. It is leading the organisations to question the current status quo, and if they need to adapt the way that the flow of value goes through the organisation.
On the reverse side, microservices are coming to what I call enlightenment, with companies realising that is not about how small it is, but how to reason about the correct boundaries. For that I see Domain-Driven Design continue to have a steady grow, helping teams and organisations to reason about the boundaries of their systems before starting to building the next new thing.

12. Do you believe that silver bullets exist in software architecture?

I don’t believe in silver bullets. I do believe in heuristics (context-dependent) and patterns (proven heuristics that worked in different contexts). Those are building blocks that I use to build a coherent architecture for the context at hand.
What I deeply believe is that diversity is key to foster a sound architecture, and it should be the first concern for any organisation!

13. What is your opinion about Elasticity vs Scalability?

Different attributes, with different weight for different architectures. Elasticity usually is an attribute that software architects seek in the cloud providers, where scalability usually we discuss when we have governing constraints such as our data centres.
On the flip side, in a sociotechnical system, we can think about the scalability of an organisation, where it is hard to scale in a linear fashion, at least in the software domain. Adding more people to teams doesn’t necessarily mean that you will have more throughput. Sometimes just contributes to accidental complexity, and grids the system to a halt to do all of the moving parts. It is crucial to understand the landscape, and as I wrote before, using frameworks, tools and techniques like Cynefin and Wardley Maps to use the right concepts at on the correct places.

14. Could you share your insights regarding software architecture patterns?

Patterns are useful, give us a common language, and can frame potential solutions for or challenges. As architect I started to collect heuristics after Rebecca Wifrs-Brock challenge me. It is interesting to think about those (heurisitics and patterns), discuss with colleagues, engage with the community. It generates new insights, and helps to advance the profession.

15. What recommendation would you give to big international companies in terms of software architecture?

There is no silver bullet, magic sauce and one-size fits-all approach. Recognize complexity, and embrace it.

16. What recommendation would you give to startups in terms of software architecture?

Everything is ephemeral, and what you are architecting today may not fit the market tomorrow. Saying that I will give two concrete recommendations: use Domain-Driven Design to design the system boundaries, including models (what is in and what is out), and implement using the Ports & Adapters pattern. It is a powerful pattern that allows start-ups to pivot when they need, repurposing the software, or even change platforms due to their own success, without affecting the core of the software.

17. What are the main issues in software architecture?

In my opinion silver bullets. As industry we have patterns, and we combine them in different ways. When we don’t understand here it came from we assume that we should trash the past and embrace the flavour of the day.
Being able of recognise the patterns will mitigate this issue.

18. Your software architecture journey: lessons learned?

Understand what a sociotechnical system is paramount. In the beginning of my software architecture journey I thought that mastering the techniques and platforms was the ingredient to success. I learnt in the hard way that communication is key, and then the cultural and social structures dictate how ideas propagate in a organisation. Today I focus on people, teams and supporting structures that enable autonomy and agency. Technology cames after.

19. Your BIO, name, email, website, social media networks (anything you would like to share)

João is a Interim CTO for hire and a Strategic Software Delivery Consultant at Xebia. He focuses on helping teams and organizations to make strategic decisions regarding the software; aligning teams and software to optimize the stream-based value. He believes in the power of collaboration and is a fan of visual collaboration tools.

He is the curator of the bool Visual Collaboration Tools and the host of the Software Crafts Podcast.

When he is not on his duties, you can find him travelling with his daughter and wife, or laying down on the beach reading a book. João is an amateur cook in his remaining time.

Email | Website | Linkedin | Twitter