Getting Strategic - One of many roles of an Architect

Posted on October 21, 2020 | 11 minute read | Share via

Since taking on my new role a number of folks have been pinging me to say congratulations (and thank you for that!) - but probably the 2nd biggest message I get goes something along the lines of how did you grow your career and what have you found yourself doing? While there are likely a lot of detailed answers I can attempt to give after giving this some thought it felt like it would be worth attempting to boil up a bunch of details into one of the most important outcomes that I have found myself driving over many years:

Where shall we go today - setting the destination

One of the first steps I have found is that it is important to set a clear North Star direction. This at times can be easier said then done but there are some important aspects that I have found a North Star needs to convey:

I am sure I could spend much more time talking about North Star efforts but I will leave with a quote from Lewis Caroll: “If you don’t know where you’re going, any road will get you there.”

The language that binds us

An all to common occurrence, especially as an organization grows, is to become un-intentionally sloppy with language (ok perhaps some people intentionally are sloppy with the words they use but inevitably a term will grow to mean too many different things). For example; if I were to say that our technical solutions are multi-tenant I know that those reading this post will fall into different camps of what that term means. Some might assume it implies a mixing of data within a process. Others might assume mixing of data within a data store. Some might assume tenancy itself refers to different internal users (micro-services) while others might say it implies different customers of the systems we build. And some might say it implies any of the above. The issue with language is that we need to understand when terms become ambiguous in their use, even with some reasonable context, such that it detracts from the important problems to be solved. In effect we will have created some amount of accidental work that now needs to be done each time the term is seen (accidental work is work that is artificial work that is done while solving a problem and more on that in the next section).

For me language often quickly bubbles to the top because it allows to many things to chance if not tackled and aligned. There are many different methods to do this and I have used many different tactics. For example; when working in the e-commerce space during an Event Storming sessions it became obvious that a broad set of teams were overloading the term “order” (it could mean the moment that you placed the order on a website OR it could mean the audit trail of steps as the order moved through a warehouse). In this specific case I banned the term from the remainder of the discussion - I believe I ended up calling these things Fred and Bob - the key was that the discussion could move on without constantly attempting to ask which order was being discussed. More generally I have used Domain Driven Design as a framework and Event Storming as a process of helping identify top level contexts and focused to create a well defined language within those contexts.

Language isn’t just important when thinking about what to name things (in our APIs or data stores) it is also important in how we communicate guardrails, requirements, and more. For example - quick - what does it mean to create focus on quality engineering? The takeaway here is to make sure to use language thoughtfully and look out for those cases where individuals may not be using the term to mean the same thing.

Deliberate movements…

To start this section let me go back to around 1986. It was around this time that Fred Brooks published “No Silver Bullet” where he argued that most productivity gains in Software came from removing “artificial barriers that have made the accidental tasks inordinately hard.” In effect Brooks broke the path to solving a problem down into 2 categories (a) the work that was essential to solving the problem and (b) the work that was being done accidently. While at the time Brooks made arguments for potential improvements through the use of higher level languages (big shout out to ADA), Object-Oriented thinking, and AI (yes - AI wasn’t invented in the past few years - it has actually been around for decades) the abstractions that have been built out and the scale at which the systems we build are used have created entirely new opportunities to create “accidental” complexity. The argument I would make today that my role is to get everyone to recognize when this is happening and as a result be DELIBERATE in how to invest to properly ensure that accidental complexities do not lead in a downward spiral of not being able to continue to build and innovate on behalf of customers.

What are some examples where teams may not be deliberate that are worth some extra attention?

In both examples above - it is possible that we can be successful and grow a business quickly - but if we don’t keep an eye on how and where teams are spending there time we may suddenly find that the APIs we build are not constraining our future innovation (and at some point perhaps we should ask if there is a point in time we should fully version and deprecate those constraints). Likewise on the Build vs Buy decision this can cut both ways - we may find that there is a point where the cost to purchase is simply to high OR that attempting to run (and scale) some technology is eating up innovation dollars that are not otherwise being spent serving your customer base.

One important note - I have learned that while many teams feel comfortable to build something fewer teams feel comfortable suggesting that something be deprecated. There are many reasons for this; some fear losing their job if the thing they work on goes away, some fear not being able to work on an equally interesting problem, and some simply feel passionate about the technology area. Whatever the reason it is important that both senior management and senior IC’s encourage identification and movement in such areas. Like most things finding these areas and pivoting early can often lead to a multiplying savings later on.

Show me…the data

Like most things we can get everyone to agree to a language (and therefore identify problems and define metrics on how to measure outcomes, etc) but without data we are all still blind (throwing darts in a dark room). This is where data comes in. This isn’t just any data (in fact random data can just create noise and confusion) but rather leveraging the outcomes above forcing a discussion around a language, agreed to cost function, and method of measuring returns and defining an agreed to set of inputs to help drive decisions. Now this one can become tricky because there will be a natural tendency to conclude that to properly collect data everyone MUST push data to the same place (and I suppose at some level that is true in that data must be made visible) but my general philosophy here is that once we agree on the data then we should hold our leaders (and teams) accountable to be ready to present that data at any point in time. That said; I also believe that whenever there is an ask such as this providing everyone with the right tools to make it possible (a well paved path) can be helpful. Some of the guard rails that I like to focus on with organizations and teams is how to automate the production and visualization of this information. Ideally the ability to collect data is not a burden. So just like the previous discussion on accidental complexities we want to be careful that we don’t accidently create a process or mechanics that add overhead to teams taking them away from solving the necessary complexities within their problem space. If there is one thing I would leave everyone thinking about here beyond the simple outcome of always having data available it would be to automate….automate….automate.

Starting down the path to achieve technology domination

So what are some methods of doing this? Are there tips or tricks that I (or others that choose to comment on this thread) would propose? I started out this post with a goal is to focus on the outcomes that I find myself driving understanding that there are an infinite set of possible methods we could employ to get there. So I am going to keep this section short and just hint at some tools that can be leveraged:

That’s it for now and I look forward to discussion and feedback from others on what they have found themselves doing as they have moved through their own careers!


Tags: