Hello Friends,

First off, sorry if you got another duplicate SIGAVDI from last week. Drip's RSS-to-email service apparently doesn't keep track of the IDs of posts it has already syndicated.


Let's start with a picture of a flower before I get cranky.

Last week I tried to get started with AWS Lambda. It did not go well. I did a lot of cursing on Twitter and on stream.

The AWS developer experience is straight-up awful, and it's a wonder to me that anyone tolerates it. It's reminiscent of J2EE a couple decades ago, in that there is a lot of totally unnecessary ceremony, but it's “the standard” so everyone assumes that this is just the way it has to be.

Now there is a devoted technical priesthood, who have invested both their livelihood and their sense of mastery in the persistence of the status quo. Not to mention the strata of parasitic services which exist solely to put a simplified face on AWS services, and whose existence thus depends on raw AWS continuing to be a shitshow.

These are not good incentives to have in your developer ecosystem.

Example 1: In the 500 page official guide to AWS Lambda, there is a section that instructs the developer to “write the following JSON”. There follows three pages of JSON intended to be entered into a text field. Someone actually wrote that out and said “yep, this is acceptable, ship it”.

Example 2: In order to use the AWS CLI for the first time, I am instructed to:

  1. Log into the web portal
  2. create a new user
  3. create a new administrative group
  4. and search through several hundred permission bundles in order to find the correct one to…
  5. …assign admin rights to the new group, so that I can finally
  6. Copy an ID and a key to the CLI setup.

Compare this to the Heroku CLI experience.

AWS is also reminiscent of the Microsoft developer ecosystem a couple decades ago, in that the breakneck pace of API updates gives invested developers no time to step back and evaluate alternatives.

(For the record, no, this complexity is not essential—from what I've seen so far the Microsoft Azure experience is a shining example of how it can be done better. My how the mighty have… gotten their shit together.)

Someone quoted Hanlon to me in reply to one of my tweets: “Never attribute to malice that which is adequately explained by stupidity”. I don't think systems like this stem from malice. Sociotechnical systems are more like water seeking the least opposed path through which to flow. All it takes for malicious attributes to spontaneously emerge is for no one to reflect on the outcomes.


One other insight that came out of that rotten experience: good APIs and good documentation are inseparable. You can't have the one without the other. You get them both at once, when the people tasked with communicating to developers are empowered to say “the experience I am documenting is unacceptable, let's change this”. I watch Jessica doing this for Atomist on her streams all the time, and it's great. I've also heard the same kinds of stories from Azure's DevRel team, and it shows in the quality of both their docs and their DevX.


I wrote some advice to a friend the other day. It's about the worlds we hold inside, and the longing we sometimes have for someone to come join us in our inner worlds. It went something like this:

No one can join us in our inner worlds.
There is a place inside where we all stand alone.
It's not about finding someone to join you.
It's about joining with others and building worlds in the connections.
This requires a letting-go.
Letting go of control.
Letting go of dreams.
Not forever, just for a time.
Every time I let go it's painful.
Every time, I don't want to.
Someone says “come build this thing with me”.
And it's not my trip. It's not my brand. It's not my dream. It's not my thing.
But I work with them.
And a thousand insights take flight
Worlds take shape between us.
It's… washing up on other people's shores.
Allowing their dreams to take precedence for an hour or a day or a week.
This is how we entangle ourselves with the world
And in return we get leverage.
And our insights are deepened.
And we are enriched.

Let's see how I did.

  • ✔ The usual RubyTapas stuff. Eh, sort of.
  • ✔ Nail down March travel plans.
  • ❌ Write and publish a post about the consulting gig I want to pick up. Didn't happen.
  • ✔ Evaluate open loops of projects-that-could-be-generating-revenue-if-I-finished-them, pick one and make a concrete plan to finish it by a specific date. Yep! I picked the “Flawless Ruby” course I've been quietly developing, and added 17 new lessons to make it content-complete.
  • ✔ Submit to a conference. Two, in fact: DevOpsDays/Serverlessdays Atlanta and THAT Conference.
  • ❌ Clean up the weightlifting room so I can start working out there again.

Next up:

  • Create and launch a marketing campaign for Flawless Ruby.
  • Publish “Beyond Business Cards”, a recorded discussion I had with Jessica Kerr about how to meet people at tech events.
  • Get next week's RubyTapas episode out the door.
  • Visit my kids.

Published by Avdi Grimm