Skip to main content

Agile Value Proposition

20200411-agile-value-proposition

Nuggets Of Wisdom

  • Collective intelligence should be the goal, not a hand full of the smart individuals in the room. (Peter Senge)
  • Reward teams, not individuals. Blame process, not people.
  • Just because you can develop a solution doesn't mean you should.

Structuring Dialog

The following set of questions are merely a sample of the kinds of questions that should be answerable when starting a project. Like an employee and employer interviewing each other to make sure its a good fit, having a set of interview questions for a project is key to knowing the full context of the project and not just the technical opportunities I so often find myself drooling over.

I prefer the analogy of an interview, but the official term for this kind of questioning falls under the study of structured dialog. Allowing people to just coast through a meeting provides little to negative value. Instead of showing up to a meeting with the hope that you can get it to run itself, it can often be more prudent to structure the conversation with some ground rules and guidance. Driving a meeting with deliberate questions and flow can not only be valuable to gain a deeper insight into product development, but it can also contribute to an unconscious negotiation of information that would otherwise never see the light of day.

Author: Menner, Will.

Context

  • Why are we here?

  • Why is this transformation needed?

  • What portfolio will this solution be a part of?

  • What business or mission model / strategy applies?

  • What is the larger context within which this transformation makes sense?

  • What view of the domain makes this transformation meaningful?

  • Who is the project champion?

Inputs (Initial Conditions)

  • What are the top problems?

  • What are the relevant characteristics of the top problems?

  • What is causing the problems?

  • What are the goals and needs of our stakeholders?

  • What is the post-transformation vision?

  • What input or data is needed to work the problem?

  • Who are the suppliers of input or data?

  • What constraints are we operating under? (e.g. policies, legalities, budget, schedule)

  • What assumptions are we making?

Outputs (Desired Outcomes)

  • Who cares?

  • Who should care?

  • How do we reach them?

  • Who are the stakeholders?

  • Who are the winners? losers?

  • What potential reactions can we anticipate?

  • How do we know when the goals have been achieved?

  • What are the intermediate points where progress can be inspected?

  • If successful, what is the payoff?

  • If unsuccessful, what are the risks?

Solution

  • What are the best courses of action?

  • What are the best ideas for solving the problem?

  • How should we sequence our actions?

  • If we were unconstrained, how would we solve the problem?

  • Has somebody else already solved the problem or a portion of it?

  • Who are the "performers"?

  • What makes this project unique?

  • Who "owns" the solution process?

  • How is this project different from prior attempts?

  • What implementation tools and techniques should we use?

  • If the transformation is successful, what future or unintended consequences might occur?

Personal Experience

I originally learned these questions back in April 2020. Since then I've attempted to apply many of them to existing projects. It was surprising how many of them could not be answered by project leads off the cuff. Most commonly, folks would let me know they need to look into that and then never get back to me.

Background

Recently I've become increasingly interested in accelerating my usage of debuggers. For the past 10 or so years I've been a gdb user. By user, I mean I would always use GDB from the command line without TUI, performing breaks, watches, examine, and control commands. More often I have been able to get away from using debuggers by simply getting better at static analysis through tools like objdump. Now with a new arsenal of toolchains and development environments that I've been accumulating throughout 2020, I want to reacquaint myself with runtime debugging.

Problems In The Workspace

I am a software engineer that works for the US Government. That comment itself can bring up a lot of mumblings about "government workers", "inherent wasted process", and so forth. While I agree it can feel that way, understanding the difference between "Business Administration" and "Public Administration" has helped me reconcile why the government is the way it is and why you must never think of it as a business. But that isn't what this article is about.

My Situation

Currently I am working on a project where I am writing a plugin for a service that is a sort of python as a service. You can think of it as a Function As A Service (FaaS) kind of architecture, but the idea is that you provide the service all the python dependencies for your functions when you deploy. Additionally, the service doesn't provide any build toolchains, therefore all dependencies should be delivered as a set of wheels instead of python source distributions.

I've lightly been using git for many years. This was mostly so that I could navigate the linux kernel tree and for exploration of the tool's distributed properties. My current office has been deeply invested in Subversion since 2005 and can't seem to find a smooth transition plan for moving to git.

Due to a growing awareness of unconcience bias, replacing terms that have historically (or directly) been associated with slavery or racially incensitive terminology has become a trend. To be mindful about this entire process I decided to do some "re-google" to learn what Git's context of its famously used "master" branch.

KeyValues is a web site that matches software engineers by their desirable values. This is kind of neat because it pre-filters companies that you may find yourself miserable at due to prioritizing based simply on location, money, or prestiege. These are only 3 dimensions in a career that you'll likely be spending a third of your day involved in, with the other 2 thirds being life and sleep.

Over the past decade I feel like I've fallen into the governmental hole where I became increasingly isolated with the tech world. Each time I would poke my head up I'd find everyone just scrambling to reinvent things that (I felt) had previously existed for years with new names and APIs. Since the pandemic of 2020, I've taken a significantly closer look into what I've been missing.

Code Server

I've had friends telling me about online IDEs and IDEs in the cloud for about a year now. At the time, I always thought, that's great but: