For Digital Marketers, no matter what niche your clients are in, they probably not the only player. Most likely, the market has already been occupied with a handful of big sharks already.

So before turning on any campaign, it’s critical to analyze competitor’s marketing strategies and understand what kind of offers customers are already exposed to.

In this article, I will show you how to hack your competitor’s online marketing funnel.

Marketing Funnel Example. Img from Sprout Social

Organic Traffic

Among the various forms of funnels in the market, the organic content funnel usually is the first touchpoint.

The best way to understand it is to opt-in.

Most of…


The React team recently introduced a major new feature “React Server Component”. It opens a new world for front-end engineers to build a performant app while writing less code.

Img from reactjs.org

What the Problems?

Nowadays, numerous react apps provide rich experiences. But, these client-rendered apps still need to fetch & parse data from the server.

The data downloading roundtrip creates the performance bottleneck for apps and requires engineers to write more code.

For the static web page, which has no interaction, it’s a waste of resources to download JS source files and data from React component framework.

What if we have a React component supporting…


For any engineer working at a big corporate, building new features is only a part of the job. Another main part is making contributions to “Engineering Excellence(EE)”. EE also called “Better Engineering”, contains

All the efforts that improve the quality & efficiency of the product.

This responsibility is even higher priority if engineers work at an Infra team. In this note, I will share my experience of how we recognize the impact of “Engineering Excellence” in my daily operations.

Img from CodeGrip

Test Coverage

Writing more tests is an obvious way to ensure the quality of code. …


Career progression is an evergreen topic for software engineers because it directly impacts income. In this note, I am going to share my personal perspective on the differences between Junior(E3–4), Senior(E5), and Staff(E6) engineers.

Junior Engineer

At this level, engineers focused mostly on demonstrating the coding capability and getting familiar with engineering practices.

On the technical side, this level’s engineer should be able to:

  • Understand codebase and drive assigned request to improve it, such as migrating it to modern frameworks and adding missing tests
  • Design well-organized code
  • Independently complete medium to large features

On the “People Skill” side, there are not many…


After being promoted to a staff engineer or an equivalent level, most of the engineers will face a challenge: continue to grow as a senior engineer(TL) or transition to be an engineering manager(EM). In this article, I am going to share my observations at FaceBook.

Disclaimer: I am not holding any engineering manager position at FB. But, I have a couple of mentors who are managers now. And one mentor even transitions back to a TL, after working as a manager for a year.

Img from bwcumc

Different Skill Sets

“There’s only 10% skill overlap between a manager and an engineer”.

An EM’s job is equivalent…


At Facebook, engineers are encouraged to take the initiative of writing project proposals. It’s one of the demonstrations that engineers have a strong voice during the roadmapping process.

The approaches to writing a good proposal varies.

In this article, to demonstrate how I propose a new project, I will share a template that we typically follow.

Img from betterproposals.io

What’s the Problem?

This is the title of the 1st section. No matter we are working on a new user feature, API migration, or infra optimization, we always start with the Problem: “what’s wrong with our product/service”?

Specifically, to finish a certain task:

  1. What is the ideal…


No code change can be merged into the trunk without peer’s review & approval. This process is strictly enforced at Facebook from day-1.

Over the past 6 years, I review around 5–10 “Pull Requests”(we call “Diff” at Facebook) every day. As a tech lead, I summarized some tips which help me accomplish this effectively.

Img from bounteous.com

Request Changes Aggressively

Comment without rejection or approval often confuses the diff author. Reviewers need to be decisive, in most cases:

“Don’t comment, Reject”.

We should bias towards action to unblock your colleagues. …


Bugs are inevitable. Debugging bad errors is a huge waste of time. Better error messages make engineers moving faster. To get better errors, we need to fail harder.

The following rules are the best practice I summarized, ranking in the order of implementation difficult

1. Fail loudly

Silent failure is terrible.

Product code should fail loudly in the UI, not console or logging. Infra code should fail loudly into its logs, not return NULL.

If we’re writing a library or service, the default should be to throw/spew and the user should have to go well out of his or her way to silence…


The “React + Relay + GraphQL” combo is the most advanced and handiest frameworks suite to build any browser app now. Among these 3, Relay is relativley harder to learn, due to it’s evolving API: Container → Hooks.

In this note, based on my 1st hand experience at Facebook, I am going to share why the new RelayHooks is better than RelayContainers.

Definitions

RelayContainer is a React Component which is usually the root of a Relay component tree, like QueryRenderer, FragmentContainer, PaginationContainer, etc.

QueryRenderer handles fetching your query and uses the render prop to render the resulting data.

FragmentContainer won’t directly…


Software engineers are producing similar code pieces every day. When we plan to update these repetitive logics, an average engineer may extract the common logics into an interface. But, an exceptional engineer will take an extra step: replace existing usages and prevent new code written in this way.

To achieve this prevention, tools like CodeMod and Linter come into play. In this article, I will share with you the essential steps of building an ES-Linter rule.

Img from intercom

What’s Linter?

“To lint” is to do static analysis on code to find style issues, potential bugs, etc.

A linter is a program that does the…

Bobi Pu

TechLead @FaceBook | linkedin.com/in/bobi

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store