A few years back, I posed this question to my software team at the time: What is software architecture? People answered this in a variety of ways. The answers ranged from the very dry “software architecture is the set of objects in a system and the relationships between them” to the very vague “software architecture is the shape of the software”. I was disappointed that we weren’t able to come up with anything better than that. I had hoped that we’d find a principle that could guide our day-to-day work.
Maybe I was asking the wrong question
Thinking back on this now, I think a better question would have been What is good software architecture? I imagine that we’d come up with things like “it runs efficiently” or “it minimizes the amount of required code”. I think this is part of it, but, it doesn’t really capture the essence of good software architecture.
My Answer Is…
I suppose you can already guess: “Good software architecture has a place to hang your hat”. When you’re working in software that’s well architected, you always know where things go. There’s a place for everything, even when it doesn’t exist yet. When software is well architected, you can even move the place where you hang hats, and everything works fine. In fact, if you need to move things around, you’ll often fix things that weren’t even problems yet. The software stays tidy. You don’t have a bunch of stuff lying around or on top of things or sticking out of places—there’s a place for everything.
When software is poorly architected, you’re not sure where things go. In fact, no one’s really sure where things go. People start doing the same things in different ways. Everything mostly works, but you’re scared to change anything. When you need to do something new, it can take a long time, because everything is a mess. You’ll see hats all over the place.
Getting to Good Software Architecture
There’s something subjective about good software architecture, something almost autocratic. Because there are so many ways to do things in software, there are so many decisions to make. It goes combinatorial really fast. Unless you find some way to narrow the field of choices, you’ll waste a lot of time arguing about options, and your group will spin its wheels.
The best way to winnow down options and get good software architecture is to have a good software architect, someone who’s worn a lot of hats, and who’s tried hanging them in lots of places. Someone who’s opinionated, but not overly so. Ideally, you build a good team around a good architect. The best way to do this is to have a good software manager, someone who’s worn a lot of hats, and who’s tried hanging them in lots of places 🙂
As I mentioned in an earlier post, I was going to publish something by Sunday at midnight each week. I was on track up until we had to do our final push to get our house on the market this past week. It’s been over two solid weeks of packing, cleaning, and doing various home improvements. After 2+ years of sitting at a desk and writing software, it was quite a shock to my system—at least I’ve gotten stronger 🙂 In order to maintain my blogging regimen, I needed to have a 3 month supply of generic posts ready to go. I’ll try to get some of that in place this week.
My wife and kids have already moved down to San Jose. I’ll be up in Portland by myself until the house sells. We just had an Open House today, which, our realtor says, is mainly for neighbors to walk through your house so they can tell their friends/sons/daughters about a house in the neighborhood. I guess that’s what happened. We had 12 sets of neighbors come through. However, we also had 3 sets of potential buyers as well.
I miss my family. The house is too quiet. It feels like I’m in a cell sometimes…kind of like this:
Hopefully, we can get our house sold quickly (and at the right price). If you’re curious, you can see it on RMLS.
Hope to have a more interesting post next week!