Microservices, Monoliths, and Modularity

Iceberg

 

There are very valid reasons for considering a microservice architecture (MSA) when building/evolving an application. In my opinion, however, forcing modularity isn’t one of those very valid reasons.

Just the other day, I saw tweet from Simon Brown saying this same thing:

I still like his comment from two years back: “I’ll keep saying this … if people can’t build monoliths properly, microservices won’t help”. I believe that if you’re having problems building a monolith properly, trying to use a distributed architecture to force modularity may actually cause harm.

MSAs, like any distributed application architecture, involve increased complexity and costs; table stakes, if you will. Like an iceberg, there’s both a lot more to it than just what’s showing above the waterline and a fair amount of hazard for the unwary. If a development team cannot or will not comply with design guidelines (e.g. modularity requirements), injecting additional complexity is probably not the solution you need.

Distributing an application makes it harder to accidentally entangle different concerns, but it doesn’t make it impossible:

I’d argue that making it harder to accidentally break modularity addresses neither of the groups I mentioned earlier: those that cannot or will not comply. It’s ironic, but those who fail to understand the need for modularity can be very creative in their “solutions”, regardless of the obstacles. Likewise, those who refuse to comply.

In short, distribution as a means of “ensuring” modularity fails the fitness for purpose test.

The situation becomes worse when you factor in the additional complexity inherent in a distributed system. Likewise, there’s the cost of the table stakes (infrastructure, process, staffing, etc.) mentioned above. Of course, having abandoned the principle of cause and effect, one could attempt some “creative” workarounds to avoid having to pay the price (in other words, adding more and more complexity).

When you introduce significant additional complexity (with all its attendant risk) with little chance of the technique actually achieving its goal, you’ve caused harm.

These concerns are not solely limited to the application architecture. Distributing the data architecture has the same limitations in terms of ensuring modularity and introduces additional complexity. Adding boundaries adds the need for governance. A disciplined, monolithic team can maintain modularity in a monolithic data architecture. Multiple separate teams trying to share a monolithic data architecture will either experience a crippling level of governance overhead or a complete breakdown in modularity.

MSAs can be useful when you need independently scalable and replaceable components. When you have multiple teams working on one logical application, they can also be appropriate as well. Using the technique when the cost outweighs the potential payoff, however, is a losing bet.

Square Pegs, Round Holes, and Silver Bullets

Werewolf

People like easy answers.

Why spend time analyzing and evaluating when you can just take some thing or some technique that someone else has already put to use and be done with it?

Why indeed?

I mean, “me too” is a valid strategy, right?

And we don’t want people to get off message, right?

https://twitter.com/jetpack/status/844195111407943680

And we can always find a low cost, minimal disruption way of dealing with issues, right?

https://twitter.com/jetpack/status/845323751545884675

I mean, after all, we’ve got data and algorithms, and stuff:

The thing is, actions need to make sense in context. Striking a match is probably a good idea in the dark, but it’s probably less so in daylight. In the presence of gasoline fumes, it’s a bad idea regardless of ambient light.

A recent post on Medium, “Design Sprints Are Snake Oil” is a good example. Erika Hall’s title was a bit click-baitish, but as she responded to one commenter:

The point is that the original snake oil was legitimate and effective. It ended up with a bad reputation from copycats who over-promised results under the same name while missing the essential ingredients.

Sprints are legitimate and effective. And now there is a lot of follow-up hype treating them as a panacea and a replacement for other types of work.

Good things (techniques, technologies, strategies, etc.) are “good”, not because they are innately right, but because they fit the context of the situation at hand. Those that don’t fit, cease being “good” for that very reason. Form absent function is just a facade. Whether it’s business strategy, management technique, innovation efforts, or process, there is no recipe. The hard work to match the action with the context has to be done.

Imitation might be the sincerest form of flattery, but it’s a really poor substitute for strategy.

When One System Fails Another

Robinson Crusoe Shipwrecked

Ten days ago, when I wrote the post “Uber and the Cost of a Culture of Corruption”, I said that assuming there will be negative consequences (both legal and financial) from the incidents in the news, then it is in Uber’s best interests to fix the problem that led to them in the first place. The negative consequences are now becoming visible in the form of people abandoning ship.

Over the weekend, Uber’s president, Jeff Jones, resigned with the following statement:

I joined Uber because of its Mission, and the challenge to build global capabilities that would help the company mature and thrive long-term.

It is now clear, however, that the beliefs and approach to leadership that have guided my career are inconsistent with what I saw and experienced at Uber, and I can no longer continue as president of the ride sharing business.

There are thousands of amazing people at the company, and I truly wish everyone well.

Travis Kalanick’s announcement to Uber’s employees, while factually accurate (the decision did come after the announcement of the search for a COO), doesn’t quite convey Jones’ reasons for leaving:

Team,

I wanted to let you know that Jeff Jones has decided to resign from Uber.

Jeff joined Uber in October 2016 from being CMO at retailer Target. In 6 months, he made an important impact on the company—from his focus on being driver obsessed to delivering our first brand reputation study, which will help set our course in the coming months and year.

After we announced our intention to hire a COO, Jeff came to the tough decision that he doesn’t see his future at Uber. It is unfortunate that this was announced through the press but I thought it was important to send all of you an email before providing comment publicly.

Rachel, Pierre and Mac will continue to lead the Global Ops teams, reporting to me until we have signed a COO. Troy Stevenson, who leads CommOps, and Shalin Amin who leads brand design will report to Rachel Holt. Ab Gupta will report to Andrew MacDonald.

Thanks,

Travis

Jones is not the only Uber executive to resign this weekend. Brian McClendon, vice president in charge of Uber’s mapping, is “…leaving to return to his hometown in Kansas”.

These resignations are also not the only recent executive casualties. Ed Baker, vice president of product and growth, had also announced his departure earlier this month amid questions regarding his conduct with other Uber employees. This came after senior vice president of engineering Amit Singhal was asked to resign when it was discovered that he failed to disclose that he was investigated for sexual harassment while at Google.

It’s cliché to talk about people as assets, but for companies like Uber, their talent really does comprise the majority of their value. While the media will take note of high-profile departures like these, it would be a mistake to consider them the entirety of the damage. How many lesser known employees have left or will be leaving as a result of the recent scandals? How much potential talent will pass by opportunities at Uber due to what’s happened? In particular, how much harder will this make Kalanick’s search for a Chief Operating Officer who can turn things around?

If the talent drain is not quickly plugged, what happens to the quality of Uber’s service?

This situation perfectly illustrates the theme of organizations as systems. Uber’s software and business model have done well for it, but the culture created by the lack of leadership and lack of ethics of its management may well sink it. One bad component can bring down a system, whether software or social. The tragedy is that the innocent would be harmed along with the guilty.

A Tale of Two Tweets

Serendipity is a wonderful (and sometimes entertaining) thing.

Monday afternoon, two tweets wound up one after the other in my timeline, one interesting and one “interesting” (I’ll leave it as an exercise for the reader to determine which is which):

and

My favorite definition for the word “innovation” comes from Scott Berkun:

If you must use the word, here is the best definition: Innovation is significant positive change. It’s a result. It’s an outcome. It’s something you work towards achieving on a project. If you are successful at solving important problems, peers you respect will call your work innovative and you an innovator. Let them choose the word.

If you don’t want to jump to conclusions as to which of the two better fits the definition, you can get more information from the news article linked to in the second tweet, or you could judge by some of the responses to the first tweet:

https://twitter.com/jetpack/status/841175993830244352
https://twitter.com/jetpack/status/841289737528868866
https://twitter.com/jetpack/status/841298762144313345

I’m sure everyone’s just laughing with them.

Uber and the Cost of a Culture of Corruption

'Personification of the Faculty of Law' from the pedestal of the statue of Emperor Charles IV, Prague, Czech Republic - via Wikimedia Commons

Even before I hit the “Publish” button on Monday’s post, “Regulating Software Development”, I had already started composing this post in my head. In that post I had used the words “corrupt culture” in passing. I needed to expand on that, because I believe that’s what lies at the heart of Uber’s cascading collection of scandals.

Uber’s business model has always displayed a certain flexible attitude towards government regulation. Greyball represented a departure from dancing on the line to barging over it. Caught with their hand in the cookie jar, Uber has now announced “We are expressly prohibiting its use to target action by local regulators going forward”. I doubt this act of contrition on their part will be deemed sufficient.

In this environment, Susan Fowler’s account of her time at Uber becomes less of a “how could they be so stupid” story and more of a foregone conclusion. When, to all appearances, violating the law is part of your business model and you’re building software intended to thwart enforcement of the laws you’re violating, your moral authority is rather thin. In this type of culture, I’d imagine things like unwanted sexual advances and retaliation aren’t seen as a big deal, rather business as usual. Crossing lines, like other activities, becomes easier with practice.

Assuming that there will be negative consequences (both legal and financial), from these incidents, then it is in Uber’s best interests to fix the problem that led to them in the first place. This means radically changing Uber’s culture, otherwise new problems will continue to arise. Uber’s CEO has announced that the company is looking for leadership assistance:

“This morning I told the Uber team that we’re actively looking for a Chief Operating Officer: a peer who can partner with me to write the next chapter in our journey,” Kalanick said in a statement on Tuesday.

It remains to be seen whether this will represent a radical change in leadership or not. Anything less than a radical change will be unlikely to affect the current culture which appears to be a deeply entrenched. Debbie Madden, CEO of Stride, published an open letter to Uber’s Travis Kalanick on Wednesday. In “Dear Travis Kalanick: Here’s What You Must Demand From Uber’s New COO”, she noted that “Uber’s culture is broken and you need help to fix it”. She outlined seven steps to do just that:

Step 1: Change Uber’s core values

Step 2: Kill Greyball

Step 3: Adopt a zero-tolerance harassment policy and fire offenders

Step 4: Hire a strong head of HR and an employment lawyer and educate employees

Step 5: Fire or PIP each manager and HR employee who turned a blind eye

Step 6: Shift focus from individual productivity to team productivity

Step 7: Change your recruiting process

Uber isn’t the only organization in trouble due to a troubled culture. Volkswagen is in the same boat and it isn’t over yet. It’s reported that the pollution hidden by their cheating on emissions testing could contribute to the early death of 1,200 Europeans. It’s a solid bet that there will be more litigation to come.

Uber hasn’t killed anyone as a result of their corporate culture, but with their interest in self-driving vehicles, we should all be rooting for a turn-around in the ethics department. Uber can only exist in the future by eliminating the Uber of the past.

Regulating Software Development

'Belvidere Street construction, pouring concrete', Library of Virginia

 

Another weekend, another too good to pass up Twitter conversation during my “unplugged” time. This weekend, Grady Booch hooked me by retweeting Mike Potts tweet:

Mike’s tweet was a reply to Grady’s comment on the latest news out of Uber:

It’s an understandable question. It’s a reasonable question. It’s one that came up back during the healthcare.gov fiasco and it’s one raised by Volkswagen’s recent criminal misconduct.

However, when contemplating fixing a problem, we need to be extremely mindful of the potential for creating harm as a result of the “fix”. Particularly we should be wary of creating harm out of proportion to any good we do (i.e. we don’t want to kill roaches by burning down the house). I chose the image at the top to illustrate something key to this discussion – changing laws (the software of our meta-enterprise) is only slightly harder than moving a roadway once laid down.

Now for the caveats:

  • I do my utmost to avoid politics on this site – I really doubt you’re looking to me for guidance or even just my opinion. I’m not intending this post as a political statement. I’m not asserting that government is never the answer, merely that it’s a rather blunt instrument that we need to use with care.
  • I agree with Grady and Mike that those who took part in this are a disgrace. Moreover, I believe everyone involved, top to bottom, needs to be prosecuted and, if convicted, punished to the fullest extent of the law.
  • My tl;dr position is this: if we have regulation, it should be effective and without avoidable harmful side effects.

As I noted above, it’s human nature to respond to problems with some proposal to fix the problem. It also seems to be human nature to respond in a manner that doesn’t necessarily deal with an issue from a systemic perspective. We tend to allow ourselves to concentrate on the need to “do something” and ignore the hard work of making sure what we do is effective (and doesn’t cause further problems). In other words, we put band aids on bullet wounds.

In both the case of VW and Uber, the conduct alleged is criminal. We could pass new laws making it a crime to commit a crime, but that seems to be an exercise in recursive futility. If the potential penalty in the first case was insufficient to induce compliance, should we really believe adding another layer will make it better?

An element that’s present in both cases is that the illegal conduct involves creating software to help avoid detection of the fact that the company was breaking another law. Regulatory pressures coupled with a corrupt culture can create perverse incentives to cheat. This does not in any way excuse the conduct, particularly in the case of VW. It is, however, one of the systemic factors that should be taken into account.

In my experience, the most effective compliance program is one where compliance is the path of least resistance. Self-imposed compliance cannot fail to be more effective than compliance enforced externally. Corrupt agents will still violate the rules, but ideally you want to make it so that the lazy way out is the desired behavior.

Another aspect of regulation that comes up is something along the lines of professional standard similar to those of attorneys, accountants, and doctors. Increasing the level of professionalism is laudable, but would it be an effective response to the issue of criminal misconduct? Additionally, assuming it was legally enforced, what would the cost be? Everything from administration of the program to salary increases would introduce new costs and would likely affect the pace of innovation (due to the impact on both supply and demand). Again, without justifying the conduct, what was Uber’s motivation to develop its code to defeat detection by regulators?

I can well imagine other potential issues with a regulatory regime that requires a license to code. Not only commercial innovation would suffer, but the effects on the Open Source community could be disastrous if the licensing regime was expensive.

Doing “something” is easy. Doing something effective is a bit harder. I’m all aboard for punishing the guilty (each and every one), but we should move carefully when considering actions that might be more difficult to undo.

Fear of Failure, Fear and Failure

Capricho 43, Goya's 'The Sleep of Reason Produces Monsters'

Some things seem so logically inconsistent that you just have to check them out.

Such was the title of a post on LinkedIn that I saw the other day: “Innovation In Fear-Based Cultures? Or, why hire lions to be dogs?”. In it, Michael Graber noted that “…top-down organizations have the most trouble innovating.”:

In particular, the fearful mindsets that review, align, and sign off on “decks” to be presented to Vice President-level colleagues often edit out the insights and recommendations that have the power to grow the business in new ways.

These well-trained, obedient keepers of the status quo are rewarded for not taking risks and for not thinking outside of the existing paradigm of the business.

None of this is particularly shocking, a culture of fear is pretty much the antithesis of a learning culture and innovation in the absence of a learning culture is a bit like snow in the desert – not impossible, but certainly remarkable.

Learning involves risk. Whether the method is “move fast and break things” or something more deliberate and considered (such as that outlined in Greger Wikstrand‘s post “Jobs to be done innovation”), there is a risk of failure. Where there is a culture of fear, people will avoid all failure. Even limited risk failure in the context of an acknowledged experiment will be avoided because people won’t trust in the powers that be not to punish the failure. In avoiding this type of failure, learning that leads to innovation is avoided as well. You can still learn from what others have done (or failed to do), but even then there’s the problem of finding someone foolhardy enough to propose an action that’s out of the norm for the organization.

Why would an organization foster this kind of culture?

Seth Godin’s post, “What bureaucracy can’t do for you”, holds the key:

It lets us off the hook in many ways. It creates systems and momentum and eliminates many decisions for its members.

“I’m just doing my job.”

“That’s the way the system works.”

Decisions involve risk, someone could make the wrong one. For that reason, the number of people making decisions should be minimized (not a position I endorse, mind you).

That’s the irony of top-down, bureaucratic organizations – often the culture is by design, intended to eliminate risk. By succeeding in doing so on the mundane level, the organization actually introduces an existential risk, the risk of stagnation. The law of unintended consequences has a very long arm.

This type of culture actually introduces perverse incentives that further threaten the organization’s long-term health. Creativity is a huge risk, you could be wrong. Even if you’re right, you’ve become noticeable. Visibility becomes the same as risk. Likewise, responsibility means appearing on the radar. This not only discourages positive actions, but can easily be a corrupting influence.

Fear isn’t the only thing we have to fear, but sometimes it’s something we really need to be concerned about.


This post is another installment of an ongoing conversation about innovation with Greger Wikstrand.