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

Nana the Intern

Nana the Intern

Beyond learning ability, the one thing I demand of an intern is a sufficiently long internship. By “sufficiently long,” I mean at least two or three months. Anything shorter, and all too often they leave before they’ve begun contributing anything of value, strutting out the door with a performance review full of praise.

Nana was originally supposed to start in early June. But thanks to her school’s infuriatingly inefficient handling of her EAD (Employment Authorization Document), she didn’t report for duty until early August. That summer we’d taken on three interns: one coasted along and left early, and one simply never showed up. So I hadn’t held out much hope for her internship — I was even a little resistant to the idea. After all, what can a rising junior really accomplish in four weeks?

Even so, I sat down with her and drew up a four-week plan. She arrived with her own dApp idea, and it just so happened we wanted interns to build simple dApps on our framework, so we hit it off immediately. Her dApp was based on this scenario: vending machines scattered across a city are a multi-party business — the equipment owner, the venue owner, the operator, the supplier, and so on. Per their contracts, these parties are entitled to split the final sales profit according to agreed-upon ratios. But today everyone can only trust the sales data the operator provides, with no way to verify its authenticity. This is a textbook audit-trail scenario, very similar to advertising revenue sharing. In the traditional ad-split model, the advertiser doesn’t trust the operator, so whenever an ad impression occurs, data is typically sent to an independent third-party tracking server for reconciliation. This kind of application is a perfect fit for a ledger represented by a blockchain.

Once we’d settled on the topic, I laid out her four weeks as follows: Week one — nail down the requirements and basic architecture, and learn the necessary blockchain concepts and how to use the Forge framework. Week two — write the core smart contracts to support emitting the audit trail, and build a simulator to generate large volumes of data. Week three — build a webapp on top of that data for querying bills and visualizing sales. Week four — polish the whole webapp for a great user experience. At the same time, record a short video each week introducing that week’s work, and take the script from the video, give it a light polish, and turn it into a blog post. This “at the same time” bit was a request from the marketing/PR team. I’d initially thought it a waste of time, but I worried Nana might not finish the dApp, and having videos and blog posts as a fallback deliverable would at least let her internship end on a respectable note — so I didn’t push back.

Before the internship officially began, Nana had proactively studied most of our documentation and could already introduce our product with great ease — which was far beyond my expectations. So during training she caught on very quickly, and she always had insightful questions that made me sit up and take notice. She was also lucky with her timing: a new colleague on our Beijing team joined right around when she did, so she caught our fairly systematic two-week training on Elixir and blockchain. She’d previously built simple webapps with Python and Django, so I entrusted her to my colleague Riley to help her learn and use our Python SDK more effectively.

Soon she was occupying a good chunk of my day. She asked a great many questions — about architecture and design, and about the organization, writing, and debugging of smart contracts. For instance: who emits the audit trail for a product sale, and what does it contain? Then there’s updating the state of the ledger — how do you do it, how do you do it well, how do you read the logs, and so on. Our smart contracts are written in Elixir, which meant that after getting her head around all these questions, she’d still have to learn at least a subset of Elixir before she could start writing code.

Week one progressed a little slower than expected, but I was already growing fond of this young woman. She went about things methodically and meticulously. The weekly videos struck me as icing on the cake — do them well if there’s time, wing it if there isn’t, so long as there’s some contribution and output for Marketing/PR. Yet she’d typically have her video script written and sent to me for review by Thursday evening, then spend much of Friday recording and re-recording. At first, our designer Echo put a lot of effort into polishing the recorded videos. Later, Nana learned from Echo and worked out some techniques of her own, handing Echo videos already well-tuned in iMovie — the quality was consistently excellent, and Echo barely had to lift a finger.

By week two Nana was hitting her stride. The smart contracts were soon debugged, and the simulator for generating meaningful data was done too. Along the way, she uncovered a whole series of issues from the SDK up through the framework and reported them back to the team.

Week three was busy for me, and I didn’t have much daytime to help her. We briefly confirmed the webapp design; she wanted to build it with Plotly’s Dash, which I looked into and found to be a Flask-based visualization tool with no major (scalability) issues, so I told her to go for it. She soon ran into a new problem: the on-chain data was trustworthy, but not easy to display conveniently. This touched on off-chain logic, and I told her she needed an index DB to work alongside it (Forge provides its own index DB, and we’d been pondering how to put it to better use).

On the Saturday of week three, I was at the office as usual (the perks of bachelor life when the wife and kids are away). She came in too and spent the entire day there, until nearly eight in the evening, producing the third video. The production quality exceeded anything I’d imagined — not just the organization of form and content, but, more importantly, the understanding and exposition of concepts and ideas. For example, when explaining the difference between check and verify, she used the two-step process of going through airport security as an analogy for the light check and full inspection of transactions — wonderfully vivid, instantly concretizing something complex.

In that final week, when her webapp first took shape, it stunned everyone. Afterward she poured great effort into refining it as if it were a product about to launch — using Faker to simulate data, tweaking the webapp’s CSS, adding a calendar for selecting date ranges in report queries, and so on. Ultimately, at Thursday’s all-hands meeting, the entire team witnessed a dazzling demo.

Nana the intern

Nana the intern

The four-week internship came to an end, and Nana left us with these results:

  1. A vending machine dApp of solid quality
  2. Four high-quality videos, walking you step by step through how she built the dApp
  3. Four engineering blog posts
  4. A number of important issues filed
  5. And, most importantly, an internal BBL: “Forge: the bad, the bad and the ugly”

That BBL was a talk I asked her to give — an invitation to vent about all the frustrating situations she encountered as a nearly greenhorn programmer building a dApp on Forge. Since the external videos put on a shining, presentable face, there was no need to mince words internally — hence “the good, the bad and the ugly” without the “good.” She summarized and shared with everyone all the problems and frustrations she’d encountered as a developer over those four weeks, and compiled them into a document (many of which had already been fixed when she filed the bugs).

What Kind of Intern Do We Really Need?

Nana’s internship was unquestionably a great success — it exceeded all of our expectations, including Nana’s own. For Nana, she learned a great deal of knowledge and experience, not only in code but in many other areas; she validated and sharpened her talents, and gained some of life’s most precious experience. For us, beyond the deliverables listed above, Nana’s internship opened a window for us, prompting more reflection and learning.

Of these reflections, the most important is this: how do we find and nurture the next Nana? How do we turn what looks like serendipity into a repeatable pattern?

Through twenty-odd days of observation and conversation, I noticed she possesses these qualities:

One: passion for what she does.

“Passion” is a word that’s been cheapened these days; any job seeker can muster the sincerest tone to declare their enthusiasm for the cause you’re fighting for, for the industry you’re battling in. But passion is not a dinner party, nor an essay. Passion is rooted in action. Before she had even officially joined us as an intern, Nana had systematically self-studied our product. To draw an imperfect analogy, she was like Zhang Wuji on Ice Fire Island — external and internal martial arts techniques already mastered within, just waiting for someone to offer a few pointers. That’s her passion for what she studies. Later, while building the dApp, she often worked until one or two in the morning, never resting until she’d reached her goal — there was a hint of “persevere, and even metal and stone can be carved.” That’s her passion for what she does.

Two: diligent in thought, adept at expression.

The ability to express oneself — whether in life or in the workplace — will surely rank in the top three in importance. Good expression reflects a person’s grasp of concepts, their ability to abstract and concretize content, the logical organization of their thinking, and their personal appeal. Someone diligent in thought is not necessarily good at expression, but someone good at expression — someone who can unravel a complex problem thread by thread — is certainly diligent in thought. A glance at a couple of Nana’s videos and you’ll see what I mean.

Three: learning ability.

Nana’s learning ability commands my admiration. From the brief account of her whole internship above, I trust everyone can reach the same conclusion. I watched each of her videos carefully — those videos alone were enough to make me feel, after a few days apart, that I should look at her with new eyes.

Four: simplicity.

Applying “simplicity” (朴素) to a young woman seems a bit off, but I truly can’t find a more fitting word. Nana’s family is probably fairly well-off (she’s an international student, after all), but her everyday dress is plain and natural — a match for my own bottom-up Costco style. There’s an advantage to simplicity: you can devote your whole mind to the things you consider important, with no distractions from anything else.

So, perhaps people who possess some or all of these qualities are the next Nanas we should be looking for.

What Challenges Should We Give Our Interns?

Looking back on Nana’s internship, we compressed what might have been two or three months of challenge into one month, and piled on top of that a lot of extra marketing-related work (recording videos, writing blogs). At the outset we hadn’t held out much hope, but the facts told us that with great power comes great responsibility the greater the pressure, the greater the accomplishment — appropriate, tiered work can yield unexpected output.

Nana’s main work consisted of several parts:

  1. Developing the app
  2. Video retrospectives on the process of building the app
  3. Written descriptions of what she learned while building.

Any one of these three would have been enough to overwhelm her, yet she completed all three at high quality and, on top of that, only spent a little more energy than doing just one (and gained far more fulfillment and satisfaction). Look closely at these three tasks — don’t they have a “spread a layer of soil, tamp it down, spread another layer” quality? The wholly unintended 2) and 3) became exquisite accompaniments to the grand feast that was 1). Inadvertently, we forced Nana to iterate in weekly cycles, living out a build (develop the app) – measure (make videos, explaining what she’d learned to others — the touchstone for whether she truly understood it) – learn (written summary) feedback loop, spiraling forward week after week.

Another benefit of doing all three at once is enhanced influence. An intern’s work is often a black box: the school and teachers know nothing beyond a piece of paper, and employers, when recruiting fresh graduates, see only cookie-cutter boilerplate along the lines of “worked on such-and-such project at this-or-that famous or not-so-famous company, using such-and-such technology, achieving such-and-such results.” No wonder one insider’s trick for screening résumés is “throw the stack with all your might; the three that fly farthest get the top three spots.” We inadvertently broke out of this constraint, turning the black box white through social media, so that the internship work of Nanas everywhere can be easily demonstrated and understood, strengthening their chances of standing out. Perhaps, after this stretch of experience, Nana will present the courses she’s taking and her personal growth in this very way too!

This precious learning experience with Nana has made me reflect on my past successes and failures in using interns. Going forward, we’ll work even better with our interns to design an interesting, challenging internship plan that lets them achieve self-realization.


Nana’s first three videos can be found below; the fourth will be released next week, so keep an eye on the ArcBlock official account for updates.

Thank you once again to our intern Nana. All tips received in the first two weeks of this article will go to Nana. If you’re interested in a blockchain internship with us in Seattle or Beijing, feel free to reach out — in person, by letter, or in a spirit of reciprocity that knows no bounds.

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

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

Arcblock’s Beijing Hackathon: Are You In?

Arcblock’s Beijing hackathon invites developers to explore blockchain, OCAP APIs, GraphQL, and Elixir through demos, talks, prizes, and a full day of building with our engineering team. Come hack, ask questions, and see how we’re simplifying blockchain app development.

程序人生 (2015–2019)4,161 chars · 9 min read