Pick one novelty per project

My pal Brandon Hays and I are fond of noting that projects have a very limited tolerance for the risk of picking a novel technology or approach. Thus, they should intentionally choose one thing to break ground on: database, language, domain model, testing methodology, design paradigm, etc.

Turns out, that’s sort of a thing in social psychology too:

Idiosyncrasy credit is a concept in social psychology that describes an individual’s capacity to acceptably deviate from group expectations. Idiosyncrasy credits are increased (earned) each time an individual conforms to a group’s expectations, and decreased (spent) each time an individual deviates from a group’s expectations.

Turns out this is strongly related to leadership, group expectations, and conformism. That explains a lot of my experience. Those most interested in trying novel approaches are often those who let expectations and conformism take a backseat to trying something new or breaking the mold.

I don’t think this is necessarily good or bad; it’s fine and healthy for a project to choose to vary from the norm in some way. Even better, manage those variances so if things don’t go to plan, you can back them out and keep rolling. But, it doesn’t hurt to consider varying in ways that are likely to yield more “credits” amongst your team.


Teach people to magnify their mind, not write code

Coding is not the new literacy:

When we say that coding is the new literacy, we're arguing that wielding a pencil and paper is the old one. Coding, like writing, is a mechanical act. All we've done is upgrade the storage medium. Writing if statements and for loops is straightforward to teach people, but it doesn't make them any more capable. Just like writing, we have to know how to solidify our thoughts and get them out of our head. In the case of programming though, if we manage to do that in a certain way, a computer can do more than just store them. It can compute with them.

That is, it’s not enough to write a loop in Ruby, a class in Java, or use a channel in Go. You’ve got to learn way more “material” than that: how to run your code in an application server, how to store rows in a database, how to deploy all your code to another machine. And then: how to have good taste, how to correct oversight, how to avoid bugs! And then, worst of all: knowing all the little miniutae like platform bugs, slow code paths, unstable code, dependency hell.

We shouldn’t put that upon people just because that’s how most programmers interact with computers. We should keep looking to help folks leverage systems as part of their work, not learn how to build systems to leverage systems to do their work.

Hence, the ending:

Alan Kay did a talk at OOPSLA in 1997 titled "The computer revolution hasn't happened yet," in which he argued that we haven't realized the potential that computers can provide for us. Eighteen years later, I still agree with him - it hasn't happened yet. And teaching people how to loop over a list won't make it happen either. To realize the potential of computers, we have to focus on the fundamental skills that allow us to harness external computation. We have to create a new generation of tools that allow us to express our models without switching professions and a new generation of modelers who wield them.

We’ve succeeded in magnifying our voices with computers. I like forward to standing back and looking with wonder at how much we’ve magnified our minds.


When software loses its hair

Software’s Receding Hairline:

This is interesting, because the mechanism of growing a comb-over applies to software development. A comb-over is the accumulation of years of deciding that today is not the day to change things. A comb-over is the result of years of procrastination, years of decisions that seem right when you’re in a hurry to get ready for work but in retrospect one of those days should have included a trip to the barber and a bold decision to accept your baldness or take some other action as you saw fit.

A comb-over is a local maximum for improving baldness. You can’t really escape baldness of your head. You can escape a local maximum in your software, if you’re thoughtful about managing tradeoffs between product progress and technical progress.

It would have been better if you hadn’t gone bald in the first place though. Same with software!

(Analogies are just great. Thanks for this one, Reginald.)


New Pro Bowl selection explainer

Pro Bowl rosters selected by Michael Irvin and Cris Carter:

Last year, the NFL did away with the AFC vs. NFC format and began using "captains" to oversee a fantasy draft to fill out the teams. In 2014, Jerry Rice and Deion Sanders were the honorary captains, with this year's choices being Hall of Fame receivers Michael Irvin and Cris Carter.

In other words, they took the one thing fans can control about the sport, choosing the team in the game that means nothing, and gave that responsibility back to millionaires.

Besides the dozens of other terrible things about the NFL, this is the most NFL thing I’ve heard all week.


Sometimes

  1. Sometimes you go on a writing slump. Usually, just throwing something at the wall is how you undo that.
  2. Sometimes you notice that a lot of your writing can end up in platitudes and that deepens your slump. We regret the error, those responsible have been sacked.
  3. Sometimes you get kinda caught up in learning, tinkering, and enjoying things and forget to write. That's ok!

18 months is a smelly interval

18 months is a dangerous window, when it comes to building a product. It’s far enough in the future that it seems like you could deliver an ambitious idea within a year and a half. But it’s a long enough timeline that one is tempted to skip the necessary contemplation, dividing-and-conquering, and hypothetical thinking that the planning process forces on you.

As it happens, 18 months is 540 days. 540 degrees is one and a half revolutions. As in, you started a revolution, but ended up regressing.

Saddest trombone. Be wary of anything that promises to happen in 18 months. It’s the “epic handwaving” of project management.


Dining at the source code buffet

Let me start with a quote from wonderful person James Edward Gray II:

One of my favorite techniques for really learning a new language is to read the core API like a good novel. I’m a hit at parties!

I’ve had great success with this approach as well. I probably read the majority of Rails, the source of every RubyGem I used, and chunks of Ruby’s standard library in my first few years of working with Ruby. I picked up new tricks, figured out how things worked, and got myself out of a lot of tricky corners by reading code.

That we can do this is, to me, the real wonder of working with an open source stack. If I’m curious, I can dig into the framework, language, database, compiler, and operating system I’m using. If something goes weird, I can dig into it. I probably won’t end up changing or fixing anything below my app in the stack, but the ability to peel back the layers is a huge deal.

Given the choice of digging into why software sometimes goes weird and complaining or giving up, always chose digging into the source to see what’s going on.

When you work with open source software, you can always chose to figure out what’s going on around your app. Eating at the source code buffet is awesome!


Megaprojects: megacool

Megaproject. It’s a cool word. It’s an even cooler list-of-pages on Wikipedia. I’ve only worked on projects limited to tens or dozens of people. The human and geographical scale of some of these endeavors just blows my mind. The coordination and planning required for something like the Boeing 747 or Apollo program is beyond my comprehension. (OK, maybe I’m still really into aerospace; I did go to Space Camp. Twice.)

I would love to be a fly on the wall of the meeting where it’s decided to go ahead with a project that will be visible from quite some height above the earth like Denver International Airport or Walt Disney World. That’s a pretty huge commitment. I waffle for weeks when I decide I’m going to buy a new car!

If those don’t whet your appetite, perhaps speculative megastructures are more your speed? Trans-global highways! And of course, Dyson spheres, ringworlds, et cetera.

It’s good to remind myself that occasionally, human kind is capable of building really great stuff.


Is SNL trending up?

Has SNL been getting worse? Viewer ratings say, nope. If anything, it’s becoming more consistent and slightly better. Previously: how to understand SNL. Always: nostalgia bias.

(BTW, know how yes/no question headlines are always answered no? But this one is yes? LOL.)


Sam Stephenson, understated and excellent

I’ve enjoyed Sam Stephenson’s work for a long time. Even before “sheesh”, the most polite dismantling of an over-privileged open source user, Sam’s work has been top notch. Prototype is the library that made JavaScript palatable and learnable for me. pow and rbenv, in concert with ruby-build, are a lovely simplification of the weird problem of maintaining Ruby development environments.

The thing that pulls it all together, I think, is how well suited his solutions to diverse problems are. There aren’t a bunch of moving parts. Prototype was very much a library, and not a framework. His code is very much of the tool, playing well in the environment, be it Ruby, CoffeeScript, or even shell scripts. rbenv, ruby-build, and pow all play to the strength of bash and Node rather than trying to extend them to become something they’re not.

I was tempted to say his work is minimalistic. On second thought, I think it’s understated. Look at his website or photostream. The quality of just enough, but not too much, isn’t luck. It’s Sam Stephenson’s calling card. I love it.


Vacation, disposable, and calm computing

1

Let me talk about vacation computing. The prime directive of vacation computing is that you should compute on vacation as little as possible. Neglect your email, abandon your social mediums. Don’t do the things you normally do, regardless of how computery your regular work is.

From there, it follows that your vacation computer should basically not be a computer. That means smartphones, tablets, and book readers are the only options. But smartphones are pretty much synonymous with social media, so they aren’t really viable as a vacation computer (though you probably want it anyway because they’re a superpower). Tablets are nearly computers now, so that’s not viable either.

It follows that a book reader is the only acceptable vacation computer.

2

Let me talk about disposable computing now. We put a lot of important stuff on our computers these days. Important passwords, legal documents, email, family pictures, private pictures, computer games, purchased and bespoke music, Hollywood and home video, etc. Sometimes those computers are in our pockets, sometimes they’re on our laps and coffee tables, and occasionally you might still find them on our desks!

For the drama and heartbreak that can occur when we lose these computers, we take astoundingly bad care of them. We don’t back them up, we reuse passwords. A moment without wireless networking is the worst and yet we don’t take steps to prevent even more dramatic losses due to password breaches and storage failure.

Given all of this, a computer is made better by making it a disposable object. Backup your data, and backup your backups. Practice good password habits as much as possible so your accounts are isolated and somewhat disposable. Know your gameplan and what happens to your stuff if your computer or backups fall into a lava pit.

3

Knowing about vacation and disposable computing, I’m led to an odd and dissonant conclusion: an e-ink Kindle is the perfect computer. It does not do work, it does not social media. You can take it through airport security without any extra steps, which feels a little perverse and seems a bit surreal. It does not interrupt, it does not beep or blorp, it just barely displays text. As modern computers go, it’s basically useless.

But. You can read on it. And reading is so wonderful. And you can put stress aside. A Kindle gets wet? Not a big deal. Drop a Kindle? Not a big deal. Try to use it by the pool, out in nature, out in weather, out where the internet does not go? Not a big deal. Lose your Kindle? Buy another one, it costs a fraction of all your other computers.

The one scenario where you will find yourself absolutely screwed with a Kindle is when you have to enter text. Logging into Amazon or a wireless network for the first time? That’s a bad time.

In every other respect, the Kindle is a computer that does nothing to increase your stress level. That’s pretty remarkable today. Let’s make more calm computing devices, ok?


Apple, Disney, and obsession

People in technology disproportionately like to comment on Apple’s products and business. Outside of technology, there are just as many folks who love to obsess over Disney’s theme parks. Based on my friend networks, I’d wager that for every person who obsesses over Apple’s keynotes, there’s a Disney enthusiast keeping up on special events and the best way to enjoy the theme parks.

The connection that strikes me is that both of these companies pay more attention to details than their competitors. Apple’s competitors throw software and hardware at the wall like spaghetti, hoping it will stick. Disney’s competitors rename their rides to match the blockbusters of summer. By comparison, Apple makes a big deal about the fit and finish of their hardware (let’s not talk about that camera though!) and has a coherent story about how all their products fit together into a useful landscape. Disney carefully arranges their parks to keep the guests in a cohesive movie world and pays attention to the little details that enhance or optimize the experience.

I could make some value judgement here about how attention to detail is more profitable, better design, better engineering, or whatever. I suspect all of those are true, but it’s not what excites me about Apple or Disney. When I read about changes to Disney’s theme parks or Apple’s keynotes, I’m excited that there are companies, quite large and successful ones, that are connecting lot of dots in an intriguing way. They’re extracting delight from large scale complexity. Megaprojects are nifty and often enhance humanity, but they’re mostly out of touch or sight. It’s nice that some of us can experience and enjoy these commercial projects of vast scale and quality execution.


Multiplication over management

When a developer becomes a manager, It’s not a promotion, it’s a career change:

If you want to do your leadership job effectively, you will be exercising a vastly different set of skills on a daily basis to what you are exercising as an engineer. Skills you likely haven't developed and are unaware of.

Your job is not to be an engineer. Your job is not to be a manager. Your job is to be a multiplier.

Don’t miss the section on how we undervalue non-technical skills. It’s not unlike developing software, it’s just that your levers are people and processes instead of software and data centers. See also, Managing Humans.


How to succeed at Rails by trying

I think most teams, probably 90% of them, should start and stick with Rails conventions. Intelligently apply design principles, watch out for coupling that’s not worthwhile, carefully add dependencies when you must, sure. But don’t worry too much about erecting a wall between your app and Rails, building microservices, or whatever fashion dictates when you run rails new.

That said, I don’t think strict adherence to Rails’ opinions is the only way to succeed when using Ruby to build for the web. You can adopt the principles of Rails’ opinions, e.g. use code over configuration to fight boilerplate or reduce the number of choices developers need to make by curating some libraries. You could document those principles and invest in new teammates by mentoring them up on your framework and tools.

Actually, you should do that anyway! But there are reasons you may not be able to do that: the team is too junior, time is tight, you need to explore new technical ground in other areas of the project. If that sounds like your team, you will benefit a lot from letting Rails do much of the tool-building, principle-seeking, and training for you.


The wolf moves fast...

The Wolf:

The Wolf moves fast because he or she is able to avoid the encumbering necessities of a group of people building at scale. This avoidance of most things process related combined with exceptional engineering ability allows them to move at speed which makes them unusually productive. It’s this productivity that the rest of the team can… smell. It’s this scent of pure productivity that allows them to further skirt documentation, meetings, and annual reviews.

See also, The Grinder.


How waterparks became a thing

The Men Who Built the Great American Waterpark, a roaring tale about the fellows who created the notion of a park for water attractions, from Wet and Wild to my personal favorite place on earth, Schlitterbahn. Told as is typical of the slightly nerdy, slightly narrative Grantland form.


Well-tuned judgement

Lessons From A Lifetime Of Being A Programmer:

Never stop learning, the technology steamroller is right behind you waiting for you to stop.

I’ve taken this one seriously in the past, almost aways tinkering with languages, databases, frameworks, etc. I think it’s served me up to a point, expanding my mind and learning different ways to do to things.

The problem is I’ve reached the point of diminishing returns. I could go learn a stack-based language like Factor, or bend my brain around a oddly shaped database like Datomic. I’m not sure it would make me much better as a developer and leader of software teams.

Instead, the steamroller I think I need to keep ahead of is practice. Given a problem, what are three different solutions? What are their tradeoffs? Which approaches seem nice on paper, or in a blog post, but don’t work out a few hours down the road?

To wit:

This isn’t obvious to everyone, but the ability to see something new, or see what others are doing, or to compare multiple ways of doing something and then pick the best option for you, your team, your project or even your company is incredibly valuable. Most people I’ve seen are not very good at this. Most leaders are really terrible at this. It’s easy to just do what someone tells you you should do or something you read in a blog or just do what everyone else is doing. It’s much more difficult to look at things from all sides and your needs and pick something that seems to be best at that point. Of course you have to make some decision, people are often paralyzed by having to evaluate which often leads to picking something random or following the herd.

Well-tuned judgement is where I’m hoping to go next. Part of that is experience, knowing the forces and tradeoffs that apply to the possible solutions. Part of that is the ability to communicate it with teammates, sometimes face-to-face and sometimes asychronously. The really challenging part is letting your teammates run with the result of that judgement and collaboration.

A good developer makes good decisions for their own implementation; a great developer helps the whole team implement good decisions.


Commercialeering

Things you might hear in commercials/promotions for software and beer:

“The first 96-calorie Pilsner” “Invented the smooth-pour top” “Next-generation build system” “The database that beats the CAP theorem”

American software and beer, much innovation, many hands waving. Solutioneering!


Sportsball Deciphered (II)

It’s Thursday. Sadly enough, this year, that means there’s football on. We’re far from peak football, but it’s getting closer. Prepare yourself, and tell your kids of the days when Sunday was a special day because no other day had real football. Now, on to more no-nonsense, jargon-free definitions of football jargon.


A Hail Mary is the most desperate offensive play. If you’re doing poorly, the end is near, and you need a miracle, your Hail Mary effort is the low-odds, high reward manuever to save the day.

You start executing your plan with the snap.

If someone inappropriately prevents someone else from doing their job, you could say they have committed pass interference.

If you’re not making progress forwards or backwards in your plan, and are instead moving laterally, you may have gone sideways.

If you want to commend a teammate for doing well, and you’re comfortable around them, you might give them an ass slap, but be careful; everyone watching will notice it and wonder things.

Coaching in the NFL is now sufficiently complicated that coaches often have a list of plays that resembles a laminated take-out menu in-hand at all times on the sideline. This is addition to the radio headset that makes them look like they’re working the drive-through at your local burger joint.

A strategy that involves taking medium-to-high reward, low probability chances all the time is not too dissimilar from always passing the ball. If you were instead going for lower reward but higher probability tactics, you’d be always running the ball.

If you run out of chances and don’t even succeed at a small incremental goal, you’ll have to punt. The other team will get a chance and hopefully you’ll get to try again, but your tactical progress will probably be reset.

A strategy that emphasizes protecting against big losses over smaller losses is not unlike a nickel defense.

If you fail to protect the leader, you have given up a sack.


For more, revisit Part I.


Vegas, America/Starbuck's playground

I’m going to Vegas this weekend with my wife on a real vacation where we’re going to do as little as possible. Not run around Disney World all day, not drive up and down the southern California coast. Based on this little bit of research, I can’t wait.

Three Starbucks facing each other