Thursday, December 23, 2021



When Facebook (FB) neared it's IPO in 2012, it's leadership was concerned about one issue. The issue was with frontend data consistency and it was considered as a serious one. One example that persisted for years was the notifications icon at upper right said you had 4 notifications and when one clicked it, it turned out to be only 1 notification. This issue was amplified when the new Frontend being designed for FB ads product showed similar effects.

Since advertisers are the people who actually paid FB, this bug had potential repercussions on the IPO. With the small, transactional writes happening to data model constantly (think of it this way- there is a post created by user, reactions to it, then comments to the post, replies to comments, reactions to the same and so on), Jordan Walke- the seasoned engineer working on the problem, realized that he was encountering an engineering problem that nobody else in the industry had faced. Ok, other players would have faced but they hadn't been existentially threatened by.

Jordan worked hard to build a library called then as FaxJS. It not only helped Jordan solve the data model for advertising frontend, but it's usage picked up widely in company and then in the industry. FaxJS was the prototype for what eventually became ReactJS.
(Story adapted from the book: "Move Fast: How Facebook Builds Software")

Jordan could have used the existing Frontend technologies and drove incremental improvements (an example of First Order Thinking) but he chose to take a step back, evaluated the problem from a distance, and decided that an entirely new system for managing frontend components was needed. In order words, Jordan used Second Order Thinking approach to solving the problem he was faced.

First level thinking focuses on solving an immediate problem, with little or no consideration of the potential consequences. First level thinking is simplistic and superficial, and just about everyone can do it.
Second Order Thinking is deep, it moves beyond the immediate problem & considers the multiple layers of consequences of a given decision. A few steps to develop Second Order Thinking includes:
1. Question Everything
2. Think Long Term
3. Examine Options Carefully from Different Perspectives

To learn more, read here:
And catch the summary in my sketchnote.

How do you envision leveraging Second Order Thinking in your day to day work ?

My LinkedIn Post:

No comments: