Move Fast and Break Nothing
zachholman.com
zachholman.com
Exactly, it's unwritten because no dev shop would explicitly market themselves as being willing to break things in the name of speed. It's an unfortunate side effect that they don't want to call attention to, whereas Facebook wears it as a badge of honor.
How often do you hear of Facebook going down or breaking completely?
Eventually, users just left twitter and they shut down the site a year later.
This works of course better with exerimental APIs compared to things you have to put on CD and ship.
By contrast, "Pay My Rent and Empty the Account" actually tells you something about the direction I'm going in, and what I prioritize when picking my actions.
If the solution for correctness is 100% automated test coverage, then your forward progress will have significant drag (every new feature should break many tests).
Not breaking things can be time expensive if you do it late, but it doesn't have to if you do it early. If making sure you don't break something is time expensive then you're probably not building on a solid foundation and solid processes.
Be foundation first. Incurring the time expensive to build a foundation (process, infrastructure, software) that will allow you to move fast with stability IS controversial; because it's not the "hack" approach.
Controversial or not, mottos become cliche, doublethink lip service unless they don't become those things.
All the business school bullshit: missions statements, code of ethics, motto, synergies, teamwork, a culture of innovation, etc etc. All that stuff is actually real, it exists and it can be very helpful. It's also uncontroversial that it sounds like bullshit because the people saying it most often and loudest are bullshitters. It's like listening to a priest who read 'Become a Spiritual Guru in 30 Days or Less' and went at it.
That he took the deck and turned it into vibrant and unique feeling content made it feel more special than a normal blog post.
Not sure where I'm going with this but I liked the balance of medium.com-like-focus + the design and style content of a NYT special feature.
I'm assessing my reaction from a web analysts perspective, just interesting how much more engaged I was w/this from the first second than normal.
Move fast, and don't go in predictable directions based on existing corporate momentum. The only way to disrupt yourself is to 'break things' i.e. architectures, regular income, etc that may be holding you back from a better opportunity.
Move fast! Run to all meetings! Take typing lessons so you move faster while coding! Break things! Break your laptop to get a faster one from the company! Move your laptop fast at the hard surface to break it faster and while moving faster!
Some may say, if you keep running around with your laptop, you might actually break it. I call that synergy.
> I can take a pretty obvious guess as of the external manifestations of their new motto: it means they break fewer APIs on their platform.
I found this absurd. The idea that "move fast and break things" referred to a reduced level of API compatibility seems much too narrow. Yes, it's understood as a license to break parts of the site in the interest of advancing the product.
Facebook did much more than that: it broke/disrupted/redefined our social fabric, the way we understand each other. Along the way it broke promises, expectations, trust, fears, introversion, and boundaries. And it did this very, very quickly--ten years of Facebook and we are all different.
Imagine if the Manhattan Project used the same slogan. It's good for some, bad for others, but developed quickly, taken to market, and damn the consequences we're going to figure out what this thing can do.
[0]: https://github.com/Huddle/PhantomCSS [1]: https://www.youtube.com/watch?v=VkTCL6Nqm6Y
My new boss just gave a piece of advice that marries up very well with this - clients want Stability, Performance and Features - in that order. Consumers want features Then Stability and performance if they like it.
So yes - hurry up and put the talk online please Zach - Itching to listen.
Also, I don't think consumers want features in the sense of "more", but in the sense of "key". Maybe it is Key Features, Stability, Performance, More Features, in that order.
Spotted one tiny error:
http://zachholman.com/images/talks/break-nothing/anpp.jpg
annp should be anpp in this image.
I liked the "empathy" bit though. Recently I've did the UCLA Extension TMP courses, and one of the lecturers - Jorge Cherbosque, PhD talked exactly about this and much more - here is the lecture (highly recommended)
https://www.uclaextension.edu/tmp/Pages/79th/D1.aspx
Is there a video behind the talk?
Of course, during new feature dev this luxury isn't always available. The next best thing is to do a phased rollout where our users become our beta testers. This works really well because users can switch to the non-beta version through the menu bar very easily.
There are other strategies for moving fast without breaking stuff, but these two provide easy, big wins.
I'd be really interested to hear how teams codify this. To the extent that it's possible, I think feedback should be rooted in objective measures, e.g. styleguide/lint violations, test failures, etc. All too often, though, there are subjective things that come up: organization of code, interface design, using framework X instead of framework Y. These are the criticisms that most often lead to aggressive back and forths.
That said, they’re also the sort of discussions which should often happen before code is written. Decisions can be changed much more quickly at that point, and people take it much less personally when you talk about how the design of something can be improved when they haven’t spent the time to implement it. :-)
I assume if I knew more about fluid dynamics one could make some decent correlations between blockages, eddies, and viscosity and middle management sign offs, manual testing and IM channels.
I guess I am looking for justification that a flat collegiate structure produces higher quality long term code.And some idea how to persuade people to adopt such a format - open, free flowing discussion about code and a data driven "prove it not say it with authority" seems to conflict with hierarchies.
Or maybe I am just fed up with organisational politics. :-)
If a githuber is on could they comment on how design decisions and business decisions are taken ?
That's why small companies have a chance.
The big ones get slow and focus on different things. They have to change their maxims and their customers don't necessarily like that.
It was also done in mainframes at the processor instruction level.
To me it speaks to the fact that you shouldnt be afraid to completely change something if its to improve the product. Eliminate technical debt. Dont code around a workaround that doesnt always work.
http://blog.mist.io/post/82383668190/move-fast-and-dont-brea...
"...I think the best way to get things done in a company isn't to bash it over your employee's heads every few hours, but to instead build an environment that helps foster those effects."
However, you do want to avoid "CI handcuffs", where either because CI is too brittle or because you're simply integrating too many independent projects which, in order to push a change requiring coordinating changes elsewhere, requires massively outsized developer effort in order to push things through with zero CI breakage. This is more of a problem in CI systems with binary metrics like PASS/FAIL where every change that doesn't PASS is rejected.
It's too easy to "wedge" a system like this, where project X's change can't go through without project Y being able to handle the change, and you end up introducing multiple code paths in both projects on a solely temporary basis just in order to keep CI green and happy. Rather than having a zero-tolerance CI failure policy, developers should be allowed to break CI temporarily, so long as they fix it in a timely manner (within an hour or two). Per-developer breakage metrics, to the extent they are needed, should not be in terms of breakage counts but instead breakage durations.
That is, outside of production, it's fine to break stuff and quickly fix it, so long as you don't leave it broken. The big problems are where domain-siloed developers break a zero-tolerance policy because it was necessary to relax it "temporarily", and things stay broken because the policy stays relaxed and cannot be reinstated without sirens going off. Then restoring the CI policy is blocked for everyone by the one guy who knows the AIX quirks for debootstrap or whatever.
Instead, breaking changes should be "allowed" where there is a window to fix the error and still move forward. Only when the window closes without a fix should the breaking change be rolled back (automatically). This line of thinking lends itself to formal, automated policy, but this depends first on judgment and cultural approval.
As it happens, the best CI system I'm aware of for truly distributed, multiple project integration is OpenStack's Zuul: https://github.com/openstack-infra/zuul I'm not sure if it accommodates my prescription above, but if not, they probably have a better idea.
Team A should be able to develop without having to consult Team B constantly. That means you have to be mature about deprecating things before you just remove them, but I think that's what the whole article is about.
Of course even if you have atomic source control commits, you don't have atomic deployment so there's still migration to take care of, but it works fine for in-process API's.
This is precisely the problem that submodules solve, much maligned though they are. It's essentially a dependency problem, and we have good answers for those.
Edit: Also I am fairly certain that the kernal experiences these kinds of issues, and is the flagship user of Git.
Linus built a tool that suits his needs well but he's not working at the same scale.
Slide 35 [0] of this presentation actually starts the discussion of this exact thing, though Zach has talked about it before. Later, he shows a chart showing the differences as the code in the parallel branch changed over about five hours. (Wow, that's some fast iteration.)
0: https://speakerdeck.com/holman/move-fast-and-break-nothing?s...
Ok, I'm totally That Guy so I'm just going to shut up.
I think that if you know how to use it, Haskell's type system can reduce your bug count substantially. It makes a difference, spending 30% of your time debugging as opposed to 70%. (These numbers are approximate and vary depending on the problem you're working on.) You still need to test, though. That is true. QuickCheck does a lot for that.
edit 2: Now that I've read farther, it bothers me less. :-) If I were part of the live audience, I would likey not have noticed. Please don't let the text presentation distract you from the excellent message. :)
You did good by refusing to read the rest of the post and informing everyone of that fact on Hacker News. Cheers!
To author: thanks for the reference to Coda Hale's Metrics talk.