Ran across this article from Twitter's Engineering Effectiveness group thinking about how big a team needs to be before dedicating a portion of that
team to aiding the rest of the team pays for itself.

Not necessarily hard answers, but thought provoking content.

My current LivingSocial cohort Shane Warden shared an article the other day titled “The steel man of #GamerGate”, which isn't really about #GamerGate but about steelmanning, “the art of addressing the best form of the other person’s argument, even if it’s not the one they presented.”

Which was timely, because the most recent This American Life features a bit where producer Alex Blumberg got to pitch a startup idea to Chris Sacca, and Sacca expertly steelmanned Alex:

At a certain point, Chris drops the pretense that this is an actual investor meeting and just starts coaching me on my pitch, feeding me questions, and then correcting my answers.

“Give me a second and I'm gonna give you your pitch back.”

And then, right there, not far from the freeway overpass near Pico and Bundy, he steps into the role of me, starts giving the pitch I should be giving.


Alex Blumberg: That was amazing!

Chris Sacca: That's your story, right?

Alex Blumberg: That is great. Holy [BLEEP]. I thought I was a storyteller. Now I feel bad about my job.

I'm thinking, oh, if he pitched my idea that well, he must be into it, right? He's going to invest. But then he goes on.


At this point, I have no idea what to think. I'm drained, my pits are drenched, and Chris Sacca has just given me two completely convincing cases in favor of and against investing in my business. Whatever shred of conviction I had about this process at the beginning is gone.

Audio for this portion starts around the 24 minute mark, though this story is the first in the episode, so you can also just listen from the beginning.

This also overlaps with the conflict resolution skills my wife and I were taught and what we also use when working with other couples, to endeavor to repeat back to another person what was heard, to make sure a problem is mutually understood before attempting to rectify anything.

A friend of mine recently asked for advice on pitching himself to a group of developers for a project management spot at his gig. He was feeling the weightiness of asking to help manage a group of people who do work he doesn't deeply understand himself.

Rather than try to pitch them on projects he had successfully managed before, we talked about what I want, and I came up with this pitch:

What would you say?
Rails 4 has moved its rails command to the bin directory of the application, but this collides with any existing rails command put there by the --binstubs flag, and the two are not compatible.

The recommended way to use binstubs with Bundler and Rails 4 is to not use the global --binstubs flag, but to call bundle binstubs [gemname] individually on gems you want in your local bin folder. For some background on these changes, check out these commit comment threads: rails bundler.

There was an attempt to make Bundler 1.3.x not override anything in the bin directory if --binstubs was in effect, but that change was reverted for semantic versioning. My understanding is this change will be re-attempted in Bundler 2.x.
I've been using the local path option with Bundler for some time now and it works really well. I use RubyMine and it won't browse . directories, so rather than using the .bundle dir for the local install path, I've taken to using ‘zz’ so I can still get all of the good RubyMine goodness for spelunking gem code while making sure gems are grouped at the bottom of my search results. Working on a project in the midst of a Ruby upgrade, it's also nice to have groups of 1.8 and 1.9 gems installed separately in the zz/ruby/1.x/gems paths.

One thing I find myself doing on occasion when trying to sort out gem troubles is removing an entire gem's directory structure, mistakenly thinking that'll get bundler to re-install the gem on the next bundle call.

The problem is Bundler (or actually RubyGems) doesn't check the gem's installed directory for its presence, but just scans the specifications folder for .gemspec files. In order for my little trick to work, I not only need to blow away the gems directory structure in zz/ruby/1.x/gems/, but also its .gemspec file in zz/ruby/1.x/specifications.

It would be nice if a bundle reinstall command existed to do this. `bundle update` isn't what I want since that will update to the latest matching version.
If technology is getting you down, gentle developer, you're not alone. It's easy to be overwhelmed by the sheer amount of stuff out there in the wide wide world of webs, not to mention the frustrations that come with trying to wrangle all of these tools into some semblance of order. Pile on some peer shame and unreasonable expectations of our own performance and it might be time to hide the razor blades. Take heart, however. Cue up some Billy Joel and when you can take no more of that (my max time is 49 seconds), switch over to my lightning talk on Technical Intimidation I gave at RailsConf 2013. Maybe some cheesy jokes and a dense helping of quotes from smart people will help put that spring in your typing once again.

I reference some TED talks by Brené Brown at the end of it - here they are - go watch them now:

Listening to Shame
The Power of Vulnerability

Here's the Ashe Dryden talk mentioned at the end of the RailsConf version:

Must Have 10+ Years People Experience

Greg Bauges also has some excellent content on Devs and Depression.


Many of the quotes from the talk I culled from my BlogKi here:


Jess Eldredge sketchnoted my talk! Check out all her RailsConf sketches.

Here's a prior version I gave at BigRubyConf 2013.

Trivia: Mythbuster Adam Savage is the nerdy kid drowning in that Billy Joel video.
Ken Levine (a writer who's worked on MASH, Cheers, Frasier and many other shows) discusses the intractable problem of fixing a script that just ain't funny, retelling an encouraging story about how early on The Odd Couple was failing to get laughs in its third act, and how a critic-inspired idea fixed it. Ken wraps up with a nice ShameAntidote:
When geniuses like Neil Simon and Mike Nichols can't put their fingers on a problem, what hope is there for the rest of us?

So when you get stuck just know, there is no Dr. House for writing. At times we’re all Frank Burns.

Are exceptions a good or bad thing in a language? Joel Spolsky, Anders Hejlsberg and others weigh in.

Joel doesn't like exceptions.
They create too many possible exit points for a function. To write correct code, you really have to think about every possible code path through your function. Every time you call a function that can raise an exception and don't catch it on the spot, you create opportunities for surprise bugs caused by functions that terminated abruptly, leaving data in an inconsistent state, or other code paths that you didn't think about.

A better alternative is to have your functions return error values when things go wrong, and to deal with these explicitly, no matter how verbose it might be.

Anders disagrees:
It is funny how people think that the important thing about exceptions is handling them. In a well-written application there's a ratio of ten to one, in my opinion, of try finally to try catch. In the finally, you protect yourself against the exceptions, but you don't actually handle them. ... because in a lot of cases, people don't care. They're not going to handle any of these exceptions. There's a bottom level exception handler around their message loop. That handler is just going to bring up a dialog that says what went wrong and continue. The programmers protect their code by writing try finally's everywhere, so they'll back out correctly if an exception occurs, but they're not actually interested in handling the exceptions. (quotes re-arranged for my emphasis)

Raymond Chen appears to weigh in against exceptions in Cleaner, more elegant, and wrong, but clarifies a bit with Cleaner, more elegant and harder to recognize:
The title of the [prior] article was a reference to a specific code snippet that I copied from a book, where the book's author claimed that the code he presented was “cleaner and more elegant”. I was pointing out that the code fragment was not only cleaner and more elegant, it was also wrong.

You can write correct exception-based programming.

Mind you, it's hard.

It's easy to write bad code, regardless of the error model.

It's hard to write good error-code-based code since you have to check every error code and think about what you should do when an error occurs.

It's really hard to write good exception-based code since you have to check every single line of code (indeed, every sub-expression) and think about what exceptions it might raise and how your code will react to it. (In C++ it's not quite so bad because C++ exceptions are raised only at specific points during execution. In C#, exceptions can be raised at any time.)

In practice, I've never really worried about it and simply fallen in line with how Anders describes the world and it seems to work out fine, but that's not to say I know what I'm doing.

Martin Fowler on metrics:
Metrics have a purpose and a place in organizations and teams. They cannot be used as a substitute for thinking. Nor can organizations think management by numbers is enough for effective software delivery. Organizations must be vigilant against the undesirable behaviors that emerge due to the inappropriate use of metrics.

Use the following guidelines to lead you to a more appropriate use of metrics:

1. Explicitly link metrics to goals
2. Favor tracking trends over absolute numbers
3. Use shorter tracking periods
4. Change metrics when they stop driving change
Rails 4 Turbolinks will mess with any Javascript hooking into the document/window ready event. This isn't news to those paying attention, but I wasn't until I ran across it while overhauling my site and my wiki (ClWiki) that runs it. There's an easy solution, however. Turbolinks provides some custom events that you can hook your ready code into. In my case, I had some Javascript to control element focus while searching the wiki and merely had to add one line:

$(document).on('page:change', findFocus);