[HN Gopher] How to move fast and not break things as a remote co... ___________________________________________________________________ How to move fast and not break things as a remote company Author : irtefa Score : 79 points Date : 2022-12-02 14:55 UTC (8 hours ago) (HTM) web link (jam.dev) (TXT) w3m dump (jam.dev) | tinglymintyfrsh wrote: | We move fast and have guardrails such that breaking things | permanently is unlikely. All diffs require another engineer to | sign-off. There is no directly pushing to production without A | Very Very Good Reason(TM). CI/CD and canarying occurs | automatically. | revskill wrote: | OK, i could expect there's tons of hidden tech debts to be | discovered as the project goes big. | | Expect 1 year to migrate to new services. | | But that's another story, because "If it works in production, | don't touch it". | | Not breaking things is only half of story. | mattpallissard wrote: | > hours of planning can save weeks of engineering. | | This is so hard to get teams to do. I am almost always the | slowest to implement a change simply because I don't conflate | design and implementation. | | At first glance it looks like I get less done, but when you | account for the fact that nobody has to clean up after me or | shoehorn a work around for an edge case in I become one of the | most efficient. | | Assigning cost to subsequent follow up tasks is difficult as | well. Both technically in terms of aggregating/grouping as well | as interpersonally because people get defensive or discouraged | when you're consistently pointing out shoddy work. | thedg wrote: | > At first glance it looks like I get less done, but when you | account for the fact that nobody has to clean up after me or | shoehorn a work around for an edge case in I become one of the | most efficient. | | That's so awesome. | | The Jam dev team recently shipped a major refactor of all the | state handling in the app a few weeks ahead of schedule and | that's because the team spent so much time upfront documenting | and planning the changes. Thanks to Tony Stuck for showing us | how important doing upfront planning is on the Jam engineering | team! | hbrn wrote: | > The Jam dev team recently shipped a major refactor of all | the state handling in the app a few weeks ahead of schedule | | To me that doesn't sound like a thing to be proud of. | | 1. You approved a plan to have a refactor that lasts several | weeks. Even for big companies that's usually an anti-pattern. | It even contradicts your own advice of "make things better as | you go". | | 2. You tremendously overestimated the required effort (i.e. | absolutely failed at planning) | | 3. You got lucky this time and two wrongs made a right. | | Also, your example suffers from survivorship bias. Of course | everybody has examples where planning paid off. But there are | also plenty of examples where planning was a waste of time, | or where people were following outdated plan for the sake of | following the plan. "More planning" is a bad advice. A good | advice helps distinguish areas that benefit from "more | planning" from areas that will suffer from it. But that is | hard and nuanced. | wobbly_bush wrote: | > Having a daily check in on the project status helps us | recognize when we are drifting off track and need to make | decisions about whether to change the date or re-prioritize | what's in scope | | Does daily project status seem excessive? Development can be non- | linear, so I wonder what decisions are needed to made on a daily | basis. | shredprez wrote: | Daily check-ins don't demand linear progress, do they? I like | having frequent checkpoints for brief discussion and | visibility, even if they usually pass without a lot of action. | musk_micropenis wrote: | All great tips. I would add another bullet point along the lines | of, | | * Make your software observable. Your feature is not finished | until you've verified it is being used as expected. Ideally you | should have all of the data you need to know if things are going | well without having to wait for customers to email you with | complaints. Be careful not to develop a culture of developers | throwing code "over the fence", either to QA staff or a release | team - developers own their code from IDE to production. | | If you don't develop this culture of ownership you end up with | longer feedback loops between customer support, QA and dev. | ChrisMarshallNY wrote: | _> developers own their code from IDE to production._ | | That was an important implied Principle of Steve McConnell's | famous Software Quality At Top Speed article[0]. In fact, if | you read that article, a number of these things resonate. | | Not everything good is new. I just think that we forgot them, | along the way. | | For myself, I generally operate as a one-man shop, so I have | the following tips, that work for me: | | * Modular Design | | I write my stuff in discrete modules, if possible. Sometimes, | the modules are source code files, organized by functional | realms, other times, they are complete, soup-to-nuts, published | and supported SPM modules. The iOS app that I'm writing now, | has this current dependency manifest: * | KeychainSwift: 20.0.0 * LGV_Cleantime: 1.3.6 * | LGV_MeetingSDK: 2.3.0 * LGV_UICleantime: 1.1.4 | * RVS_AutofillTextField: 1.3.1 * RVS_BasicGCDTimer: | 1.5.2 * RVS_Checkbox: 1.2.2 * | RVS_GeneralObserver 1.1.1 * RVS_Generic_Swift_Toolbox: | 1.11.0 * RVS_MaskButton: 1.2.3 * | RVS_Persistent_Prefs: 1.3.2" * RVS_UIKit_Toolbox: 1.3.2 | * White Dragon SDK: 3.4.2 | | All of them, with the exception of the first one | (KeychainSwift), were written by me, and are released, | supported open-source Swift Packages. | | I also wrote a couple of backend servers, that the app | leverages. | | * Layered Design | | I write stuff in layers; especially server code. Each layer has | a loose coupling with the other layers, and also maintains a | fairly strict functional domain. This makes it _very_ easy (and | less bug prone) to pivot and fix. | | * Document As I Go | | I write my documentation into the code. I've learned to keep it | mostly to headerdoc-style documentation. I write about my | process here[1]. | | I also practice "Forensic Design Documentation"[2], and | "Evolutionary Design Specifications"[3]. These help me to move | quite quickly, yet maintain a well-structured, well-tested | project. | | * Test Harnesses over Unit Tests | | I find that test harnesses[4] allow me the greatest | flexibility, and fastest path to integration testing, which is | where I want to be. | | * Reduce "Concrete Galoshes"[5] | | This is pretty important, and many of the above practices go a | long way towards this goal. | | I know that the way I do things won't work for many folks; | especially teams of less-experienced developers. My experience, | coupled with an OCD nature, make it work for me. | | WFM. YMMV. | | [0] https://stevemcconnell.com/articles/software-quality-at- | top-... (It would be great, if he fixed the images in that | article, one day). | | [1] https://littlegreenviper.com/miscellany/leaving-a-legacy/ | | [2] https://littlegreenviper.com/miscellany/forensic-design- | docu... | | [3] https://littlegreenviper.com/miscellany/evolutionary- | design-... | | [4] https://littlegreenviper.com/miscellany/testing-harness- | vs-u... | | [5] https://littlegreenviper.com/miscellany/concrete-galoshes/ | O__________O wrote: | Any suggestions for engineering observability? | _jal wrote: | Part of our checklist for new features/services is | enumerating what needs to be monitored and how, what | instrumentation we should care about, etc. | | That may well change during development, but new work doesn't | get approved without at least a first stab at how we're going | to monitor it. | twh270 wrote: | The most important thing to do IMO is to make it part of your | acceptance criteria or definition of done for any | story/feature. My observation is that observability gets | ignored if it isn't baked into the culture. | | In terms of implementation, if it isn't on a dashboard or | doesn't fire off an alert, it doesn't exist. So put your | telemetry and logs on a dashboard, and set up alerts based on | your SLA's/SLO's. | | Also, make it easy for developers to understand, create and | edit dashboards/alerts. If it's hard to understand or hard to | do, it won't get done. | fatnoah wrote: | I'll add that incentives can really help as well. Observable | software is much more easily operated in production | environments, and lets tech ops teams diagnose and fix things | with much less involvement from Engineers, which will very | much appreciate a much lower escalation rate. | thedg wrote: | > If you don't develop this culture of ownership you end up | with longer feedback loops between customer support, QA and | dev. | | 100%, that's great | hbrn wrote: | None of these tips are specific to remote. None are insightful | either. Write comments, plan better, do things better. Seriously? | | Just another google spam blog post to drive traffic. | | Btw, if your team goal is "ship to production" (as per | screenshot), you're probably not moving fast enough. | AntiRemoteWork wrote: | drewcoo wrote: | The whole point of "move fast and break things" was making an | actual choice instead of trying to do everything badly. This puff | piece misses the point. | | It also doesn't tell us what "fast" is at Jam. We only know that | it's calendar-driven development with quality gates. | lucgray wrote: | Just FYI to the author that the embedded link to try out jam.dev | in the article doesn't take you to the jam homepage | thedg wrote: | Thank you! Updated! | pfarrell wrote: | Agree with everything in this blog except the premise | Move fast and break things | | was never about breaking production by being cavalier with your | code. It means to don't let inertia accrue, don't fail to | challenge assumptions, don't let fear of pushback prevent you | from exploring the best course of action. | | Way easier to achieve in a small organization. | | edit: Did a bit of digging and I may be wrong here. In an | interview in 2014 [0], when Facebook was changing their motto to | "move fast with stable infrastructure", Zuckerberg said | "As developers, moving quickly was so important, we would even | tolerate a few bugs to do it..." | | I've always interpreted like I originally wrote, but that's not | in sync with being ok shipping bugs. | | 0: https://www.cnet.com/tech/mobile/zuckerberg-move-fast-and- | br... | deltree7 wrote: | Exactly, the 'break things' part is there to take the fear out | of the developer to take more risks. It's complimenting the | culture of move fast. | | Too many orgs don't move fast because of the fear of breaking | things. | thedg wrote: | Interesting! Well you are right - those are great things to | break! | hbrn wrote: | 1. You will never be able to fix all bugs. There's plenty of | bugs in your software right that that you are simply not aware | of. | | 2. Bug fixing has diminishing returns and exponential costs. | | If you accept these two axioms, Zuck's quote makes perfect | sense. | | And certain bugs are simply not worth fixing because cost of | fixing it is higher than cost of having it. ___________________________________________________________________ (page generated 2022-12-02 23:00 UTC)