Conf42 JavaScript 2021 - Online

The (too) Many Faces Of Architecture

Video size:

Abstract

Too often we encounter the idea that software architecture is an esoteric concept, of which only the chosen ones, and at the right time, are allowed to discuss. Well, how about a little change of perspective?

With software development and users’ needs evolving so fast, we don’t afford the luxury of rewriting systems from scratch just because teams fail to understand what they are building. Today’s software developers are tomorrow’s architects. We must challenge them to step away from the IDE and understand how the architecture evolves in order to create a common and stable ground in terms of quality, performance, reliability, and scalability. At the same time, software architects need to step away from the abstractions and stay updated to the project development reality.

This session revolves around finding the right ways of intertwining up-front architecture, API design & coding while maintaining a continuous focus on architecture evolution.

Summary

  • Mihaelaroxana Ghidersa is a software engineer. He says he's here to contribute to creating better teams and better project. He wants to put aside rules, positioning levels, never ending processes, and just look at a team.
  • So what is architecture when it comes to clearly defining what architecture is? I think that architects is a base structure upon which we build. Step by step, one component after another, we create relationship between them. Consider that all this structure and decisions are being made while taking in consideration the whole picture of the product.
  • Software architecture is focused on the entire system. System design shapes things more at code level. Strong system design helps the development team be more efficient. Best solution is to build an architecture that anticipates change and evolution in a cost efficient way.
  • There are so many benefits to having a look from above at what you're working. By having this mindset switch, I was able to quit some of the teams that I've grown to believe in time. More important is to discuss them and break the toxic cycle.
  • You don't become architect only by receiving a promotion. Gradually working with some situations, growing the expertise, gaining the attitude in time, that will help you faces the role as it comes. There has been an evolution within this role from a traditional way of doing things to a more like hipster style.
  • The architecture is not being built by one person only. We need to quit this mindset that the architect architects the architecture. An architects uses the technical expertise of the team while also growing the team and with the team. Now we can consider that some of the myths were invalidated.
  • There's a difference between management and leadership. I really think that an architect should be a leader. A leader that has a very good overview, that can give insights both functional and nonfunctional. People really need to be in touch with the architects.
  • An architect's role is both worrying about the important technical decisions, but also he has to lead, give the team a direction. A team with the same view and that finds it easy to collaborate is more engaged and delivers both quality and quantity. Being an architects is challenging and takes a lot of knowledge and experience.
  • becoming a software architect is not something that you become automatically. Architecture is a part of the development process, part that later is taken over and implemented. In the end, software architecture is all about understanding how the system works. Can actually every developer be an architect?
  • As an architect, you need to understand the concept of the application from a developer's perspective. Stay close to the team and collaborate with the team from time to time. Architecture is not an esoteric concept, but it's not an easy road either.

Transcript

This transcript was autogenerated. To make changes, submit a PR.
Hello. Happy to have you with me today. My name is Mihaelaroxana Ghidersa. I'm a software engineer and besides being passionate about software and technology, I also like to combine it with this public speaking area and more like in the area of sharing my experiences, gather, bring from other people's experiences and things like this just to shape content that I can share in presentations as I'm doing today. So I really want to take to the organizers for having me. I feel honored to be part of such an amazing lineup of speakers. First of all, I got to say that this time is not going to be so much about technical stuff. I'm not going to give you the perspective on the best architects. Actually, I think this is a toxic tree that we have sometimes because we think that it's always about the technical knowledge. We need to just stop for a minute, put aside our rules, positioning levels, never ending processes, and just look at a team and use the expertise that we have at hand and the knowledge to see the shape of the current context. Developers are real people. I know it's hard to understand it, but they are real people. So we need so much to take care of teams, dynamics and how we actually build the product in the end, how we collaborate in building that product. My feeling is that when it comes to technical matters, we find a lot of resources on the Internet, so it's easier to actually work with that part, easier than working with the way we interact at team level, the way we shape team dynamics. But before that, I want to let something very clear from the beginning, beyond delivering a presentation, I'm here to contribute to creating better teams and better project. And I'm also extremely interested in learning from you and your experience. So just join me in this discussion. So what is architecture when it comes to clearly defining what architecture is? Along the way I found many interpretations and definitions, many of them confusing abstractions. The more I gain, more knowledge I encounter also some that were more, let's say, more simple and on point. But the general feeling was that they were pretty abstract for a developer that is in the beginning of his or her career. So beside all those definitions, abstract or whatsoever, I think that architects is a base structure upon which we build. Step by step, one component after another, we create relationship between them. Of course high level, we are talking about the high level. Consider that all this structure and decisions regarding this structure are being made while taking in consideration the whole picture of the product. So when I'm talking whole picture, I'm not talking only technical matters, I'm also talking about feedback and perspective for more stakeholders. Another important aspect to discuss now that we've opened the discussion about architecture, is that in many cases it is confused with design. And this makes me think that it's another consequence of the fact that we have this tendency of defining everything in a very abstractions way from one level of experience. So, as already discussed, architects is a structure. It's a blueprint that defines our high level units, the way they interact, the way they evolve, and so on. On the other hand, system design shapes things more at code level, the way each class evolves, the propose of each element, and so on. Having a strong system design helps the development team be more efficient and organized in terms of understanding what are the responsibilities of some functions, some modules, some classes, what they can and can't do, and so on. All of this is possible by identifying a systems design so we can later decide maybe what kind of design patterns we should use in certain contexts. Extending the discussion a bit about design. Well, actually, design and architecture, I really liked how Grady Bach nicely talks about how architecture represents the significant design decisions that shape a system where significance is measured by the cost of change, how nicely put and how nicely having into consideration this cost. And we will also discuss about cost and impact. But basically, if it's just to simplify everything, significant decisions are architects, everything else is designed. His words. Later on, we will go a bit deeper also in the decision making subject. But before I just want to conclude that simply says software architecture is focused on the entire system. Software design focuses on more specific levels. Since I'm coding people, I also like this presentation from Simon Brown that he's saying that architectural decisions are the ones that you cannot reverse without a high degree of effort. You can't change an architectural decision in an afternoon. So just think about this when you make your own change in the future in the architecture, or maybe also in the code, but precisely because we can change a decision related to architecture in an afternoon, the first step in architects software is about understanding what is significant and why. Because when we focus very much on code, on how to follow some well tested approaches and just check our tasks and feel happy about the fact that we've just finished a day, well, sometimes we ignore architecture and think that it's not important. What we miss is the actual understanding that there are actually some very important benefits of getting the big picture. You get to understand how components in the system should interact. You get to understand the responsibility of the components, the impact that each component has, and very important, the cost in time of the changes that I'm going to do. Having an overview on the architectural dynamics helps answering questions like this. Above all, I really dare to say that the scalability to predict change, it's extremely important. And you know how Darwin's theory says that the species that survives the longest is not the strongest one, but the one that adapts better to change? Well, if Darwin would have worked in software development, I think that he would have stated that the system that survives longer is not the system that has the strongest banners of things like this, but the system that has an architects that is able to predict and adapt better to change. So the best solution is to build an architecture that anticipates change and evolution in a cost efficient way. And this is something that as developers we can't ignore. So just take your heads out of the ide and let's continue the discussion. So we are discussing before about how we lose perspective and just give importance to only some pieces. Other times we get stuck into the mindset that we have to just mind our own business, do our job, focus on the things that we have in the job description and not concern about things like architects. This is a very wrong way of looking at things because guess what, we are building upon that architects. And there are so many benefits to having a look from above at what you're working. I will give you my perspective in a moment that I just stepped a bit away from the id and this was because some things were not clear and I became frustrated at some point because I wasn't understand some of the things that I had to do. So I just looked up and tried to see exactly what is happening. I started asking questions and suddenly instead of just complaining about problems that we were having in the system, I started looking for solutions and trying things in order to make things work. So I was able to see where some technical guidance might be needed, where I wasn't having the knowledge to actually give an opinion or maybe to understanding what is happening in the system. But I was always also able to visualize component interactions at a high level and it changed the way I looked at things. We changed my perspective and I actually started liking my job more. If you ever had the situations like this, I'm sure you understand that you just have this drive of doing things because now everything just makes sense. I felt that. And besides this pleasure, by having this mindset switch, I was able to quit some of the teams that I've grown to believe in time, such as, okay, software architecture is inflexible and forever like someone said it in the beginning and that's it. Or the architect is not my problem, is an architect's problem. So I'm just going to go deal with my task or architecture is not about coding. Like architects just discuss business stuff and that's it. They don't look at the code, they don't care what we are doing in the code. And I'm pretty sure that at least one of this, it was part of your career, you had it at some point. But more important is to discuss them and break the toxic cycle. And as the discussion will evolve, you will see that we'll just destroy them one by one. And by being able to destroy them one by one, we have to think about this person that seems to be sometimes maybe in the traditional way of doing things, seemed to be like the God of architecture. So what is it? An architect, independently of what we are about to discuss or how often the role of an architect is pretty easy to confuse you. I really think that you don't become architect only by receiving a promotion. There is a strong need for evolution. Gradually working with some situations, growing the expertise, gaining the attitude in time, that will help you faces the role as it comes. Because this role ones both with challenges and a lot of decision making at the same time, I feel that there has been an evolution within this role, as I was saying, from a traditional way of doing things to a more like hipster style, more open and relaxed approach. So we are going to put in balance why we should implement certain approaches over others. For the longest time, as I was saying, it seemed that the architects is, besides the fact that we can define the role, we weren't able to define the role that good. It seemed also like you can't touch the architect. He's just standing in there doing very important decisions and you are just staying in front of the ide and coding. And I'm not exaggerating because I've been part of a team where I think it was my first project ever and I've been in that team for like over a year. And I don't know who the architect was. I never met him, I never interacted, I never. Nothing about the architect and also about the architecture. It was like we were so just doing things in our tasks and that's it. So you can understand that in the moment when I changed to another team and the architects was standing like the desk next to me and he was so open to discussion and always being involved without actually being part of the development team directly, and he was just open for discussion. He was there for the people that needed him, but he was building his things also, and he was just available when we needed to discuss some things that were important. So, yeah, although we have all sorts of situations like this, for me, this kind of switch helped me to actually understand the difference between a title and a role. And this is the first thing that I want to discuss, the fact that the architecture is not being built by one person only. We need to just quit this mindset that the architect architects the architecture. As I was saying, one of the myths that we are discussing before, I'm not saying that teams shouldn't have someone clearly ones a role, but somewhere in time, any team member can come with ideas and insights that can impact the current state of architects. This is what I mean by a flexible collaboration, a flexible role that stands in collaboration actually. Then of course, again, for the longest time, the feeling was that the architect has to know it all and has to own the whole stack. And I was thinking like, oh my God, every technology and every detail. That is preposterous. Why would anyone ever want to have such pressure and would ever consider taking this role? Who would ever be good enough for this role if the requirements are so unrealistic? Well, how about we usually use the technical expertise of the team while raising the teams, taking part in the development process, either by pair programming, doing some code reviews, just looking from time to time to what is happening in the code base, gives you the smallest effort, gives you an idea about whether or not your architects perspectives are grounded in reality. The sooner you have this kind of feedback, the sooner you can ensure that you work on the evolution of an architects that is actually implementable, that works with real life scenarios, and it can be implemented by real people. Then we have the third point that the architect used to in the traditional way of doing things, the architect was defining and actually taking care that the architecture stays like that. And I was thinking like, I can't believe that we need architects. Police. Is architecture something so fixed and hard to implement that it needs someone to guard it? But how about understanding the system, combining this understanding with collaboration and feedback, as we were previously discussing, and create a more grounded in reality system, a system that is understood by the team, and a system that the team is actually able to build and understand why it is important to build in a certain way, why it is important to enforce some approaches, some best practices, some patterns and things like this. So definitely architect, as we are saying, it's a flexible role. An architects uses the technical expertise of the team while also growing the team and with the team. And of course the architect understands the system, keeps high level mindset, but also looks at a developer's perspective and tries to see if his objectives and his vision is actually understood and implementable in the end. So now we can consider that some of the myths were invalidated and we will discuss later even more details to bring some light. But right now I want to go a bit and discuss about two approaches when it comes to the architect role. One is leadership over management and how we are actually placing this role. And the other one is expertise over knowing it, everything. And somehow on this part we already touched some details. If there is something that you remember from this talk about your architect and maybe something that you can just look at your architect and see if he's doing that, please make these two things. That's something. So let's discuss the first ones, which is leadership goes over management. There's a difference between management and leadership. Management is a lot about tasks, very specific steps, achieving the end goal, which is not a bad thing. On the other part though, leadership is about people, who you are, how you get to those people, how you inspire them, how open are you to those people. I really think that an architect should be a leader. A leader that has a very good overview, that has experience in a lot of areas and that can give insights both functional and nonfunctional. He actually has the responsibility to grow the team in the end. And maybe something that, again, I've seen in teams, and it seems that it's not clear, is that each member of the team has a certain level of knowledge. So as an architects, you have in the moment that you approach a team, you have to find a way, a common language in order to make sure that everyone understand what you are trying to enforce in the team. So everyone in the development teams needs to see the essence of software architecture, the consequences of not thinking about it. Before we start talking about things like, you know, the way we evaluate people and the way we evaluate performance and other things and language and things like this, we have to understand the consequences of our work. And to be honest, some recent events that I witnessed showed me that people really need to be in touch with the architects. People really need to be able to ask the architect about some of the decisions to understand what is happening. And I've seen this in one of the teams that I worked with where we barely, this is another team, it's not the first team that I was telling you about. We barely interacted with the architect. So until the moment that I just, I'm very persistent. So I just went to him and asked for explanations and things like this. Well, in the moment that I did this and the moment that we actually received some answers and things like this, the team expressed, the rest of the team also expressed the need of understanding the context and how important is and how they don't see what exactly they are building. At the end of the day, what is the result as a whole. So we don't usually talk about the soft side of being a software architect, even though it's so important. I felt it and I'm sure that a lot of you also felt it. If there are any in there that were just fine. Well, with the situation when I had for you, it means that you had a real leader in that. But in the real world, an architect's role is both worrying about the important technical decisions, but also he has to lead, give the team a direction. Collaborate coach we are basically talking about a full time leadership role. So yeah, soft skills are extremely important and I'm just going to insist on this only once more. A team with the same view and that finds it easy to collaborate, is more engaged and delivers both quality and quantity. So team dynamics are so important and the architect has a very important part in all this process. Then we discuss about the expertise of our knowing it all. We were discussing already, owning the whole stack is not possible, more like users, also the expertise of the team. And I think that the real skill of an architect is not mastering the whole stack and knowing it everything and being the best of the best and things like this. I think it needs to have some background in software development. Yes, but the most important I think is the ability to switch between code and implementation details and the architects big picture. Because yes, as an architect you should own best practices, approaches, overview and design and patterns that bring more value to some of the technologies in order to choose the right technology or in order to just go with the project in the right direction. But when it comes to keeping an eye on details, low level code, I think it's true value exists in using the technical expertise of the team. The software architectural can sometimes even for one idea, be of another team member. We just need to create trustful and a trustful environment. An environment where we can collaborate, where people can express their ideas and show their expertise, be confident enough to show what they know and learn on the process. So being an architects is challenging and takes a lot of knowledge and experience. At the same time, you dont need to be an expert in any particular area of software development to become one. It is better to have a wide understand of software development and be able to communicate your knowledge effectively while being backed up by best practices. I find it important to know that you don't have to be the God of the technology stack in order to become an architect. I find it useful to have a big picture, to have emotional intelligence and also coaching. So it's a very good combination of technical and soft skills. More specific, I really find that there are some general set of skills that embody the architect role, like being pragmatic when it comes to requirements and constraints. Being able, and this is something that is being built in time and with experience of being able to know where you can take a risk and where you can't take a risk, and be able to make some decisions regarding design. Be very careful in the moment that you have to make some decisions. If you gain some technical depth, well, how you are going to manage that technical depth, like keep track of that, because at some point it might get so hard to manage and the architectural vision might be so damaged that you can't do much about it. And also the combination with the other soft skills that we've discussed, such as keeping close with the team, be a leader, inspire people, grow, raise people, and try to be the best influence in the team and keep everyone aligned. We were talking before about taking risks, making some decisions. Well, each project that I ever worked on has evolves in time. Requirements changed because maybe of the competition. So they had to change the main features or you have to be creative because some new technologies and trends appeared. And yeah, you need to stay up to date sometimes when it brings value to your product. Maybe some stakeholders change the way they look at features and they change the perspective, they change what they wanted, they try to want to try something different, where sooner or later, depending on the context and domain, something is going to change. What we need is to actually think in terms of building tolerance to change in the system. Observe where and what kind of changes appear, iterations, and this way you can expect these kind of changes and be prepared to meet them. That's why we are doing so much analyzing, because I really liked this idea from Jane's clear, with saying no and yes and how no is a choice and yes is a responsibility. Because every time we assume a final decision, we are also saying no to some more details that we might receive in time in the future. Details that might be significant and might help us make a more informed decision that once you committed to something, you already decided how that future block of time will be spent and how the product and the architecture of structure will evolve. So be very careful in what exactly you invest. Just think about it. So making decisions concerning architectural aspects is a very sensitive aspect because those decisions have a huge impact. And one of the best practices in software development is to avoid making decisions until the very last moment. Because, yeah, especially in architecture, there is a high level of uncertainty. So a good strategy in order to be prepared to make commitment is gathering a lot of feedback. If we talk about an existing system. But yeah, dont get lost in details and accept there are some parts of the project that you are just discovering time and that is okay, but also especially for the existing products, accept when you made a bad decision in the past and just change the perspective. Accept that maybe some parts of the systems can be, you can rethink of them and give them another shape. A better strategy for delaying commitments and making decisions when developing complex is not actually delaying the commitment, but more like always build your system in terms of evolvable structures. Like always keep in mind that you need some degree of some capacity for change into the system. So keep your system open to change in the future. Now I would like to point that becoming a software architect is not something that you become automatically, as we discussed, it's a role, even though it's not easy to strictly define it, just as architecture. What a coincidence. Well, we actually can agree on the fact that the road to coding an architect is full of challenges and experiences and expertise and confidence, and we just build upon that in order to be ready for the, as I was mentioning before, the challenges and the decisions that you are about to take. So you have to be ready for the role. You can just be named an architect just like that. But from what we've discussed, maybe with some exceptions, architecture is a part of the development process, part that later is taken over and implemented. Actually in the team architects is not about forgetting about implementation details and getting drawn in abstractions, but about keeping them balanced. Sometimes maybe you put more accent in one side, sometimes maybe the accent goes on another side. I think that you become a good architect when you are able to slightly move from one to the other. And I was able to witness this and I was very inspired of an architect that did something like this. So in the end, software architecture is all about understanding how the system works as a whole. And since we are discussing in here about duties and professional duties, I think that on one side the developers should cross the line and break the rules and be curious and always check on how you ended up with doing what you're doing in the code and how your code complements the structure of the system. Then also the architect should break the rules and make more informed and reality oriented decisions. Then we are talking about, okay, but can actually every developer be an architects or what's the deal? How we are going to grow to that role? Because I've received this question before. Well, it's not an easy road and sometimes you might be thinking, okay, but if it's not something clearly defined and the collaboration with a team is so strong, couldn't we just use self organizing teams and just get it over with? This architects troll and whatever we are discussing. Well, I don't agree with that part. I think that an architects in a system that evolves and a system that in times adds up complexity, it's important to insist and have this role defined and have a person with the responsibility of the role because the team components, it changes. Every team member has a different level of engagement. You need someone that keeps things on track. You need someone that stays engaged with the product that we are building. Because if you are doing things right and you are keeping the relationship with the team and also with the other stakeholders and try to manage all this context well, the results are visible and an architects is important in the team. If we are discussing maybe a product that just needed some structure in the beginning, a product that is not that complex, that is not evolving that much, the architects can be like someone that maybe just from time to time goes into the teams, or maybe in the beginning gives a structure and that's it. If it's a very simple product that does not evolve in time, it's just fine. From my perspective whatsoever, the process of becoming an architect is not a very well defined, as I was saying, we don't have like the ten steps of becoming an architect. No, you can just look at the ones that you have near you, undertake some parts of the software architects role, architect role without actually losing the perspective that you have as a developer. Just try to contribute. Look at what maybe the closest architect is coding or the closest, most senior person that you have and try to do it step by step, even though maybe your goal is not to become an architect, it's just to become a professional with more like go to the next level. It's also okay to look at someone's journey and just go and ask, okay, what have you done to actually work in this role and what should I do? And things like this. So your evolution is your responsibility. So go ask well about this. I think we've discussed how important it is to actually change perspective, change roles from time to time. I really think that as an architect, you need to understand the concept of the application from a developer's perspective and take more informed and realistic decisions. And this way, by having clear what they are building, also the team will understand the impact and the importance of their work. And yeah, we'll trust you more, but also they will be more motivated and engaged with the product in the end because they are able to see the whole picture. So yeah, I don't think that coders should just code and the architect should be concerned only with the architecture. Sometimes it's good to just change the revolves and wear someone else's shoes just to see how we can impact their work. Although we discussed a lot about the best ways to do things, there always appears a gap between the development team and the architect. Unless the effort is mutual and both parts the effort, you can't make things work other way. Software development is a team activity and in the end even unintentional. We help each other grow. For the developers that are thinking maybe about taking the role of an architect or just wanting to step up to the next level, don't be afraid to look outside your daily task. Try to understand the context of the product. When you don't understand something, speak up. When you have maybe something to some solution idea, share it, try to get feedback on that and always ask to be involved in the decision making. If again you have a perspective and some arguments for the ideas that you are promoting. Architecture is not an esoteric concept, but it's not an easy road either. And one step at a time, you can grow in the direction that you find interesting. Always surround yourself with people that are better than you. See how they approach certain areas, read their code, look at the decision and see or think about how would you have decided in your case it then for the architect? Well, don't be so you so obsessed with your solution, except that you are also doing some bad decisions. Stay close to the team and collaborate with the team from time to time. Get your hands dirty, because when it comes to building the right architecture and for the right context, I came to learn that. Actually I came to learn this the hard way, that it's important to have the architects state engaged with a team. The value this approach brings in terms of feedback and collaboration and instant click when it comes to some solutions is incredible. On the other side is the best way to keep the team aware about the technical vision and the architects direction and you don't have to be 100% involved in the code. Do some pad programming, look a bit from time to time in the code base. Whatever works for you. Just don't get lost in abstraction. Being a developer is not easy. Right. And being an architect is definitely not easy either. What I really believe in is the amazing benefit. Benefit? Yeah, of every development teams considering architecture. Failing to do this just brings inconsistencies, integration issues, code base that is hard to understand and to extend. And yeah, just not mentioning a lot of the quality attributes that we should enforce. Just becoming harder and harder to maintaining as the system evolves. I'll finish by leaving you with two ideas for developers, think globally, understand the whole picture and try to implement in the details towards that big picture. And for the architects, we'll work on the abstractions. But please, from time to time, just give an eye to the details, to the code base, collaborate with the team and just try it. And maybe later give me a sign on LinkedIn or Twitter and tell me how it went that for you. Thank you very much. And let's see if there are any questions.
...

Mihaela-Roxana Ghidersa

Technical Lead @ Strongbytes

Mihaela-Roxana Ghidersa's LinkedIn account Mihaela-Roxana Ghidersa's twitter account



Awesome tech events for

Priority access to all content

Video hallway track

Community chat

Exclusive promotions and giveaways