Can Laziness Be a Virtue?


Early on in my career, I worked at Motorola doing desktop support for the 800 people in their Paging Products Group in Fort Worth, Texas. Our team was responsible for the care and feeding of hundreds of Macintoshes, including keeping their anti-virus software up to date. This normally happened automatically over the network, but for one particular update, we were going to need to push an installation package out to all of the machines individually. That job fell to me and my friend Rich.

“Ugh,” I said to Rich. “We’re going to have to pull up our central management console, go down our entire list of machines, and one by one, send them this update. That’s going to take hours of seriously tedious work.”

“No way!” Rich responded. “We don’t have to do all of that boring work ourselves; we can automate it with a macro engine!”

“But Rich, it’ll take longer to build that script that it would take just to do this manually. And we’re on a deadline here.”

o “How about this?” he rejoined. “We split the job up. You do half of the updates manually. I’ll write the automation. And we’ll see who gets done first.”

This sounded fun (and meant I would only have to do half of the updates myself), so I quickly agreed to his scheme.

The next few hours saw a titanic struggle. I busily banged through the long list of machines, triggering the updates, waiting for them to complete, going on to the next, and thinking about how to minimize my keystrokes and do things most efficiently. (After all, my geek cred was on the line.) At the same time, Rich was building and refining his script, going down blind alleys once in a while but generally making solid progress while steadily throwing good-natured barbs my way.

As I approached the end of my list, I looked over to see that Rich finally seemed to have his script in good working order. He kicked it off, and it began chewing through his list at an impressive rate. I redoubled my efforts, doing my best to beat the machine, feeling like the modern equivalent of John Henry, the steel-driving man. (Though I was more a steel-rimmed glasses-driving man.)

At the end of that struggle, we finished up our respective lists within minutes of each other. Rich and I laughingly conceded that it was, for all practical purposes, a tie.

But…

In my heart of hearts, I knew that Rich had really won. Why? For a few reasons:

  • Rich’s solution scaled better. Once he had his script built, he could have tackled my list too with little additional effort or time.
  • The next time we needed to do a similar update, Rich’s work would allow us to accomplish it much more easily.
  • Rich had done more interesting work. There’s nothing fun about doing the same series of a few keystrokes 800 times consecutively. But building a tool to do the same task is comparatively fascinating brainwork.

I kind of proved my point, but Rich equally proved his, and had way more fun doing so.


Traditionally, Sloth is considered one of the deadly sins. There’s much to this; if we are unwilling to work hard at things, we are considerably less likely to get far in life. But there’s a flip side to this, which is that working hard at the wrong things is even more ineffective.

All the vigor you pour into straightening up your desk doesn’t count for much when you’re supposed to be getting your homework done. If you need a hole for a swimming pool dug in your yard, you might be impressed with the industry of the guy who shows up in your yard with nothing but a stout garden trowel. But you won’t hire him for the job, because he’s not working on the right thing. I have a friend whose personal mantra is “Work smarter, not harder.” Sage advice.

When Rich and I had our contest, I was working on a first-order problem: how to update all of these machines. Rich was working on a second-order problem: how to automate a process to update all of those machines. In general, the further up you can go on that sort of hierarchy of abstraction, the more interesting the problems become, and the more effective the solutions are. I worked harder, but Rich worked smarter.

I’m not much of a woodworker, but one of the things I’ve picked up from my friends who are good at it is the importance of making jigs. Jigs are job-specific tools a woodworker creates to make the task at hand easier. If you need to make a series of identical cuts to 100 boards, you can do all of those individually. Or you can first build a little jig that will guide your saw to the right place, making those cuts easier, faster, and more consistent. Good woodworkers will create a variety of jigs as they create a piece of furniture. And as I’ve gotten better as a developer, I’ve found myself writing more and more tools to automate tedious or error-prone parts of my work, creating code that writes other code, rather than writing everything directly.

This is, I’m convinced, the reason that some developers won’t stop using the highly-customizable text editor emacs until you pry it from their cold, dead fingers. Once they have invested sufficiently in automating and customizing the task of editing text or source code, going back to doing it without all of their purpose-built tools becomes slow, inefficient, and error-prone.

Archimedes asserts that with a fulcrum and a large enough lever, he could move the world. So as a developer, you have a choice when you have giant rocks to move: you can push really hard on that rock, pushing on evenings and weekends to get it where it needs to be on schedule. Or you can learn to make levers. (And, because this is software, levers that push other levers.) You can build at a low level of abstraction, or you can learn how to build tools, how to build tests, how to do meta-programming, and when you do something more than twice, stepping back to figure out if you can automate that task.

Let’s stop pushing on rocks, and start building levers. This is how we can use our natural tendencies to be lazy to actually get more accomplished that we would by simply throwing ourselves into a task. And as a bonus, it’s not only more productive but a lot more fun too.

Clarity as Kindness

Every time we speak, we ask something of the people with whom we’re talking. We ask for their attention, for space in the conversation, for them to think about what we have to say. For most of us, the cost to attend to someone is fairly small. For some — the hard of hearing, individuals with learning disabilities, the extremely introverted — the price of attention is higher. But in no case does it cost our listeners nothing.

In addition, we often make choices that are obstacles to effective communication. Our diction isn’t clear. We don’t think out what we are saying before we say it. We speak too softly. We don’t provide our listeners with the context they need. Our words are poorly chosen or don’t mean what we are trying to say. In these cases, the person to whom we’re speaking must ask us to repeat ourselves, to clarify a point, or to elaborate. None of these are inherently bad things. But all of them do increase the cost of communication.

Thus, taking the time to consider and craft one’s words is an act of generosity. Speaking clearly and well is a way to say “I value your time and attention and want to use them well.” Thinking before we speak puts a little more of the work of communication back on us. And all of these are ways of giving, of tacitly caring for the person with whom we speak.

In addition, putting this care into our talk has another benefit: our words are ultimately more likely to be heard. We all know people who speak much but say little. And we also know those who are often quiet, but when they do choose to share it is with just the right word. Knowing this, we often attend more closely to the speaker whose utterances are more consistently valuable.

Think before you speak. Be clear in meaning and diction. Consider what background your listeners need. While the process of good communication doesn’t rest solely on your shoulders, it can’t happen without you.

Starting at Handsome

I’m delighted to share the news that I’ve started at Handsome this week! Handsome is an Austin-based Holistic Experience Design Agency that conceives and develops beautiful, integrated, thoughtful brand experiences, services, mobile apps, websites, VR experiences, and more.

I’m particularly excited about the Technical Director role I’ve taken on because it will allow me to straddle the discipline of creating software, which I love, and building and supporting a team, which I enjoy and feels valuable to me. I’ll also be building support for a more distributed talent team, allowing the company to benefit not only from the brilliant designers and developers that Austin enjoys, but others from around the country and the world.

The people at Handsome are thinkers, dreamers, capable, diverse, interesting, and gracious human beings. (And a few are folks I know from previous roles and already think very highly of.) The offices are beautiful. And the work is satisfying, both creatively and as an opportunity to do something meaningful.

I’m excited about this next chapter of my professional life, and as time goes on, look forward to sharing more of the things we build together.

Five Stories, Four Walls, One of them Broken

I love a good story. I especially love a good story when it’s really well told. But I get the most excited when I encounter a good story that’s told well in a way that’s new to me.

On a recent family trip, we stopped to visit Meow Wolf in Santa Fe. I had lobbied to make it a point of call for us on the strength of a scant few facts: it had enlisted dozens of artists to create a fun house for adults, and it had $3.5 million of George RR Martin’s “Game of Thrones” fortune behind it. The nutritious vegetables of art combined with the delicious cheese sauce of lasers, arduinos, and black lights? Yes, please.

What I didn’t realize until we arrived and began exploring was that there’s a coherent narrative that underlies all of the mad, divergent installations that fill the House of Eternal Return’s 20,000 square feet. The story of an Orwellian totalitarian society, a family of experimenters, and an immortal hamster is told by means of pictures, a clothes dryer you crawl through, interactive exhibits, diaries and notebooks, and newspaper articles. Exploring the vast, dizzying space while stumbling across clues as to what happened to this family and where it lead them was one of the most engaging narrative experiences I’ve had in a long time. (Caveat: when at peak capacity, it becomes tough to fend off the jostling crowds enough to dig into the storyline. The “Blue Man Group has a rap battle with Burning Man while Tim Burton judges” vibe is still terrific, though.)

While not everyone has a taste for this sort of creative weirdness, I love it when storytellers try new things. If you’re a fan of this sort of thing, here for you are a few of my other favorite stories told in unusual ways:

The Skin of Our Teeth

Thornton Wilder’s “The Skin of our Teeth” was the first play I remember seeing where the characters of the play address the audience directly, and the world of the story gets thoroughly mixed with the world of the play’s production. It blends the silly, serious, and sublime irresistibly. When I saw it for the first time in High School, it was one of the most emotionally affecting experiences I’d had up to then, even 40 years after it won its Pulitzer Prize. It gets produced from time to time on both amateur and professional stages; keep your eyes open for it!

Device 6

Device 6” is a narrative game that runs on iOS devices. While largely prose based and story driven, it does weird and wonderful things with the text that wouldn’t be possible in a more traditional medium: turning words of the story itself into a map of the protagonist’s travels, blending beautifully-produced audio into the game’s puzzles, and having the soundtrack’s composer make an appearance in-game. It’s well worth the purchase if only to see the fascinating narrative devices that Simogo uses to tell its tale; the fact that it’s actually a good story is lagniappe.

S (Ship of Theseus)

Doug Dorset and J.J. Abrams, the same fellow who brought us “Lost” and some of the recent “Star Trek” and “Star Wars” films, also penned “S” (also known as “Ship of Theseus”), a terrifically interesting experiment in narrative in novel form. There are several parallel stories going on as you read through S: one is the text of the book itself. Another is a dialogue in the margins, purportedly left by readers of this copy of the book who wrote back to forth to each other in marginalia. Additional depth comes through other “real world” items — postcards, newspaper articles, ticket stubs — stuck in the book. Reading through all of these things and piecing together how the disparate parts fit together provides a wonderful sense of being “in on it,” of having stumbled across a rich, private world by accident.

Majestic

Back in 2001, when I was working for Electronic Arts, that company launched Neil Young’s “Majestic,” a groundbreaking Alternate Reality Game. At its heart, Majestic was a conspiracy-theory riddled science fiction thriller. The storyline itself wasn’t particularly novel, but the way it was played was different than anything that preceded it. Rather than launching a game on the computer, players interacted with the narrative using all of the tools of real life: they received emails and faxes from characters in the game, got chat messages, scoured real websites for clues, and fielded phone calls and voice mails that advanced the plot. This blurring of the lines between real life and the game was fascinating and made for a really compelling narrative experience, and increased my disappointment when the game was cancelled around a year after its launch.

Each of these experiences tried something new and made their stories richer. They are some of my very favorite storytelling experiences as a result. What are some of your favorites that have tried new things and pushed the boundaries of the form?

Crested Hens Chart

After we were having some trouble with the chart we had for it at rehearsal tonight, I worked out a new chart for the beautiful Gilles Chabenat tune Crested Hens. Grab the chart right here if you’d like to add it to your songbook.

ML Nexus

Howdy folks! I’ve been thinking about and studying Machine Learning off and on for a year or more now, and have recently started writing another blog covering my thoughts on that subject. If you’re interested in that sort of thing and would like to follow along, come join me at ML Nexus! I’d be glad to have your perspective on the things I’m covering there.

New Chapter at Banjo Digital

I’m happy to share the news that I’m joining up with Banjo Digital, an AR/VR firm in Austin that creates experiences for simulation/training, education, product design, and marketing. I’ll be serving as Technical Director, and will be starting next week. I’m excited about the move and look forward to doing great work together there!

The Electrics: A Long-Winded Story in Three Acts

Act I: 2007

If it weren’t for Ben Mengden, I’d probably never hear any new music. Though I play with various musicians fairly often, I don’t actually turn on the radio and listen to new stuff very frequently at all. (I listened to nothing but The Beatles for about nine months in high school.) Fortunately, I have a few comrades who have both good taste and enthusiasm for sharing, Ben foremost among them.

On a Stupid Guy Trip about 10 years back, several of us were traveling from central Texas to Santa Fe. The drive was long, and we had ample opportunity to visit, to stop and pose with a giant roadrunner sculpture (thanks Stockton!), to play various games in dubious taste, to eat three pounds of beef jerky, and to dig deep into Ben’s CD collection.

“I’ve got a few bands you need to hear!” Ben exclaimed as he led us on a tour through his current listening. Among them were two that I immediately became a fan of: Bright Eyes’ “Balance Beam” instantly caught my attention with Conor’s breaking, nearly out-of-control vocals and the subtle ostinato of the hammered dulcimer — an instrument one almost never hears in popular music — woven subtly into the mix. 

The other was The Electrics.

I’d started playing some traditional Irish with Robert Leahey and Steve Johnson several years previous, with some later encouragement from Brandi Midkiff. Robert and I even went so far as to build some our own pennywhistles out of PVC pipe and wooden dowels. (My hideously ugly low E was still in service until very recently.) But The Electrics took those traditional sounds and added electric guitars, drums, and a whole load of energy and enthusiasm. They were my first introduction to Irish rock, and I loved it. I forced the other passengers to listen to the entirety of their “Livin’ It Up When I Die” album twice more on the trip, and then Ben, ever a generous soul (or possibly wanting to avoid yet another listening session), gave me the disc to take with me. I wore it out.

Act II: 2017

Kris and I got married at the end of April and decided that, since her dear friends Beki Hemingway and Randy Kerkman were living in Wexford, and because it’s a beautiful place to which neither of us had even been, we would go to Ireland for our honeymoon. We took two weeks to tour the Emerald Isle, visiting the Giant’s Causeway, enjoying Guinness and Bulmer’s, seeing the ravages of The Troubles in Belfast, listening to traditional music, flying hawks in Cong, befriending sheep, and hiking through an enchanted forest adjacent to Ashford Castle.

We spent the first days of the trip, however, in Wexford with Randy & Beki. One evening as we were returning from a day trip, Beki asked “Should be stop by and see Sammy and Kylie? They’re married friends of ours, musical missionaries who perform together as a couple. They’re terrific people, and great musicians. You guys should meet them!” A few quick texts verified that they were at home and up for company, so we stopped by.

We pulled up, piled out, and knocked. Sammy immediately answered the door and gave us the warmest welcome imaginable, introducing us to Kylie and regaling us with tales of Ireland and sharing his store of Plopp, the unfortunately-named but delicious Swedish candy. After about thirty minutes of spirited conversation, in the midst of telling us about some of the work that he and Kylie are doing together, Sammy mentioned in passing “my old band.” Wanting to be an engaged guest, I politely asked when the next pause in the conversation came, “What was your old band?”

“The Electrics.”

“WHAT?!?”

“The Electrics. Have you heard of us?”

“You’re freaking KIDDING me. I LOVE The Electrics. You guys were my introduction to Irish rock, and my gateway drug to The Pogues, Dropkick Murphys, and that whole Boston Celtic punk scene. Holy Plopp, that’s fantastic!”

I fanboyed continuously at Sammy for about 5 minutes, after which he very graciously wiped off my enthusiastic spittle and gave us, not only the remaining Plopp, but also the CDs of the The Electrics that I didn’t already have and a thumb drive with all of his and Kylie’s music. The discs were a delight, and became the soundtrack for the rest of our honeymoon, both because of the kindness and generosity they represented, and because they’re some darn fine tunes.

Act III: 2018

A few months ago, back in Texas, I saw that Randy had posted on Facebook: “Just finished co-writing a worship song with Sammy, and I’m pretty excited about it.” Because I’m a believer in the “show, don’t tell” principle of writing, and because I like to give Randy a hard time, I responded with something like “MP3s or it didn’t happen!”

Randy, very appropriately, ignored my jibe. But Sammy messaged me privately and said “Here’s the rough draft we worked on. Pretty jazzed about it!” I gave it a listen, and really dug it. “Great stuff!” I responded with a few details about the things I appreciated about the music and the songwriting. I wrapped up with “Hey, if you need a pennywhistle track, let me know!” (This was, of course, one of those situations where you actually mean it, but realize you’re being a bit pushy and obnoxious and pass it off as a bit of a joke to give the other person a graceful way out.)

Sammy, being a frightfully decent human being, responded with a diplomatic “Well, Tim from The Electrics is coming to record all of the Celtic instruments in a few weeks, but you can have a go if you want.” (Bear in mind that at this point, Sammy and I have never played together, so the possibly imaginary subtext I read here was “Ok, fanboy, settle down and let the grownups do their thing.”)

But I was still excited about the prospect, so I pulled out my Blu mic, stuck it on a stand in my closet among all of the clothes on their hangers to get the driest signal I could (science!), fired up Garage Band, and threw down a few whistle tracks, doing several takes to get them as polished as I was able. I had a grand time working out the parts and recording them, so figured even if Sammy wasn’t keen on them at all, it was still time well spent. 

A couple days later, I got a note back from Sammy. “Hey, there’s some good stuff in here. I think we might be able to use this!” (Possibly imaginary subtext: “Well, maybe you’re not a complete ninny fanboy! Well, not _just_ a complete ninny fanboy!”)

We went through another iteration or two as the song got rewritten a bit, but finally wrapped up that exchange with Sammy telling me “This is great stuff. You’re an honorary Electric!”

My forwarding address for several days was Cloud Nine. Not only had I gotten to meet one my major musical influences, but now through a phenomenally serendipitous series of events had actually gotten to collaborate on a musical project with him from across the ocean. What a treat!

So, if you’re curious about this track, go check out Sammy’s kickstarter for the upcoming 2 disc project Worship Like a Celt. He’s brought a large collection of musicians together to explore the ancient Celtic influence on spirituality and worship. Sammy’s been working terrifically hard to make this a really solid project (as have Kylie, Beki, and Randy), and I’m excited to finally hear the finished product. 

And if you’re ever an hour south of Dublin, you might stop by and say hello. Just don’t forget the Plopp.

On the Market

After 6 educational & exciting years at Mutual Mobile, I am once again officially on the job market!

My ideal position right now would be that of a Technical Director or CTO for a small company. However, I do love development, and would be glad to put my shoulder to the work in Unity, iOS, or web as well. I plan to stay in San Marcos for at least another year, so working remote, in San Antonio, San Marcos, or Austin would be my best options.

I’m currently updating my portfolio, and you can see my resume here. Please email at sean@mcmains.net if you spot anything you think I should have my eye on.

Using Swagger APIs with Unity

February 6, 2018 Update: I figured out a workflow with the experimental .NET 4.6 support in Unity to actually make this work with Daydream, and have updated the workflow here. This solves the annoying caveat that I’d previously posted.

Swagger (aka OpenAPI) lets you define API structure in a machine-readable way. This allows all kinds of cool functionality: automatic docs, code generation across languages, etc. Here’s the workflow we’ve devised for consuming Swagger APIs in Unity. (Note: I’ve tested this on a Mac, but haven’t tried it on a PC yet.)

  1. Load your Swagger specification into the editor at https://app.swaggerhub.com/. (The easiest way is just to copy and paste it into the editor window.)
  2. Verify that the auto-generated documentation on the right looks correct.
  3. Choose “Csharp” from the “Download → Client” dropdown.
  4. Unzip the downloaded csharp-client-generated.zip file.
  5. Open a terminal window.
  6. Go to the directory of the new unzipped download. (e.g. “cd ~/Downloads/csharp-client-generated/“)
  7. Build your DLL: /bin/sh build.sh or build.bat if you’re on windows.
  8. Your DLL is now in the “bin” subdirectory of the downloaded folder and is called “IO.Swagger.dll”. Copy this to your “Scripts” folder in Unity.
  9. Find “Newtonsoft.Json.dll” (packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.dll) and copy it to your “Scripts” folder in Unity.
  10. Find “RestSharp.Net2.dll” (packages/RestSharp.105.1.0/lib/net452/RestSharp.dll) and copy it to your “Scripts” folder in Unity.
  11. You’ll also need to round up the DataAnnotations DLL from somewhere in your Unity package (Unity.app/Contents/MonoBleedingEdge/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll) and copy it into your “Scripts” folder in Unity.
  12. Unity loads the DLL and makes the IO.Swagger namespace available to you.

Using it:

Take a look in the docs folder of the project you downloaded from the Swagger editor. It includes nice Markup files with C# sample code documenting the APIs in your new DLL. The sample code makes a great starting point for accessing the DLL’s functionality.

Great Big Obnoxious Caveat:

This doesn’t currently work when running on Android due to this bug in Unity’s .NET implementation. We ended up doing a last-minute rewrite to use Best HTTP instead, which was a crying shame. Hoping this bug will indeed be fixed in the future and make this workflow viable on that platform.