Skip to content

Commit

Permalink
Corrections (#83)
Browse files Browse the repository at this point in the history
* Case correction

* Draft doc

* Excerpt improvement
  • Loading branch information
stephenfuqua authored May 2, 2024
1 parent 5174b91 commit 08063b9
Show file tree
Hide file tree
Showing 8 changed files with 155 additions and 7 deletions.
139 changes: 139 additions & 0 deletions _drafts/2024-02-12-business-value-alignment.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
---
layout: page
title: Aligning Product with Business Value
date: 2024-02-11
comments: true
tags:
- programming
- data-and-analytics
- agile
sharing: true
excerpt_separator: <!--more-->
---


## Delivering Value and Identifying Useful Metrics

One of the key themes of [Data Day Texas 2024](https://datadaytexas.com/)
(#ddtx24) in late January was the notion of aligning your work with business
value. Does the product you are building support the business strategy? Does the
metric you are reporting add _sufficient_ value , or is it just a distraction?
Can you explain that value to the "non-technical" in your organization, not just
rationally, but also reflecting emotional and relationship impacts?

## Recognizing Value Delivery

Coming into the conference, I was actively contemplating _operational metrics_
for my technology team. What additional metrics - if any - should we be tracking
and improving upon as part of our 2024 goals? While software _feature_ alignment
to business strategy is not new to me, thinking about alignment in terms of
"what do we measure" was eye opening.

The most important measurement in software (or data) products is simply this:
did you deliver something of value to your customers? That ought not be a
Boolean answer; it could be a net promoter score, market share, or a positive
change in revenue after adding a new feature.

But was it the most valuable work that could be delivered? Never an easy
question, and the experimental and Agile mindset suggests that too much up-front
analysis can lead to paralysis: no value delivered, or highly delayed. Hence the
mantra "do something".

In a Scrum product development sprint, teams often look at burndown or burnup
(my preference) charts showing their progress toward the sprint's goal. Meeting
the number does not guarantee success; the charts' usefulness lies primarily in
calling out when the situation has become potentially unhealthy (progress is
stalled). The Sprint Review is a key time to evaluate, qualitatively, if we have
delivered useful value.

## Health Metrics

Looking beyond the sprint, what simple metrics might we use at the level of
product management? Another point raised during the DDTX24 conference was the
notion of looking at _health_ metrics. Rather than only looking at error or bug
counts (measures of "disease"), which metrics indicate health in a manner that
might reveal potential slide into disfunction? And which metrics are not easily
gamed? Famously, counting lines of code (LoC) is ridiculous: anyone held to that
account can easily inflate their LoC.

Two issues that long bothered me are around the flow of communication. In
particular:

* Old tickets in the product backlog
* Getting feedback from sprint reviews

### Communicating Intent in the Product Backlog

My team deals in open-source software. We receive bug reports and suggestions
from a moderately sized community on a regular basis. How well are we responding
to those requests? A few days ago, I closed a ticket that was opened in 2017.
Why, oh wy, was that still open? Collectively, we need to do better at managing
that open backlog.

Clearly, there are some features, and even bugs, that we will
never be able to address. They are not of sufficiently high priority. If the
goal is be more timely in responding to these requests, perhaps we can track
_average ticket age_ (or alternately, _lead time_). Yes, someone can game that
system, whether on purpose or subconsciously. If we treat this more rigorously,
we can look at the spread in age as well: standard deviation.

What value does this measure bring? Improved communication and timeliness.

What about _cycle time_? Once a ticket is started, how quickly does the team turn
it around? This metric might be useful in a support function, but it does not
feel valuable in terms of product development. Also, the burnup/down chart is
already a useful proxy, in that it (ideally) shows steady progress toward a
sprint commitment.

What is more valuable is the tracking of _story point velocity_ per sprint, with
the goal of getting a best-guess at how much work can be completed in upcoming
sprints. Projected over the future backlog, this can give a sense of what
_might_ be possible by a given date. But this is not an operational metric that
should be tracked at the level of department: each team will have its own
velocity, and no comparison should be made between them. That said, it can be a
useful health metric: if the velocity starts to fall, it is time to ask what
might be going on.

Conclusion: at the department level, _try_ tracking `mean(ticket age) +/- 2*std(ticket
age)` for each product backlog.

### Sprint Review

Delivering high quality sprint reviews is very challenging for most people. I've
been meaning to write about it for years; I'm sure plenty of others have already
done so.

Short version: product "demonstrations" that do not elicit feedback, that dive
into technical minutia, or seem disconnected from _business value_ / _strategic
alignment_ lead to sparsely attended sprint reviews and/or disengaged
stakeholders.

To improve on matters, what if we measured attendance at sprint reviews,
counting the people outside the immediate team who show up? People will vote
with their feet, and we can count those votes. This does not tell us about
engagement, and it might not be valuable to look at this as an absolute number.
But it is a simple metric, easy to track and easy to recognize when something is
(ostensibly) going right or going a bit off the rails.


## Other topics

Some other insights from Sol Rashidi's talk.

Executive success requires more EQ, BQ, and SQ than IQ.

ROI can be more than just financial (at least in the direct sense). Relevance, for example. If you don't innovate, will you still be relevant? But that innovation should be aligned.

Convincing people of business alignment requires more than just a clear case. How you present that case matters. Look at hte Challenger explosion, for example, as describe in whats-his-name's book.

Don't surprise people _in front of others_ and make them look bad. Especially executives. Bring their teams along in your discovery. This is particularly in the context of digging into corporate data and finding missed opportunities or waste.

Business value is important, but not the only thing. Think both quantitatively and qualitatively. A use case may have great business value in theory, but be very difficult to complete or to deploy into production. Feasibility must also be a criterion.

Progress over perfection: show something, anything, to demonstrate progress.
Preservation over pride: play the long game.
Collaboration over control: be a willing partner

Reminds me of the Agile Manifesto

Have some empathy for executives: back-to-back meetings all day long. Constantly multi-tasking / code-switching. No time for details - so don't bring them the details (personal note: be ready to discuss when asked)
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ tags:
- religion
- discourse
sharing: true
excerpt_separator: <!--more-->
---


Expand Down
13 changes: 7 additions & 6 deletions _posts/2022/2022-01-21-python-from-wsl.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ tags:
- Linux
- Windows
sharing: true
excerpt_separator: <!--more-->
---

Prompted by a class I'm taking, I decided to try running Python from Windows
Expand Down Expand Up @@ -137,25 +138,25 @@ root.mainloop()

## Setting Environment Variables on Startup

Two environment variables were created in this process. It would be tedious to come back to
Two environment variables were created in this process. It would be tedious to come back to
this post and recopy them every time a new Ubuntu/Bash shell is opened. Linux has a simple
way of dealing with this: the `.profile` file contains instructions that run every time
you open a command prompt. There is also a `.bashrc` file that runs next, whenever you run
Bash (there are other shells that you could switch to, though Bash is the most popular).
Edit either one.
Edit either one.

You will need to use a text editor such as
You will need to use a text editor such as
[`nano`](https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/),
[`vim`](https://www.computerhope.com/unix/vim.htm), or `code`
(if you don't have it, typing `code` will automatically start the install of Visual Studio
[`vim`](https://www.computerhope.com/unix/vim.htm), or `code`
(if you don't have it, typing `code` will automatically start the install of Visual Studio
Code). All are excellent editors. Those who are new to Linux will probably feel more comfortable
starting up Visual Studio Code. I use it all the time. But I also use the command line frequently
when I only need to edit one file. Knowing how to use `nano` or `vim` is a wonderful skill
to develop. Of the two, `nano` is easier to learn, and `vim` is more powerful. Whichever
editor you choose, open the file like so: `code ~/.profile`. The `~` instructs the operating
system to look for the file in your home directory.

Once you figure out which editor to use, just add the following two lines at the bottom of
Once you figure out which editor to use, just add the following two lines at the bottom of
the `.profile` file:

```bash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ tags:
- religion
- Bahai
sharing: true
excerpt_separator: <!--more-->
---

On July 13, a new statue was placed in the U.S. Capitol: [Mary McLeod
Expand Down
3 changes: 3 additions & 0 deletions _posts/2023/2023-12-08-edfi-client-from-swagger.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ tags:
- ed-fi
- programming
sharing: true
excerpt_separator: <!--more-->
---

## Motivation
Expand All @@ -32,6 +33,8 @@ SDK](https://techdocs.ed-fi.org/display/ODSAPIS3V71/Using+Code+Generation+to+Cre
(Note: this link is for ODS/API 7.1, but the instructions are essentially the
same for all versions).

<!--more-->

But what about Python? Yes, Swagger Codegen supports Python output. But it is
not quite enough - you also need to manage authentication on your own. And,
running Swagger Codgen requires the Java Development Kit (JDK). The notes below
Expand Down
2 changes: 2 additions & 0 deletions _posts/2024/2024-02-11-delivering-value-as-engineer.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ people, and "other". I was bemused to note I currently sit squarely in the
category labeled "beware" 🤨. A position that may continue throughout this year,
but will need to change over time.

<!--more-->

One way that we can deliver value as senior engineers is by knowing when, and
how, to break the rules. Although I am now in management, I am staying close to
the work of one of our development teams. When I saw them struggling to meet the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ comments: true
tags:
- religion
- nature
- bahai
- Bahai
- climate
sharing: true
excerpt_separator: <!--more-->
Expand Down
1 change: 1 addition & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
<article class="post" itemprop="blogPost" itemscope itemtype="http://schema.org/BlogPosting">
{% include article.html %}
</article>
<a href="{{ url }}" class="badge badge-primary">Continue reading&hellip;</a>
{% endunless %}
{% endfor %}
</div>
Expand Down

0 comments on commit 08063b9

Please sign in to comment.