QIAOPANG.COM · SELECTED ESSAYS (2013–2026) · 260 ESSAYSBrowse Chronologically (2013 → 2026) ↗
QiaoPang · Programmers LifeSelected Essays · Systems, Craft & Agentic Era
Timeline ↗

Turn Left, Turn Right

Turn Left, Turn Right

Yes, it has been half a month since Programmer Guy last surfaced—not even a one-second smiley, or a photo of me pinned under my little girl while playing Sven (the reindeer from Frozen).

A reader sent me a crying face and said he had just pinned me as a “true love” and then never saw another post. I replied with a big crying face and said, sorry. Can our true love withstand the test of time? After a long wait, just as I was sadly lamenting that I had been ruthlessly abandoned by “true love,” the other side sent a voice message. I froze for a while, not knowing what to do. Then I nervously opened it and heard a magnetic voice come out: affirmative, roger, go go go. Ha—so he is a Counter-Strike fan. True love indeed.

Generally speaking, there are only two possibilities when I don’t post for a long time: either I’ve been hijacked by a virus, or I’m so busy I have no time to clone myself. Recently it has been both. I had a cold for a week, felt completely drained, and of course all kinds of things happened at the same time. Last night was the first evening in days when I did nothing at all—in Teacher Chi’s words, I wasted the whole evening. I went to the supermarket, bought train tickets, took the kid for a walk and chatted, and went to bed early at nine. You know? I sadly discovered that the consequence of sleeping three extra hours was a splitting headache all day today.

Ever since I started the green card process in January, I have been waiting bitterly for a chance to go back to China. I filed the I-485 in May, and according to my lawyer, it would take at least two or three months to get AP—the legendary advance parole. Then heaven smiled: last week my lawyer told me I could go for fingerprinting and expected me to get advance parole soon. The document’s main value is that, before I formally obtain permanent residency, I can leave the United States without worrying about being unable to re-enter in a suitable status. Leave the U.S. to do what? Go back to China, of course. I haven’t been back for a year and a half, and my longing for family, friends, and good food has reached an outrageous level. Go back to do what? Besides doing what good-for-nothings love most (eating, drinking, and having fun), it is to recruit and train engineers.

Yes, we are going to recruit engineers in Beijing—to put it in today’s bragging style, we are going to build an overseas R&D center. But let’s leave the bragging to marketing; between engineers, let’s speak from the heart: we want to build an R&D team in Beijing and, together with our brother team in San Francisco, create a series of great products. As for how big the team will be and what the ceiling is, I cannot give a clear answer yet. As a startup, we are taking solid steps while sprinting in small strides. My goal for this trip back is to recruit and train several outstanding engineers. As the company grows, we will steadily invest more resources.

This is not a sudden whim, nor is it driven by me alone. After I joined at the end of last year, the entire management team seriously discussed this plan, and starting early this year we spent a huge amount—people, money, and time—to set up a WFOE (wholly foreign-owned enterprise) in Beijing (all legal formalities are expected to be completed by the end of July). Anyone who has dealt with a VIE structure knows that domestic startups taking dollar funds generally need a VIE structure to facilitate capital flows and a possible future exit. The WFOE is an important link in that chain, and the most procedurally complex and heavily regulated one in the entire setup. By establishing a WFOE, we have sent a clear message: like our other sites, the China team is an equal and important part. In other words, the company follows the same thinking as the Chief Architect: whether black cat or white cat, the one that catches mice is a good cat.

If you are not clear what adRise / TubiTV is, you can refer to this post of mine: , and this article: . The team currently has three Chinese engineers; add the Chinese-American engineers and that makes five; add the engineer who is learning Chinese and the total is seven. A Chinese wave has swept through half the engineering team.

Let me introduce the Chinese engineers on the team.

Haofei—undergraduate degree from BUPT, master’s at Syracuse University, known as the cradle of American politicians. Right after graduation, he resolutely gave up a political career, got into his second-hand Q7, loaded in his beloved girl and all his belongings, and drove grandly across the United States to sunny Silicon Valley. During his two years at adRise, nothing could stand in his way—be it god or buddha—and he grew from a junior engineer into the company’s number-one go-to guy across Asia, Africa, and Europe—no, across the web, OTT, and backend fronts. More than half the company’s systems, especially the core content management system and video transcoding system, are under his command. We recently promoted four tech leads; Haofei is tech lead for everything—for external matters, ask the founder; for internal matters, just ask him. Haofei’s work ethic is outrageous: he often Slacks me at midnight saying, “Are you there?” and then a wave of questions and ideas hits me… Syracuse’s motto is Suos Cultores Scientia Coronat—knowledge crowns those who seek her. Haofei has clearly drawn strength from it.

Zhiye—graduate degree from BUPT, former frontend engineer at Meituan, became a full-stack engineer at adRise; he can build APIs and single-handedly develop an entire web product. About 85% of today’s tubitv.com came from his hands. His product achievements made him the company’s tech lead for web. Now he is alone in big Texas, mingling among the Dallas Cowboys, remotely steering the technical development of our California team’s web work. For family reasons, Zhiye lives in Dallas, but his body is in Texas while his heart is in San Francisco. When he is with us, he is a Warrior; walking the streets of Dallas, he has to pretend to be a Maverick. So when the Warriors play an away game against the Mavericks, Zhiye generally dares not go out…

The greatest trait Haofei and Zhiye share is that they are self-motivated. Their heads clearly hold the product roadmap, the company roadmap, and the roadmap of life. No one needs to prod them or deliberately track their progress—they get things done and are constantly improving themselves. When Haofei first joined, he wrote C# on Xbox and wrestled with PHP on the backend; now he can do Angular (HTML5 smart TV), handle Node.js, and wrangle Spark. When Zhiye refactored our web product, he overcame all objections and chose React, which he had not used at large scale before; in the project he flattened a whole set of pits—React + Redux + React Router and friends—and led the entire web team to learn React. In my 1:1s with the team, the thing the web engineers are most proud of is: “Holy crap, I can put proficient in React / Redux on my résumé!” (Does that smell like a coup for a raise?)

You see, these two are a microcosm of our team: we are not made up of a bunch of hotshots, but we are a group of proactive, self-motivated engineers who learn, learn, and learn again. Continuous learning and continuous growth are an important part of our culture—unlike other startups at the same stage, we have ample budget in this area: conferences (this year our engineers attended EON - Elasticsearch, Google I/O, and Droidcon - Android; planned are NodeUp and AWS re:Invent 2016), online courses (egghead, Coursera, etc.), even offline courses (our product manager learned JavaScript), and peer exchange (our Android engineer is now learning JavaScript from me)…

At this point you probably have some basic understanding of us. Below is the meat that may get your blood pumping:

All our backend services are built on AWS; we are a heavy AWS user. Basically every AWS service you have heard of is in use or in trial.

Deployment uses Ansible. Our playbooks already cover more than 80% of all systems. One command deploys code seamlessly to all servers within minutes.

Although we use various A/B testing tools such as optimize.ly locally, in the backend we use our own experiment system based on PlanOut (Facebook) to globally manage the experiment needs of all product lines.

The core of our API system was written by me on top of restify; see the series of posts I wrote earlier: . Most legacy APIs have now been migrated onto this system and run stably. Whenever you use any TubiTV product, this API system is behind it. We intend to open-source it at an appropriate time.

For analytics we have our own system: an analytics API aggregates into Kinesis, data settles in Redshift, a Spark cluster performs all kinds of transformations, and finally it is presented in tools such as Periscope.

The CMS is homegrown. It includes a management system that manages our content and lets our TV programming team schedule programs; it also includes a complex content pipeline of dozens of steps that extracts information from raw video, transcodes it, and delivers it to the CDN.

The ad system is based on PHP and supports real-time bidding for all our advertising clients. Every ad you see across TubiTV product lines depends on the hard work of this system.

We believe in getting things done, so we embrace pragmatism. The company does not explicitly restrict the use of third-party technology, so we use a large number of third-party services: ELK, Datadog / New Relic, Twilio, Sentry, and so on. At this stage, for non-core business, anything that can be solved with money does not get more people.

As for clients, we support more than ten platforms: Roku, Android phone, Android pad, Chromecast, iPhone, iPad, Apple TV, Samsung TV, Fire TV, Xbox, and more. Among them, the Android product line once ranked in the top fifty on the Play Store overall chart, and the iOS product line ranked eighth in Entertainment.

Don’t ask me how a dozen-person engineering team can do so much work. Come join us and I’ll tell you secretly.

Don’t ask me how your product can get an editorial recommendation from Google Play. Come join us and I’ll tell you secretly.

If the terms above made your blood boil, congratulations—we can chat another ten yuan’s worth.

Engineers are all quietly passionate, honest people. Let’s continue with the topic we’ve been holding back for a while: money and opportunity.

We can pay salaries that match your value. The basic guideline is RMB 250k–500k base salary, a range equivalent to MTS4–Sr. Staff at a foreign company, or P5–P7 at Alibaba. Equity is negotiable. For exceptional talent, we can talk separately.

As for opportunity, I think the following points are important and worth paying attention to. I am not sales; I can’t bullshit, so I will only lay out facts. Please read between the lines for the subtext.

We are already a stable Series B company with strong revenue and continued rapid growth. We are the largest player in the Free TV market in North America, and our business position is quite solid (Paramount, MGM, and Lionsgate—three Hollywood heavyweights—are our partners).

Because the company is still very small, WFOE employees can deal directly with anyone at headquarters; you don’t need me or anyone else to be your mouthpiece. Of course, as your direct supervisor, I am happy—and obliged—to clear all work obstacles for you and to raise your profile at headquarters.

As long as our business does not undergo a major upheaval, the domestic WFOE will continue to invest.

We are also working on an L1 blanket petition. Besides showing how serious we are about the China site, more importantly it means that when needed, we can relocate engineers from China to the U.S. on L1A or L1B visas. For what L1A and L1B are and what they do, see this article of mine: .

The whole company is still small. Every engineer still has the chance to influence the company—and their own life—through line after line of code flowing from their fingertips.

My colleagues and I will return to China regularly to discuss technology, life, soccer, the NBA, and where exactly Cyprus (our CTO’s hometown) is, and so on. If you are LGBT, welcome—at the company annual party, he will bring his boyfriend; she will bring her girlfriend, and they will chat and laugh with everyone.

We will also regularly send people to headquarters to meet our enthusiastic colleagues and receive technical training. Maybe on weekends we’ll drive you along Highway 1 for a spin, or go to Muir Woods Park / Yosemite to cleanse our lungs. And if you happen to catch a Warriors home regular-season game, for a few dozen dollars you can go with colleagues and soak up the NBA atmosphere. We are all Stephen Curry fans; in some way Curry is a totem for us: a lack of talent and a lower starting point can both be made up for with diligence and hard work.

What kind of people do we need?

  • We need people who do not need a manager watching over them and can manage themselves. As a remote engineer, self-drive is incredibly important.
  • We need people who can keep learning and do not use their past to define their future. Technology changes at a thousand miles a day; everyone must be ready to accept new things at any time.
  • We need rock stars—people who, simply by existing, bring a difference and make the company and team better.
  • We need people who can express their views without obstruction. Your spoken English doesn’t have to be good, but you must dare to—and be good at—using broken English to express your ideas.

The third point is a bit abstract. Allow me to explain with my own personal experience at Juniper (who’s throwing rotten tomatoes at me?):

  • In 2006, on a business trip for training, I summarized what I learned into two English documents that ran to 100 pages, and asked every engineer who had trained me to review them. It took two or three months and was finally finalized. Among the several people who attended the training together, only I did this. How valuable was that document? American colleagues called it NetScreen’s “Sunflower Manual.” The VP praised me in emails and at all-hands. When I returned to Juniper in 2013, colleagues still excitedly told me: we are still using your documents to train newcomers and solve problems.
  • In 2008, I volunteered to be the leader and liaison of a program with no real power and little thanks. The program’s goal was to build an innovative engineering culture; several key metrics—patents, BBL, and so on—had previously been zero for us. I invited a DE II in the company who co-chaired trusted computing at the IETF and also held an important post on the internal Patent Review Committee to talk to everyone about how to do patents. I also waded into the muddy waters of patents myself, found methods and experience, and inspired people’s willingness to write. In the end, that year our site escaped the embarrassment of zero patents and successfully published more than ten; I myself wrote five or six invention disclosures (four were eventually approved).
  • Throughout my career at Juniper, I built many tools: crash analyzer, code exam system; I wrote many documents.

No one required me to do these things. They were not my job. It’s just that, in the course of work, I found that if I did these things, the people around me and I could either become better, or their work could become easier. The value I create is not only the part the company pays me a salary for; it also includes everything I think can be improved.

Okay, the specific positions:

  • Senior Full-Stack Engineer. Requirements: mastery of Node.js / JavaScript. By mastery, I mean you at least understand the event loop mechanism clearly, know how to use event emitters and streaming, are comfortable handling asynchrony, and know when to use callbacks, Promises, and Observables. ES6 syntax is not an obstacle for you. Know at least one frontend framework and be proficient with WebSocket. Able to use MySQL / Postgres / MongoDB / Redis. Know how to reasonably use different technical approaches to architect a backend system. Can quickly pick up and master unfamiliar technologies (like those I listed above).
  • Senior Android Engineer. Has independently developed a medium-sized Android app. You can download TubiTV’s Android app from the Play Store and then think about the technology we use. If you were asked to complete such a product alone, how confident are you that you could pull it off?
  • Senior Xbox Engineer. Has developed an Xbox One app. Knows Windows Universal Platforms and WinJS.
  • Senior HTML5 Engineer. Able to develop HTML5 apps for smart TVs. Requirements: mastery of the React / Redux / React Router stack.

Bonus points:

  • A presentable repo on GitHub
  • Proficiency in Python
  • Proficiency in at least one language besides those required above (Go / Scala / Elixir / Clojure / Ruby)
  • Proficiency in Spark
  • Have used one or more Apache projects not mentioned here, e.g., Lucene, Kafka, etc.

Work location: Beijing (address TBD). Initially we will use shared desks. Once the team grows large enough, we will weigh where everyone lives and rent an office building in a suitable location. During the week, you can choose one or two days to work from home according to your needs—we fully trust every employee to make the choice that is best for both themselves and the team. Working from home is efficient and saves time, but gathering together strengthens mutual understanding and trust, and helps spark more ideas.

Benefits: statutory social insurance and housing fund (five insurances and one fund). Other benefits are the same as headquarters.

Hiring plan this quarter: 3–4 people. Until filled. The next headcount may open in early Q4.

Expected start date: late July to early August. I will go back then to help with all the miscellaneous work, including training, and help everyone integrate into the team as quickly as possible.

I have already finalized a detailed training plan. Here are a few items:

  • adRise / TubiTV regulations, benefits & team (our beautiful colleague)
  • adRise / TubiTV business orientation (company founder)
  • engineering culture (me & CTO Marios)
  • development environment, deployment environment, etc. (me)
  • basic knowledge and operations of various AWS services (me)
  • Node.js / ES6 (me)
  • API system (me)
  • internal services (Haofei)

Except for mine, the other trainings will be in the form of remote meetings. So the start date is very important. I hope we can spend plenty of time together, get to know each other well, and at the same time I will do my utmost to remove all possible obstacles at work.

Okay, that’s enough. Whether or not you are interested in us, I hope the text above helps you think about the ultimate career question of “turn left or turn right.” Of course, I very much hope you will be interested. If you feel you match the requirements above, please send an email to: jobs.china at tubitv.com. We will do a phone screen for outstanding résumés, then an online code exam, and then one or more rounds of video interviews.

Enough of this rambling.

After Brexit, Texas cowboys are clamoring to secede from the U.S. and rejoin the Republic of Texas,

Step by step, commanding the web product line,

Now single-handedly supporting our Dallas team

Although our founders are a multinational force of French, Korean, and Spanish people, and the team is mostly white, the Chinese engineers are the pillars and the real backbone—there is no doubt about it.

MORE IN Leadership & Career

Further Reading in This Column

View all essays in “Leadership & Career” →

The Programmer's Meltdown

After enduring the 'unsafe shitstorm,' actix-web's maintainer pulled the top-ranked Rust framework and walked away from open source—a story of maintainer burnout and the hidden cost of demanding that volunteers reshape their work for everyone else.

Book Next Chronicles (2013–2020)2,451 chars · 5 min read

Nana the Intern

When it comes to interns, beyond learning ability, I ask for one thing: a long enough runway. By "long enough" I mean at least two or three months — anything shorter and they leave before contributing anything of value, clutching a glowing evaluation form. Nana's story is an exception worth studying.

程序人生 (2015–2019)4,528 chars · 10 min read

ArcBlock at One Year

One year since trading the Bay Area for Washington State: a reflection on the winding road that built ArcBlock — its Forge framework, its bet on application chains, and the choices that led here.

Book Next Chronicles (2013–2020)6,593 chars · 15 min read