Category Archives: Software Business

How I am applying The Four Disciplines of Execution

I read The Four Disciplines of Execution (4DX) a few months ago. It was recommended to me several times—I wish I had read it sooner. It’s in the genre of business productivity systems, which is not surprising since one of the authors, Sean Covey, is the son of Stephen Covey (author of The 7 Habits of Highly Effective People).

Like many books in this genre, the book is part of an entire ecosystem, with courses, videos, etc. You can get a good overview there.

Here is a quick summary of the 4 disciplines (it’s more complex than this—the book is worth reading for details)

  1. Have a single important goal that would make a meaningful difference (in your business, life, etc). This will have some lagging indicator.
  2. Figure out a leading indicator that you can act on and track. This is something you can do every day that will build up to the important goal.
  3. Build a compelling scoreboard that tells you if you are winning (achieving the leading indicator).
  4. Have regular (weekly) accountability meetings where you only discuss the goal, leading indicators, and how to put points on the board

To give an example, here’s how I am applying it to my fitness:

  1. Important goal: Reduce Body Fat %. I am doing this primarily by increasing muscle mass. My lagging indicators are goals in bench press and strict pull-ups.
  2. Leading indicator: Days per week doing resistance training.
  3. Scoreboard: I track the workouts on my Apple Watch. I can see the count in the fitness apps I use. My scale tells me Body Fat % to make sure I’m on track. I am also tracking hours in Zone 2 and higher as a secondary indicator.
  4. Accountability: I review it weekly and schedule the next week’s workouts. I also go to Crossfit, which gives me access to coaches that can help.

My personal growth goal is to publish some pamphlets (short books) this year. Here’s my 4DX

  1. Important goal: publish pamphlets. Lagging indicator is 2 books.
  2. Leading indicator: Hours writing per week.
  3. Scoreboard: I’m using personal productivity software that I am working on.
  4. Accountability: I am making season four of my podcast about this where I will discuss my process and progress.

My work goal is to launch the productivity tool I am working on

  1. Important goal: Launch
  2. Leading indicator: Hours coding
  3. Scoreboard: Also tracking in this tool
  4. Accountability: I have weekly meeting with my partner where we discuss progress.

All of my leading indicators are in SMART goal format: Specific, Measurable, Achievable, Relevant, and Time-bound. The main difference is that they are very short-term and more about process.

Obviously, it doesn’t matter if I achieve the leading indicators, but not the lagging ones—the lagging ones are the real goal. The idea (from 4DX) is that leading indicators are something you can act on and track each day. You trust yourself to pick things that are likely to result in the bigger goal. You adjust if they aren’t.

Comparing People is Not Transitive (Another Reason Why Stack Ranking Doesn’t Work)

Layoffs are hard, but we shouldn’t try to make it easier with stack ranking because ranking is inherently one-dimensional and forces you to compare pairs of people. For layoffs, you should want to compare different multi-dimensional teams.

In programming, we know that whatever algorithm you use to sort a list, you need a function to compare two items. But sorting this way only works if comparing is transitive. This means that if a<b AND b<c then a<c. This works for numbers, but you need to be careful when you make your own comparators.

There’s no natural way to order people, so when you make one up, it’s often not transitive. The second problem is that the comparator only has the two people to compare, not any other context. That means that when you are considering the “value” difference in a pair of people you are not using the context of the team that they will be on.

Instead of sorting, consider this visual aid:

A spike graph that shows multiple dimensions

I explained this graph in Raising The Bar is a One Dimensional Concept. Each spike represents an attribute of a team member that you value. For example: coding skill, team gelling skill, writing ability, domain knowledge, code-base knowledge, mentoring—you can have as many as you want. Your team members may each excel in some, but lack skill in others. For each member, put a dot somewhere on each spike of the graph and connect it to make a polygon. By overlaying the individual graphs, you can see if you have a balanced team with diverse abilities and interests.

Here’s how I suggest you use this. Let’s say you have 10 developers and you need to lay off 20% of total salary. To decide, try evaluating each member on all the dimensions you value and create a team using your budget to pick the ones that result in the team you want.

Let’s say you start with some obvious top-performer. They have the most seniority, have mentored well, write great documentation. They are all-around a person that you want to keep. The next person to add is probably not someone similar to that. You want to end up with a good mix of junior and senior people, so the next person might be someone relatively unskilled, but perhaps with other desirable attributes.

The key is that you are thinking of that junior person in combination with the senior one, not comparing them against each other. To the extent you are comparing team members to add, you are considering which one is a better multi-dimensional addition to a multi-dimensional team, not looking at them in isolation. As you build up the team, you may notice things the team needs, and pick the next person based on that. You should try this a few different ways, with different starting points, and see if they converge.

Instead of thinking of people that you need to cut, you focus on building the best team you can afford. You should already know how to do this because this is a good way to recruit as well.

You Can’t Rank Order Multi-Dimensional Things

One of the most surprising things I learned in math was that complex numbers had no natural ordering. Meaning, less-than and greater-than are not defined for complex numbers. It makes sense when you think of it for a minute. The same applies to other multi-dimensional things like matrices and vectors.

So, why do we think we can rank order people? I’m specifically talking about companies that do this for their employees, but it comes up in other contexts (e.g. class rank).

Even if you were to think of people as a number, it wouldn’t be expressed as a 1-dimensional one. When I wrote about the concept of lowering/raising the bar, I said that that a bar is a 1-dimensional concept. So is rank ordering.

Just like with complex numbers, you can make up an order if you want. But then you lose information. For example, if you choose to order based on magnitude, then direction would no longer matter. Similarly, when you rank team members by, say, seniority, you lose orthogonal characteristics, like the ability to catalyze others.

The reason companies do this anyway is when they are looking to downsize. If they do need to lay someone off, it might well be the lowest ranked person, but it’s a terrible way to do this. I do have a suggestion, but I’ll get to that Monday. [EDIT: Here it is – Comparing People is Not Transitive]

Your First LinkedIn Message Should Not Be a Lie

Every week I get a few messages that start “I was looking at your profile and I noticed …” or something to that extent, and then they just have some generic, irrelevant pitch. They absolutely did not look at my profile. If they had, they would not have bothered contacting me. So, their very first words were a lie.

I’m open to being contacted by strangers on LinkedIn. To some extent, I am interested in how people contact others to see if I can learn. So, I should be thankful that I learned how much I hate this kind of opening, so I will never use it.

Triangle Estimates

I estimate using time, not points. I do this even though I have mostly worked on product development teams inside of companies and not as a contractor for clients.

But, estimation on product development is not as high-stakes an activity as it is if you are billing based on it. The judgement of a successful product development project is based on whether it moves some business needle, not whether it was under budget. The margin on successful product development dwarfs reasonable overruns. There is also a lot of appetite for risk, where we know that we’ll win some and lose some.

That’s not true if the work is for clients. If they pay by the hour, they expect the estimate to be accurate. But there are very few (if any) big software projects that can be accurately estimated. When you’re wrong, you either have to eat it or have a very difficult conversation.

I don’t have a good answer, but I would start with triangle (or three-point) estimates. To use them, you estimate a most-likely estimate and then a best and worst case on either side. The three numbers describe a distribution (see the wikipedia page for how to combine them). The result is an estimate with a error range and a confidence interval. I would recommend sharing that instead of a single number.

The only task management system that I have seen that offers this option is DevStride, which carries three-point estimates throughout its system.

The Ending Should Oppose the Beginning

In episode 44 of Scriptnotes (transcript), John August and Craig Mazin talked about how the ending of a movie should relate to the beginning. One thing Mazin said made this clear:

… if you’re writing and you don’t know how the movie ends, you’re writing the wrong beginning. Because to me, the whole point of the beginning is to be somehow poetically opposite the end. That’s the point. If you don’t know what you’re opposing here, I’m not really sure how you know what you’re supposed to be writing at all.

In my post about The James Bond Opening to a software demo, I recommended starting with something exciting about how another customer is getting value. This should be short and sweet and gets the prospect to lean forward.

But next, talk about the problems the prospect is having right now, which you learned about in discovery. Remind them of this as you start their story—the one you are about to tell, which will take them from their life now to a new life after they buy your software. By the end of the demo they should be convinced to take the next step.

If you want to learn how to tell stories like this, I recommend learning how screenwriters do it. Scriptnotes is a great place to do that. They know how to tell a story where a protagonist makes a decision that inevitably leads them to a changed life. This is like the story you want your prospect to feel they are in.

The James Bond Opening

I am building software to help onboard sales team new hires by helping them get to demo proficiency fast (if you are interested, here’s a 3 minute video of the DemoWizard).

One of the things we help our clients with is writing a compelling opening. My partner, Brian, calls this a “James Bond” opening. I’m not a salesperson, but I gave a ton of demos at Droplets and Atalasoft (both made developer tools)—I wish Brian had told me this back then, because I love this kind of opening.

Here’s how I try to explain it:

The beginning of a James Bond movie is actually the end of the previous (unmade) movie. We don’t know anything about the back-story of that movie, but now we get to watch the most exciting 10 minutes of it until it ends. Then, we start the next movie—the one we came to see. We know that at some point we’ll see an ending that topped the one we just saw, so we lean forward in anticipation.

For you, the opening is your best customer success story, but just the end. That customer already have a completely set up system, and they are already getting value from it. Start your demo by showing the part of the software that delivers that value and share their results (with permission of course).

Now that you have their attention, you can start your prospect’s story and help them understand how they will get from where they are now to an ending like the one they just saw.

Don’t do Nothing and Be the Change You Seek

When I worked at Atlassian, we had five company values. The one that is most applicable to me outside of Atlassian is “Be the change you seek”. Even at Atlassian, in our slack, I probably reacted with our custom “Be the change” emoji annoyingly often. But, it wasn’t ironically—I loved that we (as a company and team) embraced the changes that people went out of their way to try to make. Co-CEO Scott Farquhar often started company Town Halls by telling new hires that they were hired to change Atlassian.

Before we were acquired, at Trello, we had a similar value we called “Don’t do Nothing”. It’s not exactly the same. “Be the change you seek” says that you should work hard to fix broken things you care about. “Don’t Do Nothing” was asking you to take a proportionate action to the problem, but not “nothing”—this could just be reporting it.

They both functioned in the same way with regards to who was responsible for improving the company—you were.

Be Happy When It’s Hard. Be Worried When It’s Easy.

When I was running product development for Atalasoft, I used to love it when a developer was having a hard time with a project. We sold image codecs, and our main competitor was open-source. Our secret sauce was that we could do things they wouldn’t. It was supposed to be hard.

If it were easy, everyone would do it, and it would be free. We wouldn’t have a business.

I think about this a lot when I see what people are doing with Large Language Models. Making an LLM isn’t easy, but Google thinks there’s no moat here for anyone. Still, it’s hard enough because it costs a lot of money, even if you know exactly how to do it.

The part that’s more concerning is what people who use LLM’s are saying. Everyone is so surprised how well it does with basically no work or skill on the part of the user. That’s fine, but then anyone could do it, and the thing they are doing with LLMs isn’t going to accrue value to them.

I think every knowledge worker should be using LLMs in some way, if only to learn about it. It offers enough benefits right now that it can’t be ignored. But, the easier it seems to be that you are getting good results, the more I would be concerned that you won’t be necessary to get those results in the future.

What Hardware Inspires Programming Language Design?

In early computing history, the government, academia, and industry collaborated to create languages for mainframes. The enduring ones were COBOL and Fortran.

You’d think that the PC era, when computing was delivering doublings in power every couple of years that it would also have been a time of programming language innovation. Aside from Microsoft, in the 70’s-2000’s, most of the PC companies didn’t do much here. IBM, Intel, AMD, Apple, Dell, HP, Sony, and Compaq made all the hardware, but contributed nothing to programming languages. Sun is the only hardware company that bucked this trend.

The photocopier, with Smalltalk, did more than the PC to drive programming language design than the PC. Fifty years of OO dominance followed.

But, for driving programming language development, nothing beats phones.

Telephone profits powered Bell Labs, which invented a lot of important tech, but some of the most enduring are the programming languages they developed. To limit it to just the ones I have used professionally, there are C, C++, Awk, KSH and the document processing languages troff, pic, and eqn. I’m probably leaving out about a dozen more.

AT&T was the most prolific converter of phone calls to programming languages, but Ericsson created Erlang, and Apple’s iPhone profits drove them to create Swift. You can give most of the credit for Kotlin to Android.

In the end, it’s probably money that does most of the work, and the real driver seems to be when it coalesces to a single winner.