Skip to main content

Why Are There So Many Bad Strategies?

· 3 min read

There are mainly three reasons:

  1. Making choices is a painful process
    • When DEC made strategic choices, there were three factions: "Boxes," "Chips," and "Solution." The voting led to Condorcet’s paradox. The voting paradox: democratic voting can yield irrational results like A > B > C > A. CEO Ken Olsen sought consensus, but fundamentally, you cannot make a sub-organization automatically give up its own enthusiasm. So in the end, everyone chose a compromise solution: "DEC is committed to providing high-quality products and services and being a leader in data processing." This is just empty rhetoric.
    • When Eisenhower campaigned for president in 1952, he promised to withdraw the Soviet Union from Eastern Europe, but after winning the election and conducting extensive research, he made the difficult decision to abandon that promise.
    • Intel CEO Andy Grove shifted the company from producing dynamic random access memory (DRAM) to focusing on microprocessors.
  2. People prefer to use templates without thinking
    • Max Weber, the father of sociology, believed in distinguishing formal leaders from those who lead by personal charisma.
    • Peter Drucker, one of the foremost thinkers about management, said, "Effective leadership doesn’t depend on charisma. Dwight Eisenhower, George Marshall, and Harry Truman were singularly effective leaders, yet none possessed any more charisma than a dead mackerel.… Charisma does not by itself guarantee effectiveness as a leader."
    • The academic requirements for leadership generally are:
      1. Develops or has a vision
      2. Inspires people to sacrifice (change) for the good of the organization
      3. Empowers people to accomplish the vision
    • Leadership and strategy have commonalities, but they must not be confused. For example:
      • Leadership encourages self-sacrifice and personal transformation while feeling good about it.
      • Strategy is about articulating what kind of transformation is worth pursuing.
    • A similar confusion arises when having a strategy is mistaken for having a good strategy. Countless books and tutorials provide templates for people to fill in mindlessly, resulting in numerous bad strategies.
  3. New Thought: People often believe that human will can overcome all, thinking that attitude determines everything
    • Zhang Defen's "Law of Attraction," the New Thought movement, and the fantasy of "positive energy" regarding outcomes lead people to neglect the real efforts that contribute to results, serving as a form of spiritual opium. We should focus more on imagining the process of doing things, which is akin to simulation training.

Telemetry Product Management Framework

· One min read

A key role of product management (PM), whether as the product-focused founder (CEO, CTO) or the PM leader, is making sure product development efforts are ==focused==.

  • finite resources to market needs in the march towards product-market fit
  • working furiously to maintain a competitive lead

Is process a bad thing? My guiding principle or golden rule of process is to never ask for something from someone that does not directly help them to get their own work done.

Product Roadmap in Telemetry

telemetry

Telemetry Framework

When the tool overwhelms it isn’t used and so it doesn’t matter - e.g. a giant Gantt chart. The telemetry spreadsheet is more helpful.

telemetry framework

This tool is the right level of complexity for projects from 10 to 5000 people in my experience.

benefits: it is a resources allocation guideline

  • Any given person can look at their own work and know where they are and where it fits in
  • At any time, one can see how much of the time (resource) overall is going to support a given project or goal
  • Know which tasks are too far out, too big
  • Know which resources are over-constrained

Designing very large (JavaScript) applications

· 3 min read

Very Large JS App = a lot of developers + large codebase

How to deal with a lot of developers?

empathy

What is a ==senior engineer==? A team of senior engineers without junior engineers is a team of engineers

  1. being senior means is that I’d be able to solve almost every problem that somebody might throw at me.
  2. make the junior engineers eventually be senior engineers.

what’s the next step of a senior engineer?

  1. senior: “I know how I would solve the problem” and because I know how I would solve it I could also teach someone else to do it.
  2. next level: “I know how others would solve the problem “

good programming model

how people write software, e.g. react/redux, npm. Here comes a model that affects all large JS apps - code splitting.

  1. People have to think what to bundle and when to load
  2. ==route based code splitting==
  3. But, what if it is not enough?
    1. lazy loaded every single component of our website
    2. How does Google do? split them by rendering logic, and by application logic. ==simply server side render a page, and then whatever was actually rendered, triggers downloading the associated application bundles.== Google does not do isomorphic rendering - no double rendering

How to deal with a large codebase?

==Code Removability/Delete-ability==

e.g. CSS is bad in code removability

  1. one big css file. There is this selector in there. Who really knows whether that still matches anything in your app? So, you end up just keeping it there.
  2. People thus created CSS-in-JS

==avoid central configuration of your application at all cost==

  1. Bad example
    1. central routes configuration
    2. central webpack.config.js
  2. Good example
    1. decentralized package.json

avoid central import problem: router imports component A, B, and C

  1. to solve this problem, do ==“enhance” instead of “import”==
  2. However, developers still have to decide when to enhance and when to import. Since this might lead to very bad situations, we make “enhance” illegal, nobody gets to use it–with one exception: generated code.

avoid base bundle pile of trash

  1. e.g. base bundle should never contain UI code
  2. Solve this problem with forbidden dependency tests
  3. ==most straight forward way must be the right way; otherwise add a test that ensures the right way.==

Be careful with abstractions

We have to become good at finding the right abstractions: Empathy and experience -> Right abstractions

A Bad Strategy is Superficial

· 2 min read

A bad strategy is formalism, characterized by four fundamental traits

  1. Empty rhetoric ==obfuscation== ==fluff== Strategy should not be a mere accumulation of grandiose terms.

    • e.g. a major bank “Our fundamental strategy is one of customer-centric intermediation.” = “Our bank’s fundamental strategy is being a bank.”
  2. Failure to confront challenges

    • If you fail to identify and analyze the obstacles, you don’t have a strategy. Instead, you have either a stretch goal, a budget, or a list of things you wish would happen.
    • This reminds me that the choice of root level metrics must be very careful, ==If you can't measure it, you can't improve it==
    • A positive example is DARPA.
  3. Mistaking goals for strategy

    • e.g. a 20/20 goal - We will grow revenue by at least 20% each year. We will maintain a profit margin of at least 20%.
    • Metrics are not strategy.
  4. Sub-goals that are irrelevant or unrealistic

    • Goal is the overall objective, Objective is the sub-goal.
    • Good strategy works by focusing energy and resources on one, or a very few, pivotal objectives whose accomplishment will lead to a cascade of favorable outcomes.
    • What kind of sub-goals are bad sub-goals?
      1. Dog’s Dinner Objectives - putting everything together without distinction.
      2. Blue-Sky Objectives - unrealistic aspirations.

CORS vs CSP

· One min read
  • CORS allows a site A (data provider) to give permission to site B to read (potentially private) data from site A (using the visitor's browser and credentials).
  • CSP allows a site to prevent itself (data consumer) from loading (potentially malicious) content from unexpected sources (e.g. as a defence against XSS).

The Advantages and Disadvantages Change with Perspective

· One min read

There is nothing either good or bad, but thinking makes it so. by Shakespeare in Hamlet

The legend of David and Goliath. From a secular perspective, David is weak and Goliath is strong; David is a novice, while Goliath is an experienced giant warrior. Yet, David defeats Goliath with a sling.

The story of Walmart defeating Kmart. The traditional wisdom in American retail is that a supermarket with a wide variety of products needs to be located in an area with at least 100,000 people. However, Walmart can operate in areas with smaller populations. Why? Because Walmart has more efficient supply chain management, creating an organic network between its stores; whereas Kmart's stores are not as closely connected, leading to higher inventory management costs and less bargaining power in procurement.

During the Cold War arms race, Andy Marshall's strategy against the Soviet Union was to develop comparative advantages by leveraging America's economic and technological strengths. This involved developing technologies that would be costly for the opponent to counter but would not pose a threat to the U.S., such as improving missile accuracy and developing silent submarines. Ultimately, this strategy led to the downfall of the Soviet Union.

Cloud Design Patterns

· 2 min read

Availability patterns

  • Health Endpoint Monitoring: Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals.
  • Queue-Based Load Leveling: Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads.
  • Throttling: Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service.

Data Management patterns

  • Cache-Aside: Load data on demand into a cache from a data store
  • Command and Query Responsibility Segregation: Segregate operations that read data from operations that update data by using separate interfaces.
  • Event Sourcing: Use an append-only store to record the full series of events that describe actions taken on data in a domain.
  • Index Table: Create indexes over the fields in data stores that are frequently referenced by queries.
  • Materialized View: Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations.
  • Sharding: Divide a data store into a set of horizontal partitions or shards.
  • Static Content Hosting: Deploy static content to a cloud-based storage service that can deliver them directly to the client.

Security Patterns

  • Federated Identity: Delegate authentication to an external identity provider.
  • Gatekeeper: Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them.
  • Valet Key: Use a token or key that provides clients with restricted direct access to a specific resource or service.

A Good Strategy is Unexpected

· One min read

A good strategy is both surprising and reasonable. For example, in 1997, Steve Jobs' turnaround strategy upon returning to Apple involved drastically reducing the product line and focusing on a few profitable products. When asked how to deal with the powerful Wintel alliance, he did not engage in grand strategic speeches or set ambitious growth targets; he simply smiled and said, "I will just wait for the next big thing."

Trying to do everything and believing everything is important is equivalent to believing that nothing is important. Good leaders need to know not only what to do but also what not to do.