Armchair Architects: The role of Simplicity in Architecture

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
>> Good news we're back with another episode of Armchair Architects, the Azure Enablement Series. That's an ongoing conversation with Eric and Woolley two of the smartest architects I know. This episode, we're going to dig into something super interesting. We're going to talk about the relationship between simplicity and architecture so join us. [MUSIC]. >> Hey, so welcome back to another episode of Armchair Architects as part of the Azure Enablement Show. In the last topic, we were talking a little bit about how to become an architect, and the thing that kept on coming up for us was questions around simplicity and complexity, and I would really love to dive in with my colleagues here, Uli and Eric, into that question. If you folks are up for it, I want to start to dive into the role of simplicity in architecture because I suspect it's really fun to toss off things like I'll make it as simple as possible, but no simpler, and drop the mic and walk away but I suspect there's more to it. Can we talk a little bit about simplicity? Is that your primary goal? Is that a secondary goal when you're designing architectures? Is that not a goal at all, what's the role of simplicity when you're architecting like your architect? >> I think to me, it's more of a philosophy or a pervasive thread that you often have to revisit at every stage when you're asking, as Woolley said before, the why questions. If you're like me from an architecture perspective, you're visualizing the way that these solutions might fit together, and then you're asking yourself whether it's in your brain or if it's on paper, or in your favorite architecture diagramming tool. It is this as simple as it needs to be or is it overly complex and can I reduce it further? Am I providing too many knobs and bells and whistles? Can I create a more coarse-grained API interface across my microservice architecture and that way I can actually make it easier on the people that have to consume it? To me, it's something that you visit and revisit critically all throughout the architect journey. >> I would add to this and David, you will appreciate this being an operations person. Simplicity is a question that you should ask from multiple dimensions. Eric mentioned the developer pieces in terms of technical simplicity, of course, grained access versus fine-grained access, and so forth. I also look at and have the notion of what happens if stuff breaks at 3 AM in the morning and the developer isn't available to debate the code. How do you tell an operations person how to deal with the system, and the more complex the system is, the more hard it is to effectively go and bring it back online or make sure that the customers can successfully complete the operations, and so for me, simplicity also has to do with, stuff bricks, what happens and then the last piece of that which goes in the similar vein is if I have to update the solution, how do I do this? How many things to have to touch to update the capabilities that I'm building out and the more things I have to touch, the more complex it is, and therefore, the likelihood of failure is much higher than if I keep it simple. >> I remember one of my favorite talks was given by Casey Rosenthal, in which he was discussing the notion of necessary complexity. You're saying, okay, cool, I build something and it runs on my laptop. That's cool but that's not really what you need. You need to put it on somewhere else, and really, if you want to make sure that it doesn't fall over, you want two of them, and so, making redundancy has unnecessary complexity cost to it whereas, if you'd like it's simpler but we all agree that two of them is better than one but I also have not met an architect who doesn't recognize that, going from one to two is a really big leap sometimes when it comes to architectures or one to five, is even bigger, but one to two job. Is there a way of because the thing that's tricky about this is when you're talking about features the thing that's tricky here is, is it possible to retain simplicity even though the incentives are to add features? How do you do that? >> I think it's a scale or a spectrum, almost an imaginary slider, and in one way, if you slide it into the more I'll call it the fine-grained approach higher technical complexity, but more control for consumers of that particular service or application over capability. If you slide it the other way, you get probably a much better user experience that's more tightly integrated, but you give up some of that exposed control capabilities, and it's the things that many developers might want so if you're an ISV, you probably do want to think about what your API surface is going to look like for consumers of that particular service. Also, I would advise that you have to think about the way in which your consumers, your customers, or your organization will consume your components think about what code they will have to write that you're forcing them to write based on the API surface and the other solution architecture that you're building versus the code that they want to write. In other words, is your API a delight to consume, or is it really tough because you have to spend a ton of time stitching together solution components, utilizing surgical code, and making the integration really difficult and not consumable? >> What do you mean by surgical code? I just want to stop you right there. What does surgical code mean? I've not heard that term before. >> To me, a surgical code is any type of integration between components that require a significant amount of wiring up of those components so that they can talk to each other. Everything related to identity and access management to course green or find green API service capabilities. The more powerful I guess an individual components API is, the more you're going to have to do to get that API to talk to another API or talk to your service. >> I guess but I'm still stuck on this notion that says everybody wants more features, everybody wants it, the next revision to be whatever in its work that it didn't have prior very seldom are people done everything's cool. How do you deal with that not done and yet not more complex every step of the way, because otherwise, it seems to imply that the world tends towards complexity, and is that true? Is that an existential truth that I should just get over right now? >> No more functionality does not automatically mean more complexity. It means more surface area potentially from an API perspective like Eric talked about but if you are providing a consistent model, so let's define what is an API these days. On the one side, you have a rest interface that most likely follows open API standards from a shape perspective and exposure perspective. What used to be called swagger, that's now called Open API, and that's certainly one API surface that you want to think about, and again, more APIs means a little bit more complexity but because the API follows a certain standard open API, it's fairly straightforward. As a user of this API will be able to go and say, that's another capability that I have that these guys now provide but because it's the same API shape, it's fairly straightforward. The second type of API that's becoming, I think standard as well is event-based exposure. You effectively have a reactive, which is the risk-based API, and a proactive or observable API where the system raises an API call through technologies like Azure Event Grid or similar, and effectively somebody then says, I'm interested in that event, and again, that's just more event surface, but the consumption is structured and simple. From that perspective, yes, it's more complicated because it's richer, but it's not more complicated because the consumption is straightforward and easy. If you would say, hey, I have APIs, I have a event, and the APIs have different structure. You would use let's say, instead of rest-based APIs only you also throw in some older technologies like soap and just throw some other stuff in where instead of you using consistently JSON and those things you throw in, this has XML, this is JSON, this is a CVS file then gets complicated. For me, consistency is one part of the art of simplicity. >> I'm thinking back to our last discussion, which we were talking about how to become an architect, and it made me think about how we talk about simplicity and complexity. Obviously, it's not binary. This is not either simple or complex. But do we have the right words? Like when you walk into a room and you want to tell somebody, gosh, that seems complex, do we have any terms or ways of talking about this is more or less complex besides more or less complex? Are there ways to say that in a slightly less subjective manner when we say how complex it is? How do you describe complexity is what I'm asking? >> Yeah. One thing that we are really pushing hard on right now in the Azure world is concept count. How many concepts do you as a person that's participating in the technology, or is trying to use the technology, have to understand in order for you to use it? If the concept count goes over five, most people are opting out because it's too complicated. Ideally, you have one major concept, maybe two or three, but that's about it, and most people just don't have the patience or the time to really understand five or more concepts in a single solution. For me, complexity is almost linear with concepts counts. Effectively how many concepts do you have in that solution? If it's too much, it's getting too hard. >> What's an example of a concept? I want to hear what you have to say, Eric, but I just want to make sure that I'm clear on what's an example of a concept? >> I already talked about two concepts. On the one side you have an API, and the other said you have an event. >> I see. Great. >> Those kind of things, those are concepts. But then you throw in, let's say if you are like Eric, in the IoT world, you throw in, there's a device that you have to think about. That's a necessary concept and important concept in IoT. But now you have three, that's still okay. But how many more can you add before the solution gets too complex for people to really grasp and put their head around and use it consistently, which is really what you want? For me, concept count below five is an important simplicity element. >> The term I've heard used is cognitive load, but concept count sounds really close. Well, it looks like you wanted to say something Eric and I cut you off, because I just wanted to get some clarity. >> No, these are all great points. A couple of random thoughts that I think really apply here are like I think of architecture like fractions. Your goal is to reduce them to the lowest common denominator. Whether looking at it in terms of concept counts or going back to that nagging feeling of is this simple enough. The way to do this to justify it as well is that you can't just go out and say, this is my simple architecture, I've solved it, stamped it, and it's done. In many instances, you have to actually show other architects that you've completed the thought. In many cases you'll actually have to be like, well, I considered this approach and these other approaches and these opponents, but I rejected them based on these concepts, and the rejection is that I deliberately chose not to engage with these other alternatives because I was focused on simplicity or integration of design. Or maybe I went more complex, but there was a really good reason why I did that. The other thing I'll say is we oftentimes, as architects, begin to think that we're the only person around that can solve this problem, and as a result, we have to create something new. Even things that I've created before. This is new, this is fun. This is something I can create. Reusing things is the hallmark of a great architect. Looking around and saying what's been done. Whether it's the well architected framework on our side or others or something that you've done or a colleague of yours have done, beginning the conversation with what patterns, what paradigms, what architectures exist that I can reuse before I invent, I think is something that's important. >> That's a really important point, Eric, because there's another dimension on simplicity versus complexity. We always assume that solutions get built and then it's done. That is obviously not true. We have solutions that are running on mainframes since 30 years, and they still get maintained. They get updated. You have code bases on Windows that are 20 years old and they get updated. Being able to update a solution, not just from a components perspective that you depend on, but your own code, requires you to also be not necessarily simple, but keep it as simple as you possibly can because you might not be around to explain what was going on. You might have moved on from the company or the solution, and so some other person has to now go in and understand, oh, this is what this person meant when he designed or she designed this capability and so forth. For me, operational perspective and maintenance perspectives are something that are often overlooked by people that just design and build solutions, because sometimes they're not around when things go haywire or things have to move forward with new capability and so forth. For me, that's another set of aspects I would throw into this conversation. >> Well, this is one of the reasons why I initially had some questions about the term well architected framework, because often when you think of architect, you think, oh, I heard an architect, they told me how to build the thing and they designed the thing, they built it, and then they walked away because you don't have the architect knocking at your door going, hey, would you like to architect some more? The conclusion I came to is, is that the key thing is staying in a well architected state. That's one of the things that architects can do, is they can keep you in that state because for very many reasons that we won't go into. But let's pretty go on. You can drop out of that state of feeling well architected, and it's interesting to me to hear you discuss architectural not only as building things, but also like they might walk into a room and help you simplify what you're seeing on the whiteboard that already exists, and that sounds really cool. One of the things that Uli said a moment ago was about operations and was this question about trying to keep things running, which segues us nicely into something else that I know we want to talk to you about, which is what to do in the situations where you've got architectures and applications and services that have to be running all the time, and that's a really tricky question. As per usual, I have to ask you to like, don't you think we should talk about that? Should we do that next? >> I think that's a great idea. >> Cool. Well, then with that, I want to thank all you for watching us. I'm hoping you'll join us for the next episode, which now, you know is going to be about with the Armchair Architects as part of the Azure Enablement Show. [MUSIC]
Info
Channel: Microsoft Developer
Views: 5,810
Rating: undefined out of 5
Keywords: Azure, Microsoft, Tech, Technology, Dev, Development, Cloud Computing, armchair architects, cloud computing architecture, cloud computing explained, cloud architecture, cloud architecture best practices, cloud architecture interview questions, cloud computing reference architecture, cloud computing concepts technology & architecture, cloud computing interview questions and answers, cloud architecture azure
Id: oE9Md2KPBnA
Channel Id: undefined
Length: 16min 23sec (983 seconds)
Published: Thu Jul 28 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.