VERY EARLY BIRD UNTIL SEPTEMBER 5: ✓ Save up to €200 ✓ 10% Team Discount ✓ 15% CPSA Discount


iSAQB Software Architecture Gathering — Digital 2021

Past, Present and Future of Software Architecture - Interview With Neal Ford

You refer to yourself as “meme wrangler.” What special activities and obligations do you associate with this role?

Neal Ford: For better or worse, ThoughtWorks allows people to choose their own titles for business cards, the only caveat being that you only get one set, meaning you have to live with your choice until you run out of that set, then you can get more. My first set of business cards at ThoughtWorks had my title as “Application Architect”, which was what I was hired as. But I came to dislike that title for two reasons: first, at the time, “architect” was a dirty word amongst many developers at ThoughtWorks, because of the second reason I’ll posit in a bit. When I met someone in the hallway, he congenially asked my name and what I was hired for, to which I replied “Architect”, which caused him to snort “We don’t have Architects at ThoughtWorks” and walk away. The second reason I came to dislike that title was because, over time, I came to realize that, in many organizations, “Application Architect” actually means “Post Useful” – spends more time in Visio than an IDE.

I wanted to more closely reflect what my job was becoming in my second set of business cards, so I chose the very abstract “Meme Wrangler”. From Wikipedia:

A meme is a unit of social information. It is a relatively newly coined term and identifies ideas or beliefs that are transmitted from one person or group of people to another. The concept comes from an analogy: as genes transmit biological information, memes can be said to transmit idea and belief information.

So, as genes are to DNA, memes are to thoughts.

I love the meme meme, so I originally chose “Meme Herder”, and offered that to a mailing list I’m on as a potential new title. Prag Dave Thomas, who’s also on the same mailing list, suggested the much better “Wrangler”, which is more visceral and has more layered meanings. “Wrangler” has two meanings:

a person in charge of horses or other livestock on a ranch. a person engaging in a lengthy and complicated quarrel or dispute.

Both of which sound about right.

A Meme Wrangler: someone who herds ideas into thoughts, generally through lengthy and complicated discussions (not so much quarrels as “impassioned conversations”). I once had a project manager complain to me, the Tech Lead, which is the true title at ThoughtWorks for someone who has architectural responsibilities, that the frequent arguments amongst the developers were annoying/frightening the other people on the project. I asked “What arguments? All I hear are impassioned conversations, which are like arguments, but with passion instead of anger”).

However cool the Meme Wrangler title is, it elicits one of two responses when I give people business cards: either “Oh, cool” or “What does this mean?”

So, as a Grand Compromise, in my most recent set of business cards, it lists my title as Software Architect / Meme Wrangler, which is probably as close to describing what I do as any short title can.

On your web page you motivate your workshop and your upcoming book with the questions, “How do architects make decisions if no ‘best practices‘ exist and no one has ever solved this problem before?“ Can your workshop be understood as a kind of “meta best practice” that helps to deal with this exact situation?

Neal Ford: Our workshop isn’t about canned solutions to problems, but rather how to do trade-off analysis for software architecture problems. We use some common problems in modern architectures to illustrate the process – namely, how to discover the best granularity and communication style for a microservices architecture – but the class is ultimately about how to apply our approach to solving problems in the real world. We teach architects how to objectively analyze problems so that they can find the least-worst set of trade-offs.

You propose evolutionary architecture to be guided by fitness functions. What do you think are some particularly good, useful, or helpful fitness functions you’ve encountered in your projects that might be worth considering in architectural design in general?

Neal Ford: One of the confusing aspects of fitness function as a verification mechanism is that developers have become accustomed to single tools to handle jobs. For example, for unit testing, find a unit testing library for this platform. However, architects must govern a wide variety of things, necessitating a wide variety of fitness function tools. Operational non-functional requirements such as performance and scalability should be governed by monitors, whereas structural quality requires code-level metrics tools for a particular platform. Fitness functions become useful because they force architects to create objective definitions for important characteristics. The answer to which is “particularly good, useful, or helpful” depend entirely on value added for a particular organization and/or project. For example, if an automated security fitness function had prevented the zero-day exploit of Struts at Equifax back in 2017, the company would have avoided a billion dollars worth of litigation–that seems like good value to me! Architects shouldn’t try to over specify, but rather find the ones that protect critically valuable architecture characteristics, and maintain them to provide automated governance.

IT education tends to teach the development of new systems, but in practice most of the work is done on existing systems. Do you have any ideas or suggestions on how to fill this gap? What do you think a good training program for architects should look like?

Neal Ford: Teaching a subject like software architecture only goes so far, then apprenticeship or something similar should kick in. Software architectures are too different, and we don’t the formal rigor of other engineering disciplines to allow objective analysis to the degree of more established engineering disciplines. Software architecture still relies on experience to make good trade-off analysis decisions, which is hard to teach.

AI tools such as OpenAI Codex, which powers GitHub Copilot, can help developers write code. What do you think about this trend and what impact does it have on the work of software architects? Could you imagine AI support for architectural design in the near future?

Neal Ford: It’s likely foolish to try to predict what AI won’t enable or supplant in the coming future :). However, coding ,especially on the scale of methods and classes, has pretty well established rules about what bad looks like–overly long methods, use of too much global state, etc. However, we don’t have as firm a set of rules in software architecture, and architects find it more difficult to build rules that apply to something as big as architecture. Software architecture isn’t just a few decisions aggregated, it may be hundreds or thousands, each of which change the outcome. Like many fields, pattern matching and other aspects of AI and machine learning can assist architects to understand complex code bases or interactions, but I suspect the serious trade-off analysis will still be people for some time to come.

Today, hardly anything works without the cloud. What future paradigm shifts for software architecture will be driven by this?

Neal Ford: This statement is true in any of the last 3 decades, where you can replace “cloud” with “X”, for many values of “X”. The point isn’t to believe that the cloud is the end state, but rather realize that we live and work in an extremely dynamic equilibrium. The software development ecosystem constantly iterates, as new capabilities appear and clever architects figure out ways to combine those capabilities to make new things. Think about what the software development ecosystem looked like 5 years ago–you didn’t even know what a Kubernetes was!–and then try to project 5 years into the future: no one has a working crystal ball. If the past couple of decades has taught us anything, it’s to build evolution into our architecture rather than try to predict the future. If we can adapt to the future, we don’t have to predict it. This goes back to good engineering practices and realizing there is no end state.

Stay up-to-date with the SAG newsletter
Stay up-to-date with the SAG newsletter