惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Spread Privacy
Spread Privacy
V
Visual Studio Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recorded Future
Recorded Future
云风的 BLOG
云风的 BLOG
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
Apple Machine Learning Research
Apple Machine Learning Research
MyScale Blog
MyScale Blog
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
Recent Announcements
Recent Announcements
V
V2EX
The GitHub Blog
The GitHub Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
V
Vulnerabilities – Threatpost
C
Check Point Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
AI
AI
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
量子位
Attack and Defense Labs
Attack and Defense Labs
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Privacy International News Feed
Google DeepMind News
Google DeepMind News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
CERT Recently Published Vulnerability Notes
腾讯CDC
Latest news
Latest news
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
G
GRAHAM CLULEY
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
美团技术团队
The Cloudflare Blog
T
Tenable Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
J
Java Code Geeks
SecWiki News
SecWiki News
Webroot Blog
Webroot Blog
N
News | PayPal Newsroom
博客园 - 叶小钗
博客园 - Franky

Chip Cullen

The need for importance, and AI: Chip Cullen An updated Colorosetta: Chip Cullen The Return of the Font Combinator!: Chip Cullen Changing the number of an item in an ordered list: Chip Cullen My pizza dough recipe as of May 2025: Chip Cullen Gonna try to be a bit more personal: Chip Cullen How I built dynamic social media images in Eleventy using Cloudinary: Chip Cullen My current approach to AI : Chip Cullen Lessons Learned Surviving a Major Product Launch: Chip Cullen How to Build a Drop Down Menu with Modern CSS: Chip Cullen How to stop page scrolling when you have an open dialog element: Chip Cullen Distraction Driven Development: Chip Cullen How I learned to code: the art of letting go: Chip Cullen In praise of the switch statement: Chip Cullen Project stuck? Think about how you’re breaking it down & question everything: Chip Cullen So how did the onboarding experiment go?: Chip Cullen Ideas for an Onboarding Checklist: Chip Cullen I really like Post Mortems: Chip Cullen Raise Red Flags Early: Chip Cullen How to mock fetch requests in React Testing Librarty tests: Chip Cullen Running a Structured Meeting: Chip Cullen Adding the View Transitions API to my personal site: Chip Cullen A Lightweight Way to Read GraphQL Data: Chip Cullen How to make a color changing favicon: Chip Cullen Using a Pros/Cons list to help navigate technical discussions: Chip Cullen How to use variable fonts from Google Fonts: Chip Cullen A new website: now on Eleventy!: Chip Cullen How to Truncate Type at More Than One Line with Just CSS: Chip Cullen Colorosetta: the VS Code Extension!: Chip Cullen Using CSS Custom Properties and Logical Properties Together: Chip Cullen Browser Dev Tools: Element Inspector Popover: Chip Cullen The Link with rel=preload is a Seperate Thing: Chip Cullen How to have Dark & Light Mode Images that also works with User Choice: Chip Cullen Don’t use Viewport Units for Font Size on their own: Chip Cullen A little known Media Query: Aspect Ratio: Chip Cullen Meta thinking: Managing Decisions: Chip Cullen Give Your To-Do's Context: Chip Cullen Say What the Impact is when Reporting Issues: Chip Cullen How to Deal With Large Pieces of Technical Debt: Chip Cullen Make Your Request Clear: Chip Cullen Analytics events, HTML classes, and protecting against refactoring: Chip Cullen How We Removed jQuery from a large app: Chip Cullen New tool: ColoRosetta: Chip Cullen What width and height attributes should you use with responsive images?: Chip Cullen Django 3.1 gotcha: Referrer Policy has a new default, and it might break iframes and links: Chip Cullen A Javascript Component Pattern: Chip Cullen CSS min(), max() and clamp() Functions: Chip Cullen Pointer Events and Inline Elements in Chrome: Chip Cullen Resolving a github repo and a new Create React App: Chip Cullen How to POST *Data* with the Fetch API: Chip Cullen The Contrast Triangle: Chip Cullen Advice on interviewing for Junior Developers: Chip Cullen Life Lessons Learned From Running a Marathon: How to do something really hard: Chip Cullen A (Brief) intro to Search Engine Structured Data: Chip Cullen Javascript Fallback Values on Variables and Booleans - a hard lesson: Chip Cullen Alfred Tip: Quickly Access Common URLs: Chip Cullen Responsive Images in Hugo - by Laura Kalbag: Chip Cullen Making a Gatsby Site with Multiple Content Types: Chip Cullen How to Create and Use Fixtures in Cypress Tests: Chip Cullen Fixing the 'Bad Interpreter' Error from AWS and Python 3.7: Chip Cullen Creating a Canonical Tag in a Django Template: Chip Cullen Responsive spacing with viewport and ch units: Chip Cullen Welcome to my New Design - 2019: Chip Cullen Django Templates: Block and If statements don’t work like you might expect: Chip Cullen Books I Read in 2018: Chip Cullen Lifehack: 4 ways to help tame common email noise: Chip Cullen How to make better Pull Requests: Adding Steps to Test: Chip Cullen The unsung develpment tool: Spreadsheets: Chip Cullen Troubleshooting Adding and Removing EventListeners: with Arguments, Debounced, and in a React Class: Chip Cullen How to Fake the Window Object in Jest and Enzyme: Chip Cullen Migrating From Wordpress to Hugo: Chip Cullen Background Repeat and its Possibilities: Chip Cullen Getting Started With Front End Tests: a Mindset: Chip Cullen Migrating a Blog - An Opportunity for a Content Inventory: Chip Cullen Moving to Hugo: Chip Cullen JavaScript events: .target vs .currentTarget: Chip Cullen Things I wish I knew when starting with Python: Chip Cullen Leading Ampersands for modifiers in Sass: An anti-pattern: Chip Cullen How to get rid of the "You have mail" message in your terminal: Chip Cullen Why three typefaces rule the web, and what you can do about it: Chip Cullen You shouldn't worry about Section 508 - it's Section 504: Chip Cullen Looping Video Backgrounds: pointers and pitfalls: Chip Cullen How to “preview” a click event tag in the Google Tag Manager console: Chip Cullen Moving on from a technology, or: life after Drupal: Chip Cullen Don’t be a dumb developer: Chip Cullen Two level breadcrumbs with CSS :only-child: Chip Cullen Simplicity comes with experience: Chip Cullen Do the least amount possible: Chip Cullen SVGs vs. Icon Fonts: Two points in favor of Icon Fonts: Chip Cullen Accessible links without underlines: Chip Cullen The Strategic Job Hunt: Chip Cullen Surviving Getting Laid Off: Chip Cullen How to structure your typography in Sass: Chip Cullen Layer Cake: A Responsive Design Layout Pattern: Chip Cullen Creativity is yet to come in Web Design: Chip Cullen Front End Testing with Wraith: A Step by Step Recipe: Chip Cullen Where to begin? How I start a visual design for the web: Chip Cullen If you could only have five Google Fonts: Chip Cullen Why SVG is so cool (or: what happens when you're late to the party on something): Chip Cullen How to apply classes to elements with CKEditor 4, in Drupal 7: Chip Cullen
Firefighting 101: How to Manage Breakages: Chip Cullen
2021-10-05 · via Chip Cullen

Today was the day Facebook went down for six hours. While I haven't dealt with breakages at that scale, I have been through a few 'fires' in my time.

Having seen them through to the other side, I thought I'd share a playbook for tech managers on dealing with significant outages.

The Playbook

  1. Breathe
  2. Triage
  3. Notify (the first time)
  4. Assess
  5. Notify (again)
  6. Address, Test & Deploy
  7. Verify
  8. Notify (a third time)
  9. Reflect

1. Breathe

When you become aware of an outage/significant breakage (write down how you found out, btw), the first thing to do is - take a breath. Your team needs you to be calm and rational. If you are, they are more likely to be. And calm is the state of mind you need to be to fix the problem and not make it worse.

Remember, with few exceptions, what you're probably working on is not a life or death matter. As a coworker told me once when something broke "hey, it's not like we're curing cancer". Keep some perspective.

(This goes doubly true for executives.)

2. Triage

This is the rough first stage of trying to sort out what's what. Bad outages rarely come alone - it's usually some combination of factors. Based on your knowledge of systems, or those who you rely on, start making a list of affected pieces and who is responsible for them.

3. Notify (the first time)

As a manager, your most important task in these situations is communication - much more so than the actual fixing of the broken thing. I would say plan on 60-80% of your time being spent communicating about the problem.

The first significant piece of communication that you need to send out is right after triage. That is, when you know there is a problem.

Send an email, post in a slack room. Whatever your organizations usual procedure is - follow it. You don't even have to have the problem terribly well defined - it can be vague at this point. Just make sure several levels above you are made aware.

It is critical that your higher ups know almost as soon as you do if there is a problem.

You do not want to hide a problem, if there is one. That's a one way ticket to looking for a new job.

Most (reasonable) leaders can deal with the fact that things break. Stuff breaks in tech all the time. What they cannot deal with is being caught unawares.

Helpful things to include:

  • The service/application that have been observed to be broken
  • The time of the earliest notification of the issue
  • The fact that your team is looking into it, and pausing work on other issues

4. Assess

This is probably one of the more frustrating phases of dealing with a fire. It can take two minutes, or it can take two weeks. And you really can't know ahead of time what it will be.

The first point of your assessment should be - what is the impact of the breakage? How many users are affected (or, in what situation are they affected)? Is it all users or only some? Is there some core experience that is broken, or is your application down altogether?

This is now the time when you break down the issue at a detailed level. Try to nail down steps to reproduce. Look at code. Review git history.

The most fundamental question is: what has changed that would cause functioning software to break in this way?

In order of ease of identification/remediation:

Thing to check Possible Resolution
Was configuration changed that would be responsible? Revert the configuration and see if the problem is resolved
Was there a recent code push that seems related to the outage? If possible, roll back. If rolling back isn't possible, you're going to have to "roll forward".
Was there an interruption to an API that your application relies on? Report the impact of the outage to those responsible for the API
Are there operational level interruptions? That is, is there a problem with how the application is being hosted? Report the impact of the outage to those responsible for infrastructure
(And this is by far the hardest to pin down) Is there an interruption to an external dependency? See if it's a known issue, if there is a way to revert, or any other work around. Possibly replace the dependency altogether.

These may seem obvious or intuitive, but I present them here for someone who might not think of these in the stress of the moment.

For vague problems that are of a more chronic nature (as opposed to a sudden breakage) this is also the point that you want to define: what does fixed look like? Is there a metric that you're hoping to hit? Know what that is, because if you don't you could spend weeks and weeks dealing with this issue.

5. Notify (again)

Now that you have a firm handle on the problem, and what might be a fix, you now need to communicate this up the chain again. The first communication was basically "hey there's a problem"; this second communication is "we think we know the source of the problem and this is what we're going to do to fix it".

This is important in several ways - first, it shows that you're actively working the issue. Second, it lets others know that a further change is coming (that hopefully turns out to be a fix).

Helpful things to include:

  • The service/application affected
  • What the cause seems to be
  • What the fix will involve
  • An estimate of when the fix will happen

6. Address, Test & Deploy

This is where your team actually fixes the thing. If you're doing your job as a manager, they have a free hand to work on this fix, and are kept out of needless meetings or status updates. (Those are your job)

I put "Address, Test & Deploy" because this is a nebulous point. Depending on your project, and the source of the breakage, the fix can vary wildly.

Testing may be pulling code down and trying it out locally. It could be looking at the change in a QA environment. It could be simply monitoring production.

Deploying a fix could mean changing a configuration somewhere.

It's hard to say.

7. Verify

This is a crucial step - verify that your fix actually resolves the issue. Go back to how you found out about the issue and see if it seems resolved from that perspective. That means if someone emailed you to let you know that your service is down, go back to that person and check if it's restored for them. If you found out because you had errors in your logs, see if the errors are lessening.

Don't just deploy and walk away.

If you defined "fixed" in a formal way, make sure you're meeting that criteria.

8. Notify (a third time)

I told you there was a lot of communication involved. Now comes a fun communication - letting people know that the problem has been fixed.

Helpful things to include:

  • The service/application affected
  • When the fix went live
  • How long the breakage was
  • How many users were affected (if known or guessed at)
  • Thank the team members involved, including those in other teams

9. Reflect

Within a few days of the incident, hold a meeting to reflect on the breakage. Invite all those involved - not just engineers, but product owners, support staff, and yes, executives.

We practice blameless postmortems when it comes to incidents. And to be honest - at this point I'm excited for them. I love these conversations. The point is to try to improve systems so that incidents like this don't happen in the future. Human error is never the cause. The cause is always - how did the system let the humans down?