SIGAVDI #39: Bird and Book Edition

Hello friends,

It's been a couple weeks. I just got back from visiting Jessica Kerr in St. Louis. We saw the St. Louis City Museum, which I can only describe as like crawling around inside Neil Gaiman's mind.

We also recorded some live coding videos in which we, as two aging mostly-backend developers attempt to create a new web application using modern JavaScript technologies. While drinking beer. They were a lot of fun to make. Let me know if you'd like to see more video in this vein.

One thing those pairing sessions reinforced: we really, really like Glitch. It's a phenomenal leveling technology. It removes a number of barriers to learning to code web apps. You don't have to figure out hosting, or understand version control (but it keeps a history and exports to Github!).

On the other hand, it doesn't insulate you from file structure, so you won't be totally at sea when you do start working from a local development environment.

Another data point: I have a friend I'm helping learn to code and she was able to construct her first website in Glitch on her phone. A lot of people don't have reliable access to a computer, so that's kind of a big deal.

Oh yeah, we also recorded a Greater Than Code episode with Jean-François Cloutier. Go check out his video about building learning robots in Elixir, it's great.

OK let's see what I got done. This is kind of dated, but…

  • Make sure the January 7 episode gets out the door.
  • Finish unpacking from Australia (seriously it's getting embarrassing at this point)
  • Catch up on the my assistant's daily briefings (bad llama)
  • Catch up on email AGAIN (frickin' holidays)
  • Prep a RubyTapas freebie because it's been way too long.
  • Make SIGAVDI easier to sign up for.

The plan for the rest of this week:

  • Submit a talk proposal to NordicJS (and use this as a pull to get my ducks in a row for talk submissions – update bio, abstracts, talk history page).
  • Make sure I'm on top of at least the next two RubyTapas episodes.
  • Make plans for the upcoming Cohere/ShipRise Smoky Mountain Retreat. We'll be working on the AsyncJS course and other plots & plans. What do I need to do to prep?
  • Reimplement Promises in Ruby, again, based on the A+ spec. Mostly because I feel like it, and it feeds into some RubyTapas scripts, I've been writing, as well as into improving my understanding for the AsyncJS course.

OK, I know this is short on pontification this week, but I'm late and I feel like it's most important to keep the habit going.

Talk to you soon!

SIGAVDI #38: New Years edition

Hello, friends.

You know, the only problem with writing these is that it immediately shifts me toward a pensive mood. Like, OK, correspondence mode, time to reflect on existential ennui. Of course, that could just be the fact that I'm in an airport after having dropped off my kids in Pennsylvania.

On the other hand (writing this 20 minutes later), it's the 1st of the year and I just got upgraded to first class, so maybe this is gonna be a good year.


This week I said some things on Twitter about the question “why”. I don't think this question is the panacea some people think it is.

A while back I realized that every time I ask one of my kids “why did that seem like a good idea?!” I'm not really looking for an answer. I'm just trying to shame them. I'm irritated and I want to make them feel bad by having to stand there and stammer out some rationalization.

Like, this past week I found one of the USB device charging cables with a bend connector. My daughter fessed up to it, and without thinking I said “why would you DO that??”.

Here's the thing: Rationally, we both know the real answer: there is no “why” most of the time. At best, she barely thought about it and forcing the connector seemed like a good idea at the time.

More often, these kinds of mistake don't even rise to the level of conscious consideration. Why did you jump off the couch onto me while I was carrying a beer? Because I'm a child and it is in my nature to jump on you, same as it is in a Kangaroo's nature to lick its arms when it's hot.

In theory, one justification for asking these kinds of “whys” anyway is as a way to encourage mindfulness. I'm a big fan of mindfulness teachings, a la Thich Nhat Hanh and other teachers. I'm also a big fan of cognitive research a la Thinking, Fast and Slow. It occurred to me last week that in light of what little I understand about neuroscience, constant mindfulness may be an unrealistic goal.

We each get a finite pool of emotional/creative/decision energy per day. What if mindfulness saps that pool? What if the price of high creativity and emotional presence in bursts is “going on autopilot” (“System 1”, for fellow Kahneman nerds) the rest of the time? What if better habits and trained reactions is a more practical goal than constant mindfulness?

At any rate, “why” is not only a problem in early childhood development. I've started paying attention to the nascent Resilience Engineering movement, and one thing people in that field are saying is that asking “why” about failures—i.e. doing root cause analysis—is a problematic practice. Just like with young children, the answer you get is often an after-action rationalization. Successful systems are complex systems, and complex systems don't contain singular root causes. It's easy to pick a convenient “why” in retrospect. The “why” you arrive at for a given failure may not say anything about the next failure coming down the pipe.


Speaking of resilience…

The earbuds you use once a month aren't charged so you can't use them. The fire extinguisher you stored under the sink five years ago has rusted shut. The mice have gotten into the spare bag of flour. The canned food you put aside in case of a bad blizzard were eaten by your hungry teenage children and their friends. Your backups stopped backing up three months ago and the warning emails went to an old address. Your scripts for spinning up a new server are out of date.

A fundamental rule of resilient systems is: use it or lose it. Backups, fallbacks, excess capacity, failovers, contingency plans… if you're not actually using them, they aren't going to be there when you need them the most.


Enough pontificating, let's see how I did.

  • Catch up on snail-mail. Done.
  • Catch up on my YNAB budget. Done.
  • Survive the holidaysBeing on this plane was pretty much my criterion for surviving, so… check!

What was good:

  • I've been playing with Glitch as a way for total newbies to quickly jump into coding without being held up by the need for a local development environment, hosting, understanding version control, or even owning a PC. So far my experience has been very positive!

What sucked:

  • The weather in Pennsylvania.

What's on deck for [the rest of] this week:

  • Make sure the January 7 episode gets out the door.
  • Finish unpacking from Australia (seriously it's getting embarrassing at this point)
  • Catch up on the my assistant's daily briefings (bad llama)
  • Catch up on email AGAIN (frickin' holidays)
  • Prep a RubyTapas freebie because it's been way too long.
  • Make SIGAVDI easier to sign up for.

That seems like more than enough.

SIGAVDI #36: Beef wellington edition

Hello friends,

It feels very right to be sitting down and writing this on a Monday. Normally what I'd be doing right now is dithering over the dozens of things I “need” to do in the coming week. Instead, I am going to write to you and together we're gonna figure this week out.

Read More

Now available: Master the Object-Oriented Mindset in Ruby and Rails

Back in late 2017 I set out on a little project to create a course of object-oriented design inspiration built around some of my favorite episodes from my show RubyTapas. As these projects so often do, it grew larger. Soon, it encompassed over 20 hours of brand-new video, pairing sessions, Q&A with industry luminaries, quizzes, supplemental readings, and more.

I initially released the course in beta form to just 300 students. Today, I'm happy to announce that Master the Object-Oriented Mindset in Ruby and Rails is available to all as a self-paced online course.

MOOM is a compilation of everything I've learned about writing flexible and comprehensible OO code over my two decades as a software developer, distilled and applied to practical Ruby and Rails examples. Rather than teaching a comprehensive “system” for OO design, MOOM focuses on inspirationgiving you the tools you need to identify the “missing objects” to decompose your applications into small, cohesive parts. It is a self-paced course that includes:

  • A collection of 23 fast-paced video lessons selected from the renowned RubyTapas archives, with new introductory material and “food for thought” exercises.
  • The Capacitor Sessions, a series of recorded pair-programming sessions showing how the object-oriented mindset is applied on a real-world Rails project.* (IMHO these videos alone are easily worth the price of admission).
  • 8 recorded hour-long Q&A sessions with industry experts like Justin Searls, Betsy Haibel, Ben Orenstein, Noel Rappin, and Corey Haines.
  • Supplemental reading and viewing: curated pointers to best-of-the-best talks, articles, and papers on OO thinking.
  • A dedicated forum for sharing and learning from other students.
  • Almost $300 in course-exclusive savings on related books and courses from Sandi Metz, Katrina Owen, Kent Beck, Justin Weiss, and many others.

(*Note: The Capacitor Sessions videos are fully recorded, but some of them are still in post-production. Course members receive emailed updates as the episodes are released.)

Here are some things that beta students had to to say about MOOM:

“I just want to thank you for the MOOM course. It is incredibly good… what really inspired me was the discussions with the special guests. Listening to experienced hands break down tricky issues with all of their trade-offs and warts (including contextual factors like team composition and business constraints) was wonderful.”
— Noah Botimer

“The way the class was organized was really accessible and digestible. I feel like I regularly am applying concepts I learned in this course to my growth as a software developer.”
— Marylou Lenhart

“I enjoyed the depth and breadth of the subjects covered. There were so many things I did not know about, Whole Objects for example, Smart Collections for another that it enabled me to quickly add more skills and concepts to my code.”
— Mitchell Gould

Are you ready to master the object-oriented mindset? Head on over to the course pagefor more information, or buy it now.

Happy hacking!