On “Agile” Story Points

Eric Lawler

March 16, 2020

Filed under “

The question

Hi! I was wondering how you guys do Story Pointing? Do you follow the fibonacci sequence? If not, what do you do?

- Senior Business Systems Analyst

An innocent-enough question, yes? But this question has created more bitter discussions than almost any other philosophical discussion of business software development.

I dashed off this quick email in response, but wanted to post it to The Greater WorldWritten while the world is grappling with the Wuhan Coronavirus Epidemic, 2020. in the hopes that someone will read something lacking in my response… and quickly correct me. Please, send any semi-articulate thoughts to my first name @ this domain.

Response

Ah, this is truly a question for the ages.

Silversheet, like my previous engineering team, uses the fibonacci sequence for story points. But, like all teams, we do it “wrong” in the sense that we’re really just using it as a proxy for hours. “Hmm, I think that will take me half a day to complete–3 points.” or “Gee, sounds tricky. That’s probably a 2-ish day ticket? Probably? 8 points.”

I recently read this treatise on the subject from one of the Netlify pro[ject/duct] managers (a fast-growing tech company) and loved it. Using something wacky to break the link between points, which are supposed to measure complexity, and the usual amount of time required to complete a task sounds ingenious.

More importantly, in my experience, is to agree to a hard limit on how big a task can be before it gets decomposed. Basically, as I’m sure you’ve observed, the larger our estimation of complexity or time, the bigger that over/under on estimation gets. Woody Zuill, the “discovered” of mob programming principles, has a vicious exercise he does on software estimates. (Any of his essays on how useless estimates are might prove thought-provoking.) In his exercise, he has everyone time themselves on filling out a tic-tac-toe grid with numbers from 1-9 without repeating a number. Then he asks everyone what their estimate is on how long it would take to do the task again. Estimates are all in the range of 8-15 seconds.

So he has everyone do it again–oh, but, hang on, there’s a slight difference this time. The top row needs to add up to 5 and the left column needs to add up to 7. Immediately, this little constraint blows up everyone’s times. He repeats it a few time, then ends by introducing an impossible constraint. He wrote a program to detail every possible combination of 1-9 in a 3x3 grid, then ask for you to create the grid with a series of constraints that are literally impossible–but you wouldn’t know they’re impossible until you write a similar search algorithm to exhaust all the possibilities… Posing as the business user, he would continually ask “Tell me why this is different! It’s still just writing 5 lines and 9 numbers! How can this task possibly take ten minutes when you just told me it would take 8 seconds?”

To mitigate the classic “Why can’t we ever seem to estimate correctly?” you can clamp story sizes to enforce nothing larger than a 3-point taskMost people aren’t bold enough to do this, so it’s more common to see an 8-point limit. 8’s too big.. Then, when your 3-pointer runs aground on the craggy rocks of Reality, it slumps into what you’d expect a 5-point ticket to take, but it’s not the end of the world.

But when you’ve secretly packed three 3-point tickets masquerading as an 8-point task, you can run the risk of hiding 21-points of complexity (and time) in the innocent, not-well-understood task: How those 3 tasks combine can create a lot more complexity than tackling them in isolation.


Linux Cookbooks

Eric Lawler

December 24, 2019

Filed under “

I am forever losing random blog posts that explain the mysterious inner workings of Advanced Linux Components: udev, kmod, UEFI kernel mod signing, etc.

Rather than continue to accrue bookmarks that rot over time, I’m going to start writing down what I’ve learned, so I can reference it on a domain that won’t disappear in 3 years…

Installing nVidia drivers + Optimus in Fedora UEFI secure boot

Optimus is nVidia’s tech for switching loads from the lame-o built-in Intel GPUiGPU, for integrated to the beefy, discrete nVidia GPUeGPU, for, uh, not-the-intel-one in your workstation-y, game-y laptops. They have A New Thing now they call PRIME Render Offload that does High-Level Magic to render things on the beefy eGPU then feed it to the iGPU for display in the same X session.

nVidia added Linux support for PRIME in early 2019 or so, judging from the dates on internet comment threads. Fedora 31 supports all the patches to the X11 upstream natively–one of many reasons that Fedora and Arch are the only Linux distributions worth installing. And, surprisingly, RPM Fusion has a functioning kmod package for the nVidia drivers that’s new enough to support PRIME. Convenient!

Recipe

  1. dnf install akmod-nvidia
  2. pgrep kmod–wait for the module to finish compiling before doing anything else, sheesh.
  3. You already added your 509 DER sign-y keysWait, you do have 509 DER sign-y keys, right? No? Then, sheesh, do this: openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj “/CN=Eric Lawler Gave Me This Script and I Ran It Without Changing Any Values/” to the UEFI MOK, right? If not:
    1. mokutil --import your-public-key.der
    2. Give mokutil a nice password
    3. Reboot your machine
    4. Tell the lovely BIOS blue screen you want to add a new key. You should choose View key #0 to ensure that’s the one you added. Is it good through 2119? It probably should be. You don’t want your extra kernel modules to stop working next century, right?
    5. ADD THE KEY. You’ll have to enter your password from step ii (pronounced aiai).
    6. And that’s it. When you boot, you can sign things with that MOK key.
  4. Sign all the nVidia kernel modules with your DER key. You’ll have to do this every time you update the nVidia drivers or install a new kernel. Same as VirtualBox. I have a simple sh script:
echo 'Signing kernel modules for nvidia...'
for i in /usr/lib/modules/$(uname -r)/extra/nvidia/*ko; do
  echo "...signing $i"
  sudo /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 my-private-key.priv  my-public-key.der "$i";
done
echo 'Starting kernel modules'
sudo modprobe -v nvidia

…except that, of course, the kernel modules can’t start while nouveau is loaded. So reboot one more time after the first install to be running with nVidia’s drivers.

How to use it?

To use your laptop’s beefy nVidia GPU, append this environment string to whatever you’re running: __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia [program]

Steam launchers can be modified like so: __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia %command%

Remapping caps lock to backspace, 2019 edition

This one’s a real mess, but I’m too lazy to type it out now. I’m trusting that this dangling appendage will embarrass shame me into completing it, since the new Ask Fedora is absolutely, 100% useless and all the old Ask Fedora content (now rebranded as Askbot.fedora.org) will vanish soon, including Ahmad Samir’s ridiculously useful answer to my udev question from 2013.

tldr? Dig into the udev Readmes hiding on your system to learn all the udev utilities to run and monitor output while poking keys on your keyboard. Then you’ll suss out the manufacturer specific serial numbers/device IDs you can use to run rules or straight-up remap the hardware, as I do.

Here is my cookbook, for the next computer I purchase. Plop this in /lib/udev/hwdb.d/90-custom-keyboard.hwdb, in Linux kernel 5.X+ and this will cause the kernel to translate all slaps of the caps lock key, useless invention that it is, as a backspace key to every single application on your system: In X and Wayland and Virtual Terminals alike.

# Dell XPS 15
evdev:input:b0011v0001p0001eAB41*
 KEYBOARD_KEY_3a=backspace
 KEYBOARD_KEY_70039=backspace

# generic Logitech
evdev:input:b0003v046DpC31*
 KEYBOARD_KEY_3a=backspace
 KEYBOARD_KEY_70039=backspace

# Microsoft Sculpt Ergo Keyboard
evdev:input:b0003v045Ep07A5*
 KEYBOARD_KEY_3a=backspace
 KEYBOARD_KEY_70039=backspace

# Microsoft Natural Ergonomic Keyboard 4000
evdev:input:b0003v045Ep00DB*
 KEYBOARD_KEY_3a=backspace
 KEYBOARD_KEY_70039=backspace
 KEYBOARD_KEY_c022d=up
 KEYBOARD_KEY_c022e=down

# das keyboard
evdev:input:b0003v24F0*
 KEYBOARD_KEY_3a=backspace
 KEYBOARD_KEY_70039=backspace

Merry Christmas.