Beautiful day out on the course today. Playing an informal tournament with friends where we’ll be playing 4 courses in one day! 😯 Time to get some steps in…

A disc golf basket raised on top of a mini lighthouse with a lake in the background.

I listened to Shakey Graves this morning while washing a mountain of dishes. I like whatever genre this is. Folk? I feel like I stumbled on something new to me, which is always exciting and fun! Opens up a new little world to explore. I welcome any artist/album suggestions like this! 🎶

Every now and then LinkedIn asks me to contribute to these collaborative articles, which have AI-generated content that humans respond to. This one was funny and unsettling… AI wants me to embrace AI if it disrupts my job… 🤔

p.s. This is actually good advice. Just feels weird coming from AI.

A screenshot showing the question "what do you do if artificial intelligence disrupts the web industry?" With the top answer being "Embrace AI"

A Brief Thought On A Recent Bout of Resistance

Gotta get back on the ol' blog! I’ve been working a bit on a draft of an article, but have been having some resistance to finishing it. Do I keep it long and playful like it is now, or cut the fluff and get right to the message?

I’ve been pondering this question, and I think the right answer is to just get the dang thing out into the world. Have fun writing it. The style does not matter. Either way, it will be a hit with some people and a miss with others. And that doesn’t matter anyways. I want to write for me to work through things and hopefully that helps others along the way. But if not, fine!

Just write Jake!

Finished reading The Checklist Manifesto by Atul Gawande 📚

Also, I started a digital garden at garden.weidok.al! I’ll share more about that another time. For now, here are my review and highlights of this book from my garden: garden.weidok.al/readwise/books/the-checklist-manifesto/

Text Message Triage

Me: “Oh, I need to respond to that later.”

Text Message: cries softly as it floats into the void, never to be seen again

Read More →

📷 Day 11: sky #mbapr

We watched the eclipse from Total Eclipse Fest in Cleveland. It was cool seeing all the NASA exhibits and being there for the official NASA broadcast!

The solar eclipse at totality with the Brown's stadium in the foreground.

📷 Day 6: windy #mbapr

12mph winds today. The tree branches out back are swaying calmly while the clouds float past leisurely.

Two bare trees in a grass field. Blue sky with large white clouds.

📷 Day 5: serene #mbapr

What greater serenity is there than fri(ed rice)day?

White rice, pork, and mixed vegetables in a wok.

📷 Day 4: foliage #mbapr

Taken at a local disc golf course last summer.

Trees surround grass surrounding a pond. In the right side of the foreground there is a disc golf basket and large tree.

📷 Day 3: card #mbapr

Another view of Day 1’s subject.

An ace of spades sticking out of a box of cards with a holographic beehive theme. Spacecraft models are blurred in the background.

📷 Day 2: flowers #mbapr

A beautiful bouquet my wife put together. We got these flowers from our friend and her mom, they run a flower stand together at our local farmer’s market.

A bouquet of pink and yellow flowers with mature tall grasses intermixed. Sitting on a faux qaurtz countertop with bright sunlight casting a long shadow away from the bouquet.

Looking forward to the Micro.blog April Photoblogging Challenge!

📷 Day 1: toy #mbapr

These playing cards sit on display in the background of my video calls. I used to mess around with card magic, now they get pulled down for Euchre occasionally. They also make for a nice fidget toy during meetings!

Two playing card decks in their boxes. One is NASA themed, the other is killer bees themed.

To Be Good, You Must Be Dangerous

“They see they can and must stand up, because they begin to understand how genuinely monstrous they will become, otherwise, feeding on their resentment, transforming it into the most destructive of wishes. To say it again: There is very little difference between the capacity for mayhem and destruction, integrated, and strength of character. This is one of the most difficult lessons of life.”

- Jordan B. Peterson, 12 Rules for Life

To be good, you must be dangerous.

Much of my life, I equated dangerous with bad. But I have come to realize that a chief aim of the good ought to be to increase their dangerousness. This is necessary when operating in and around evil.

A capacity for evil is not inherently bad. Your capacity is morally neutral, but it is up to you to wield it appropriately. C.S. Lewis illustrates this well when answering the question of why there is evil at all:

“‘Why did God make a creature of such rotten stuff that it went wrong?’ The better stuff a creature is made of—the cleverer and stronger and freer it is—then the better it will be if it goes right, but also the worse it will be if it goes wrong. A cow cannot be very good or very bad; a dog can be both better and worse; a child better and worse still; an ordinary man, still more so; a man of genius, still more so; a superhuman spirit best—or worst—of all.”

- C.S. Lewis, Mere Christianity

Jesus makes this point too, when telling his disciples that they ought to be wise as serpents. This is potent imagery considering it was a serpent that caused the fall of man.

“Behold, I am sending you out as sheep in the midst of wolves, so be wise as serpents and innocent as doves.”

Matthew 10:16 ESV

He implores them to wield the wisdom of the serpent with the innocence of the dove. Why not just tell them to be innocent as doves? Because to be good, you must be dangerous.

This then, is the aim of the good: to be cleverer and stronger and freer. To be dangerous.

Today I learned that nasa (pronounced naw-saw) in Hebrew means “to lift, bear up, carry, take”. Seems fitting with the mission of NASA! Hebrew Lexicon

My User Story Template

Below is the template I created for writing user stories.

# User Story

As a...  
I want...  
So that...  

# Description

Lorem...

# Acceptance Criteria

- bullet criteria

GIVEN setup  
WHEN action  
THEN result  

I write a lot of user stories for my team, and they need to be clear, to the point, and verifiable. This template was born out of a need for consistency in how user stories were defined and written and aims to give a development team the bare minimum they need to deliver a hot, fresh slice of valuable software. Nothing here is ground-breaking, but it serves as a foundation for defining work when building software.

User Story Statement Section

First, we start with the traditional user story statement.

As a
I want
So that

This forces the author of the story to be clear about who wants what, and most importantly, why they want it.

For the As a clause, try to be clear about a specific type of person. If your description can conjure up a mental picture of a distinct archetypal user-type, you’re doing it right. Avoid writing simply As a user at all costs. We’ve all done it, and we should all be ashamed.

In your I want section, describe one want. If you are tempted to have more than one clause here, you might consider if an additional user story is warranted.

With the So that clause, focus intently on the unique value this will provide to your archetypal user-type. This is the hardest clause to write, but also the most important to do well. It’s value may be obscure to some, because it does not directly contribute to the “spec” of what needs built. But this is your chance to clearly define the impact of this work to be done. It breathes life into the code to be written, and gives your designer, developer, tester, etc. a clear reason for doing what they’re doing.

Description Section

This is your chance to go into more detail about your user story. What should the user-facing phrasing be? What data are we working with?

I often will take a first pass at this providing as much important context and detail as I can from the product perspective. Sometimes, a developer will go into description after I’ve written it and add a subsection for Technical Details to go more in depth on any technical nuances to the user story that should be considered during development and testing.

Acceptance Criteria Section

Acceptance criteria gives the team a clear basis to know when they are done with a user story. It is something we can point to and either say “Yes, we accomplished what we wanted to” or “No, this doesn’t do everything we needed”.

I write acceptance criteria one of two ways, and sometimes I use both.

Bullet Syntax

Acceptance criteria can be a simple bullet-list. This is more often the case for smaller user stories, or ones that are more technical. This can be a simple, useful tool to include any non-functional requirements that need to be met to accept the user story.

Gherkin Syntax

When it makes sense, I write acceptance criteria in GIVEN, WHEN, THEN format. This lays out a very clear path for manually testing the user story, and this syntax can be used for behavior driven development. It becomes an executable spec that we can use directly in our automated tests.

Example

Here’s an example of a user story I’ve written recently:

User Story

As a case owner or admin
I want to add users to my case
So that I can collaborate with others
And determine appropriate access levels for CRUD operations

Description

link to mockups

The scope of this ticket includes setting up roles in the application. See the roles matrix for the case-specific roles in the application.

Add a button in the top right to add case members (see mockups, only visible for case owners and admins).

Owners and admins can add other members. The owner can add Admins, but Admins cannot add other Admins.

After clicking the button, the user selects a person and a role, and then can save them as a member to the case. After saving, the new member should be displayed in the case members table.

The role options will be…

  • Case Roles
    • Admin (CRUD, only visible to case owner)
    • Contributor (CRU, D data they created. Can remove items from diagram)
    • Report Editor (R, U report section)
    • View Only (R)

Note that “Owner” is not one of the role options, because the owner is whoever created the case and there will only ever be one owner per case.

Acceptance Criteria

GIVEN I am a (owner, case admin)
WHEN I add a member as a contributor
THEN the member is displayed in the case members table with the contributor role

GIVEN I am a (contributor, report editor, view only)
THEN I do not see the button to add a member

GIVEN I am “case admin”
WHEN I am selecting the role for a new member
THEN I can not select “case admin”

While this template helps define the user story, it is important to remember that the user story is a placeholder for conversation. If you write this up and then immediately push it to your team to work on it, you’re missing the beauty of the user story. Bring your draft of the user story before the team and then have a conversation about it. Invite ideas and questions from others on the team. Define and come to a common understanding of the problem to be solved, or the value to be delivered. Then determine how you will bring forth that solution or value.

If you adopt this template or some variation of it, reach out to let me know!

Who Am I?

I am the outlaw.
I am the innocent.
I am the sage.
I am the jester.

I am the everyman.
I am the ruler.
I am the caregiver.
I am the explorer.

I am the hero.
I am the artist.
I am the magician.
I am the lover.

I am the slave.
I am the master.
I am the giver of life.
I am the wreaker of havoc.

I am the one who decides.

I am you.

It was a beautiful day for disc golf, and then 10 minutes later… it wasn’t 😅

A concrete disc golf tee pad and disc golf bag in the foreground with a grass field and trees in the background.A red disc golf basket in front of trees with blurry snowflakes speeding through the frame.

I love weekend days when I can stroll around town, ducking in and out of local shops with the family.

An alleyway with murals of astronauts in space flanking either side.

Just stumbled on https://aboutideasnow.com/ on Mastodon. This seems like a great resource for finding good personal sites to follow and people to connect with!