Young Reacts #73 – Gatsby’s Incremental Builds, Spotify Squad Myth, Basecamp’s Take-home Tests

Nuance matters in reality. Whether we are responding to COVID-19, organizing our teams, or setting up an interview process, simplistic and ideological solutions will lead to suboptimal results.


Software Engineering 🌐

From Static to Real-time: Introducing Incremental Builds in Gatsby Cloud – Gatsby

As I was reading A Static Future, I kept thinking, “this wouldn’t work for my app full of ever-changing data.” But soon after, I found out that the company Gatsby released an incremental build on its platform. The holy grail of CMS. I want to follow up in a couple of months and see if it works as expected.

What It’s Like To Work on League Of Legends? – Built In

Five interviews with technologists at Riot Games, the creator of League Of Legends. I enjoyed getting a glimpse of how different roles come together to build games, which I’ve never worked on myself.

People

Failed #SquadGoals – Jeremiah Lee

The former product manager at Spotify criticizes the famous Spotify Squad model for the lack of alignment and accountability. But I also heard from my coworker from Spotify said that they updated the model in early 2018, and that she missed working as a fully autonomous unit. Your mileage may vary.

Hiring programmers with a take-home test – David Heinemeier Hansson

Take-home test is a contentious topic where people take an ideological stance. But idealism has to meet pragmatism at work. As a hiring manager, you have to get enough signal through a process acceptable to both the team and the candidates. Maybe, if you are a famed company, you may be able to get away with a more stringent interview process. But a high-quality candidate may not appreciate the extra effort your process takes.

Terminology: it’s not black and white – British National Cyber Security Centre

I am pleasantly surprised by this announcement. I never expected a government agency (especially a cybersecurity agency) to eagerly update their policies to promote a more equal, accepting environment for all.

Business 💸

Impact of COVID-19 Crisis – Startup Genome Project

Since the beginning of the crisis 74% of startups have had to terminate full-time employees. 39% of all startups had to lay off 20% or more of their staff, and 26% had to let go 60% of employees or more.

The numbers speak for themselves.

The Burn Multiple – David Sacks

The Burn Multiple is defined as Net Burn (spent investment dollars) divided by Net New ARR (revenue growth) and can be used to show the efficiency of growth. Even if you are not a founder, the efficiency of your company will matter in this business climate, as shown above.

Young Reacts #72 – Formik, Technology Radar, and more

A bit of a personal rant —

It is difficult when I see a situation that runs counter to my principles, justice as fairness (Rawlsian), and tolerance. I try hard to understand and empathize with those that upset me and also wonder if I need to take a stand against the situation. I recognize that I won’t be able to change those against me. I also feel some responsibility for the less privileged victims to show solidarity. I worry about personal consequences as well, the stress and possible reputation hit. I wonder if private rants like this are productive.

Photo by Frank Busch on Unsplash

Software Engineering 🌐

Formik – Jared Palmer

I heard of Formik before, but I was never convinced enough to use it. I felt that in simple forms, useState and prop drilling weren’t too bad. I gave it a try last week, and it was an instant game-changer. It made building a form with a deep component tree a breeze. Validation and async states like “isSaving” are easy to manage, as well. Most of the frontend work is form building anyway, so give it a try.

Enduring techniques from the Technology Radar – Thoughtworks

This article surveys mainstream concepts and techniques in the software industry. Reading this article will allow you to see what you have missed. I found a couple of ideas, such as consumer-driven contract testing, to catch up on.

Documenting Architecture Decisions – Michael Nygard

One of the hardest things to track during the life of a project is the motivation behind certain decisions.

I first read this article in March 2019, but I clearly haven’t internalized the learning since the idea felt new again. The article this time is more timely and applicable since I am about to leave one project to the newer members of the team.

People

Designing in an all-remote company – Christie Lenneville

A GitLab’s UX Director wrote about how their UX designers work in a distributed fashion with some good ideas to create an effective design organization (like recording meetings). She touched upon this point briefly, but I want to emphasize that both synchronous and asynchronous communications have their roles.

When you have time, take a look at their recorded design showcases too.

Jeff’s Letter to the Angular Team and Community – Jeff Cross

Sadly, another article on poor leadership in a prominent tech community. Since it is very long, here is a tl;dr: Angular leadership has been putting up the facade that everyone is happy and aligned while imposing ironclad micromanagement internally.

On a similar theme, here is one on Elm leadership that I shared before: https://lukeplant.me.uk/blog/posts/why-im-leaving-elm/

Business 💸

It’s Time to Build – Marc Andreessen

Marc Andreessen wrote an emotional piece on how the United States should change, given the lackluster response to the pandemic. He criticizes the inability to “build,” and produce, and start investing in those capacities. Humans are hard to change without a crisis, which this pandemic is. But polarized politics, among other things, will probably squander the chance.

How Medium became the best and worst place for coronavirus news – The Verge

Using any sort of user-generated content looks like a losing proposition these days. Either you censor it and get dinged or not censor it and get dinged.

Young Reacts #71 – Crank.js, blurhash, Seniorless, and more

One benefit of working from home and the resulting lost sense of time is that every weekend comes very fast.

Photo by Djim Loic on Unsplash


Software Engineering 🌐

Introducing Crank – Brian Kim

The entire React lifecycle […] could be expressed within a single async generator function.

An interesting experiment to move away from pure functions in React framework to side effects with async functions in Javascript. It was quite astounding to see how component lifecycle methods nicely map to a generator function.

blurhash: A very compact representation of a placeholder for an image. – Dag Ågren

blurhash is easily the most exciting library I found this week. With just a pre-calculated short string (20-30 characters), you can create a beautiful placeholder image.

Versioning fields in GraphQL – Leonardo Losoviz

We can create our field with an argument called version, through which we specify which version of the field to use.

I never thought of versioning subsections of a schema with a version argument. However, I still expect that the work of defining a contract, communicating changes, and program-managing the changes will not go away. Because those are human problems, not technical ones.

Typing functions in TypeScript – Axel Rauschmayer & Augmenting Interfaces in the Global Scope in TypeScript – Marius Schulz

These two Typescript articles taught me two things I always get confused about: How to overload functions, and how to type the global scope in a type-safe way.

People

Seniorless — 5 Reasons You Should Hire More Juniors – Gabriel Grinberg

I was in similar shoes when I was leading a team at a startup. I didn’t have the budget to hire senior engineers, so I instead turned to junior engineers and developed them. Contrarily, I concluded after two years, if your project is time-sensitive, and needs less uncertainty, not more, you should consolidate the headcounts and hire fewer, more senior engineers.

Carta’s covid-19 layoff – Henry Ward

I don’t want to celebrate this article since a lot of people just lost their jobs. However, I do appreciate a CEO of a company taking full responsibility for the decision to lay off.

Business 💸

COVID-19 Global Impact Charts – Luke Wroblewski

An eyeopening set of graphics showing how our society has changed because of the pandemic. Would you have guessed we sleep more now that we don’t need to commute?

The third wave of open source migration – Donald Fischer

for any technology-driven organization that hasn’t embraced the reality that the modern application development platform is a polyglot mix of open source languages, frameworks, and packages: the time is now.

The calculations will differ by organization. The crisis probably put cost-saving at a higher priority. Eventually, it comes down to build vs. buy and tradeoffs between paying the price now vs. later, and immediate benefit vs. future flexibility.

Young Reacts #70

This is my quote of the week. Yes, I have more time since I don’t commute anymore. But life is still too short:


People ❤

Using 6 Page and 2 Page Documents To Make Organizational Decisions by Ian Nowland

Memo reading and writing are a huge part of Netflix culture. Yet, it is hard to find a decent guide to write an effective memo. I like the concrete structure provided by the guide, heavily influenced by Amazon’s memo culture.

Why I’m leaving Elm by Luke Plant

Luke’s rather long account and the reader’s comments remind me that the governance of open source projects is as important as the technology, and certainly more important than the number of stars, or downloads.

Software Engineering 🌐

Developing in a Monorepo While Still Using Webpack by Salem Hilal

Webpack performance is hard. Etsy’s open-sourced solution, Kevin, is optimized for a monorepo build performance by setting up and tearing down compartmentalized Webpack servers on demand. That will help with a gradual upgrade of the build system, too.

Deploys at Slack by Michael Deng and Jonathan Chang

I am a bit surprised to read that Slack mutates its infra to deploy. I assume mutating is faster than baking immutable images but feels a bit risky. How would one know if the correct version is running on a particular instance when the file sync fails?

gqless or gqlful? by Marc-André Giroux

One section (Declarative, Static Queries) stood out to me. Type-safe flexibility is a significant benefit of GraphQL. However, that flexibility hinders performance monitoring and optimization. As we scale GraphQL internally at Netflix, we need to think about those two aspects.

Note: gqless is a new library that goes one step beyond babel-blade. On top of dynamically creating queries for the required data in components, it even hides that the components are querying for remote data.

Business 💸

Newspapers to lose £50m in online ads as firms use coronavirus ‘blacklist’ by The Guardian

The old media is going through another extinction event. So much of coverage is on coronavirus, but no advertiser wants to be associated with it.

F1 Virtual Grand Prix! Full Race | Albert Park Circuit by Formula 1

Esports is the only sports in 2020. Even Formula 1 is forced to use F1 esports to keep fans engaged. The virtual races will occur on the planned Grandprix weekends on the same circuits, featuring some of the current F1 drivers.

Young Reacts #69

Sometimes it’s relieving to stop looking at the exponential growth curve of the pandemic and just listen to the rain. Don’t get too consumed with the news. Your mental health is just as important as your physical health.

Photo by SHAH Shah on Unsplash


People ❤

It Felt Like a Black Mirror Episode’ The Inside Account of How Bird Laid off 406 People in Two Minutes via a Zoom Webinar – Ben Bergman

It’s understandable that businesses need to cut when they can’t meet the numbers. But it’s not excusable that the leadership ignored the personal impact of the layoff on those impacted. How you behave in tough times is your class.

Day 1. Product idea. Day 2: Core values – Chris Hicken

Values shouldn’t be abstract. Think about the behaviors you want to see and codify them. If you can come up with job-specific behaviors, the better.

Software Engineering 🌐

Getting started – AsyncAPI

It’s important to describe API explicitly and unambiguously when not all your customers share the same level of context as you. The same goes for event-driven architectures, which is a problem AsyncAPI specification tries to solve. The spec provides a “machine-readable definition of your event-driven API.”

Announcing TensorFlow Quantum: An Open Source Library for Quantum Machine Learning – Alan Ho and Masoud Mohseni

Most of the jargon flew over my head. But the gist is that quantum computing could save an exponential amount of classical computing and outperform traditional classical AI models. AI Quantum sounds so futuristic, yet almost here.

🏗️ Automatically move a module into a Web Worker (Webpack loader) – Jason Miller

Even though it wouldn’t solve the most common performance challenge, DOM rendering, the Webpack loader will be helpful in some cases.

Business 💸

Why to Start a Startup in a Bad Economy – Paul Graham

The article comes from a place of privilege and assumes there is no significant personal risk. However, I see that the state of the economy doesn’t meaningfully change the risk profile of a startup.

Who’s freezing hiring from coronavirus – Candor

The economic impact is felt across the tech industry as well. Out of 4,841 companies in the list, more than 2,000 froze hiring and about 350 laid off their staff. We will see more layoffs in the coming months.

Young Reacts #68 – Agility and Flexibility

The pandemic added a lot of uncertainties to my team’s roadmap. Our studio stakeholders’ priorities are changing daily, yet they are too slammed to provide much feedback on our ongoing projects. Given those two constraints, our team must stay agile and flexible. Our work, in response to the pandemic, has looser product definitions with high urgency to deliver now. As a result, much of the work may be thrown away or proven useless. And that’s ok. Now is the time for us to jump into the unknown along with our stakeholders. That’s the least we can do as partners to our studio.

People ❤

Getting the Bigger Role – Brian Donohue

Brian Donohue gives invaluable advice in advancing your career. I especially liked the Caveats section: “it’s better to ask for forgiveness than permission, when doing the bigger role,” and “doing the bigger role doesn’t mean you’re entitled to it.” The tricky part for me is to see if I want that bigger role.

Twitter Thread – Steward Butterfield

This thread gives an interesting look at how Slack reacted to COVID-19 for the last two weeks.

Software Engineering 🌐

Tracking Research Questions, Assumptions, and Facts in Agile – Rachel Krause

Product development is a series of experiments creating and validating assumptions. Thus, the learnings from the development are as important as the product itself. But we often lose those learnings when people leave the team. This article helps to make the learnings explicit and long-living.

Introducing Gretchen: Making Fetch Happen in TypeScript – Eric Bailey

It is essential to model a type system as close as possible to the corresponding domain to educate the other developers. But most data fetching libraries often do this:

type Result = { data?: TDataType; error?: TErrorType }

This confuses the domain since it isn’t clear if both data and error can exist, or be absent. But I appreciate Gretchen uses a more explicit union type:

type Result = { data: TDataType; error: undefined } | { data: undefined; error: TErrorType }

Business 💸

O’Reilly’s events business – Laura Baldwin

O’Reilly closes its offline conference business. I wonder two things: how will attendees interact online? More importantly, what will differentiate them from a personal YouTube channel from a speaker’s point of view? O’Reilly is losing so much of its gatekeeping ability.

The End of Starsky Robotics – Stefan Seltz-Axmacher

I feel empathetic to Stefan. There is so much you can do as an individual when the tide is against you. Timing and luck are a huge part of our lives, and you can’t change them once you start your startup.

Young Reacts #67 – Github acquiring npm

Outside the pandemic, I was particularly surprised by Github’s acquisition of npm. Both of them are the backbone of the opensource community. Github and npm, combined, will host most existing Javascript packages. 

Their parent company, Microsoft, is playing a long game to create the best possible developer experience, seamlessly integrated with Typescript, VS Code, Github, npm, and Azure, and win the minds and hearts of the next generation. At the very least, its coming ecosystem looks promising to Javascript developers.

People ❤

Peacetime CEO/Wartime CEO by Ben Horowitz

While I don’t appreciate the war metaphor, we are heading into turbulent times. Our teams will fight for survival in the coming months. Though I don’t think a lot of the mentioned wartime qualities in the article are necessary, I hope you consider and execute the necessary mentality shift for your teams.

Software Engineering 🌐

The epistemology of software quality by Hillel Wayne

Only human factors, not technologies, are proven to have a deep impact on software quality. I realize technologies don’t have inherent values. They only aid in providing the best possible work environment for humans.

Domain-Driven GraphQL Schema Design by Khalil Stemmler

Our internal GraphQL working group is figuring out the best practices to design GraphQL schema. The usual freedom and responsibility do not apply here considering that GraphQL schema is hard to revert and global. Domain-driven design looks like a great starting point.

scriptlint: an enforceable script naming standard for package.json

We have linters for Javascript (eslint), and CSS (csslint). Why not for package.json?

Business 💸

npm is joining GitHub by Nat Friedman and Next Phase Montage by Isaac Z. Schlueter

The first article describes Github’s rationales, like possible synergies, and the second article tells npm’s journeys. I am grateful for what Isaac has done for the community. I feel bad that npm never became a viable business. But given his said priorities, it is understandable.

The state of the restaurant industry by OpenTable

Lots of marketplace startups digitized trust and moved the offline markets to online. We stayed at strangers’ homes and got rides from their cars. But this pandemic has removed the base level of trust, required to create markets. For example, these numbers from OpenTable show a non-functioning restaurant marketplace. This doesn’t bode well for the coming months and years.

Young Reacts #66 – Remote Working Recap

It has been a challenging week for me since I started working remotely. I wrote about my work from home experience.


People ❤

My focus this week has been on remote working. These guides should help you get more comfortable working from home.

Remote – William Blankenship

Remote work is not inferior to office work. A lot of people just assume so, but we can start by questioning that assumption together.

How to be Effective at Working Remotely – Brady Voss

I loved the analogy of a remote relationship. While people may be tempted to blame physical remoteness when balls get dropped, we can only overcome the challenges through more intentional, proactive communication from both sides.

Working from Home — a Guide – Charles Patterson

The line between work life and personal life gets blurred when we work from home. We are all better served by separating physical space or following a routine to mark the start and end of work.

Software Engineering 🌐

dataloader-codegen – Yelp

If you want to start creating GraphQL endpoint on top of RESTful API, this library will simplify the process of wiring GraphQL resolvers to the API.

Zod: Typescript-first schema validation with static type inference – Colin McDonnell

This library is not necessary if you use typed API, like GraphQL or generated clients. But if you have REST API prone to produce unexpected results, Zod and io-ts seem to be the best options available.

Alternatives to enums in TypeScript – Axel Rauschmayer

As I have only worked on apps, not libraries, I never thought about runtime checks for Javascript. It is good to learn about different techniques. If you aren’t interested in specifics, my recommendation is to stick to String Enum.

Business 💸

Ether Plunge Tests DeFi Giant While Ripple Effects Have Just Begun – Camila Russo

There has been yet another hack against the new decentralized finance. Will open-source ever be able to protect its investors from the hacks and pitfalls?

Remote Working Recap – First Week

Remote working will eventually be mainstream since talents and living costs have become too expensive in the tech hubs. Thus, even though I never worked remotely and I probably suck at it, I have wanted to try working remotely. Due to COVID-19, Netflix strongly recommended that all Los Gatos employees (that include me) work from home starting last Tuesday. So this week gave me the first taste of working remotely, for a prolonged time. I might as well learn from this experience. I am gathering my initial thoughts here so that I can improve my productivity and satisfaction.

Good

  1. I love that I get to spend more time with my wife. We do a quick grocery run, enjoy lunch, and stretch our legs together throughout the day. My usual commute is pretty short, about 40 minutes. So I should be saving about an hour and a half every day, but I feel that I get far more quality time with my wife. Everyday somehow feels like Friday.
  2. Since remote working introduces additional frictions to meetings, a lot of non-essential meetings, such as a presentation about the latest market research, got postponed or canceled. I will eventually miss those meetings. But, for now, I find more time to code and feel more productive.

Bad

  1. My weekday routine got disrupted. I miss my morning workout, brisk walks to/from my shuttle stop, and a quick meditation session on the way to the office. Instead, I now wake up past 9 am, don’t take a shower until the evening, and walk less than 2000 steps, which upsets me since I feel like I wasted the day. This disruption hurts more because I was making consistent progress towards my health goal. Now I need to build a new routine that will get me through the next coming months.
  2. I can’t seem to focus during remote meetings. I daydream a lot and get distracted easily, so I usually make a point of not bringing my laptop into the meetings. I instead take a pen and a note with me. But now that I need my laptop to call into the meetings, I get distracted by notifications and new emails during the meetings. With the camera on, I behave better. But it is a struggle.
  3. Now that my work laptop is on my home desk, I keep getting sucked back into work after dinner. I tell myself, “I just need to push one more small code change.” It’s so alluring. But I should recognize that work literally has no end and protect my personal time.

Overall, I still feel productive. Possibly more than before. But in the long run, I worry about my psychological health. I also am concerned that our team could suffer organizational problems like lack of alignment and relationship since Netflix has been an office-first company. I will keep logging my thoughts to keep me honest and improve myself in the coming months.

Young Reacts #65 – Fighting Inertia

I hate to admit but I have been experiencing some mannerisms after a while at Netflix. I still find the work challenging and rewarding but learned to give up some fights after a while—problems such as how to run sprints, or how to organize our codes. When I first joined, I tried to question them and hopefully improve them. But I wasn’t enough and eventually got desensitized to those recurring issues. I always had other more pressing work to do.

But after new team members joined, they renewed the team’s energy to revisit those old challenges. They have been speaking up during the code reviews and sprint planning meetings when they don’t understand why. In less than a month, we reorganized our codebase, scheduled a new weekly design-eng sync, and started spending time more consciously during the meetings. I am grateful for this opportunity to grow as a team and looking forward to the coming months.


People ❤

How I Write & How to Write Usefully

I have been trying to write more because I can clarify my thinking and retain my learnings better by writing. At the same time, I also have had a hard time coming up with ideas and writing coherent long articles. I appreciated that both prolific authors shared their processes and the work they put into each writing.

Software Engineering 🌐

Fix the slow render before you fix the re-render

The math is simple. Your app will need to render at least once. So if that render is slow (say >50 ms), it doesn’t matter whether your app renders only once. I also learned to differentiate “render,” “reconciliation,” and “commit” in React land.

renamer: Rename files in bulk

My current codebase is a hodgepodge of camelCase, PascalCase, and kebob-case. I look forward to cleaning those up with this tool. But I would love to have a tool that will update dependency paths in files.

What’s behind the hype about Blazor?

Blazor is a client-side UI framework based on .NET and C#. I asked JS engineers at the company about their thoughts and was surprised to see that many who I respected loved writing C#. So maybe there is something to the framework.

Business 💸

The Gross Margin Problem: Lessons for Tech-Enabled Startups & The New Business of AI (and How It’s Different From Traditional Software)

Two articles, although they analyze two different verticals (physical world products and AI), share the same insight. Gross margin used to be great for software companies, where the cost of serving customers after the first one was effectively zero. But efficiency starts to matter.

Cool things of the week 😎

YouTuber uses neural networks to upscale 1896 short film to 4K 60 fps

I got so used to HD that I find movies before 2010 hard to watch. Maybe, we can get remaster releases of classics such as Starcraft or Warcraft Remasters using this technique like this.

youka: Generate karaoke for any song in any language

Another cool AI technique splitting the voice and the instruments from audio to generate karaoke video.