Jargon mismatch

From Boz’s Mission, Strategy, and Tactics:

Interestingly, this post is an example of something even more paramount than having a mission: providing a common language for the team to use that everyone understands. Ensuring people use terms consistently isn’t just pedantry, it is potentially critical to scaling execution.

I couldn’t agree more emphatically. One of the most interesting lessons in my career has been to watch at a startup as various groups of people used the same words to mean different things, and used different words to refer to the same thing. I watched as the miscommunication was simply overlooked and bad things happened as a result.

I can’t figure out why people disagree with the importance of this antipattern. At a startup the most precious resource is time. The reason we impose processes on teams as they grow is to ensure communication is fast & clear. When this happens, precious time is wasted. Often at great cost.

I think we need a word for this anti-pattern. Jargon mismatch is the first one that comes to mind. By way of example, let us take the movement in many software engineering circles to adopt the functional approach of using immutable data in our applications. Don’t change the data, amend it in the most universal of data structures, the log (or some persistent data store). Reading hacker news etc you’d think this is a relatively modern approach — and it is, for software engineering.

But accounting has known about this for centuries. For millennia. The Romans used transaction logs and an always-amend style in their ledgers. The basic premise of accounting is that things should always sum to the same thing. The same inputs should always produce the same outputs. It’s identical to using immutable data in functional programming.

Another example: I often heard the folks at Bloc use the phrase “rework the model”. As our company grew, the sophistication and depth of our operating model grew: we had forecasts, waterfalls, and kept track of our finance in multiple dimensions (bookings, cash, GAAP cash, etc). In order to support these new and different ways of tracking the business, the undergirding of the spreadsheets needed to be updated.

It’s refactoring. Do business partners justify spending their time on this effort (as engineering teams often do with refactoring)? Of course not. They don’t refer to it as tech debt, they just get it done in service of the objective. And there’s no risk that they get carried away refactoring their models. (Well, at least the folks I’ve worked with.)

There are lots of other examples. Take acronyms — it’s one of the most infectious patterns at growing companies, and I think the reason it’s effective is because it provides this common language (with the trade-off of making the language incomprehensible to outsiders).

I’d love to hear about your jargon mismatches.

So far this jargon mismatch has been one of the most illuminating discoveries of my career.  We have so much to learn from each other — so few of our problems are new. It’s a near certainty that someone else has solved the problem you’re working on.  It’s a matter of moving our egos aside and finding the answer. If we can’t find one, it’s likely we’re looking in the wrong place.

Stripe Elements and Turbolinks 5

I was having a hell of a time getting Stripe Elements to work with Turbolinks 5, specifically the Turbolinks iOS wrapper. Hopefully others who see the same issues can benefit from what I learned.

The symptoms were:

  • Stripe Elements worked in the desktop browser, in mobile safari, but not in the Turbolinks-enabled iOS app

What I learned:

  • For Turbolinks-enabled iOS apps, all forms must be sent via AJAX w/ remote: true (or the absence of local: true depending on your version of Rails)
  • When using rails-ujs, you must intercept the ajax:before event and call event.preventDefault until the Stripe JS library has had a chance to retrieve the token
  • Once the token has been retrieved and added to the form, you must call Rails.fire(form, 'submit')
  • In your interception of ajax:before this time, you must not call event.preventDefault() since you now have the token

For reference, here’s my javascript:

At least I learned a lot about how rails-ujs, turbolinks, and Stripe Elements work under the hood!

Gridlock

While reading Bureaucracy As Active Ingredient it struck me that there is a parallel here with the design of our federal government.

The article essentially explains that the cost of working through a bureaucracy is part of the design of a system that requires a high cost. Makes sense. A different kind of cost perhaps better suited to healthcare than simply charging more money.

I remember in my high school government class being taught that our federal government was designed to “check the best and worst impulses of man”. I’ve searched for this quote and while I seem to remember it coming from Thomas Jefferson, I can’t find any sources to back that up.

Nonetheless, I think this explains a lot about our current politics. What we have is essentially gridlock. And while that frustrates many people, I think it’s very important to remember that this is not a flaw. This is a design choice.

The framers saw the downside to a federal government with lots of power that was able to move quickly. And they wanted to make sure that anything really worth accomplishing passed the same sort of bar that Slate Star Codex describes in healthcare today.

And, remember, even if the majority of the population wants something accomplished, that shouldn’t actually be enough to simply allow the government to proceed. They’ve also got to watch out for the minority opinion, to keep their voices from being snuffed out.

(Coincidentally, I also think you can look at the electoral college through the same lens. The frequent calls for its abolition seem similarly misguided to me — it’s by design that the President isn’t elected by a direct vote.)

This is one of the reasons that I (personally) don’t really expect the government to accomplish anything for me. Expecting it to move fast and get things accomplished goes completely against the design of the system and the intent of the framers.

However, if enough people really believe that something ought to be done, then it’s possible for them to band together, strategize, and get it done. And if they are successful in working through the gridlock, then the results of their accomplishment will endure. For decades if not centuries.

If you haven’t seen the movie Lincoln, I can’t recommend it enough. Aside from being entertaining and dramatic, it’s also a terrific reminder of how difficult it was to get anything of meaning accomplished in the federal government, such as abolishing slavery! One of the reasons I love the movie so much is because the important characters never once complain about the government or about politics while working incredibly hard to get something of immense meaning accomplished.

They still believed in the system even though much of the country (in their eyes) was so very wrong about their attitudes.

For my money I can’t think of a better clip to share than this: