A Summer in Shenzhen
From May to August 2026 I was a Technical Product Management intern at Tencent in Shenzhen. After a year in Beijing on the NUS Overseas College programme, this was my first time working full-time in the Greater Bay Area, and it turned out to be the most hands-on product role I have had so far.
This post is my attempt to consolidate the summer: what I worked on, what I saw outside the office, and what I am taking with me.
The work
Three threads ran through the whole internship.
Agentic pipelines for certification content review. Tencent's certification programme sits on top of a large question bank and an even larger body of course material, and reviewing it by hand does not scale. I built agent pipelines that batch the review work, running many calls concurrently against internally hosted models so that a pass over the whole bank went from hours to minutes. Most of what I learnt about throughput, batching and cost came from this thread.
Redesigning the practical training labs. The team owns the hands-on cloud labs, and I owned the redesign, benchmarking against Google Skills and AWS Skill Builder and reworking how the labs are defined and sequenced into learning paths.
Alignment. A lot of the job was getting product, content, engineering and the certification stakeholders to agree on the same plan. That is less glamorous than the pipelines, but it is where most of the actual product management happened.
The tool stack I shared
On the side, I hosted a session of the team's internal AI sharing series and turned the notes into a small internal site: six tool cards and two concept pages. Read in order, they are one argument told as a stack. It started from a constraint. The same internally hosted model was metered through the company's coding assistants but free through the internal agent platform, and my personal quota was nearly gone. Each layer below is what I added to make free-channel AI usable at real workloads, and then to make it run without me.
1. Cost channel. Route everyday calls through the internal agent platform (agents, workspaces, knowledge base, skills, MCP) instead of the metered products. The real work was the agent's system prompt: environment fences (intranet and internet, never production), defensive security only, terse Chinese output, prefer MCP tools over driving internal web apps through a browser, cross-session memory, plan-then-track, and never commit on its own. The second piece was a usage report for the team lead. The platform's chat-history endpoint is per agent, paged at 50, with no token field, so a weekly report loops over agent IDs and aggregates by session, user, model and day.
2. Throughput: concurrent batching. Price and throughput are different axes. The free channel fixes price; concurrency fixes throughput. The pattern I first used in the certification review pipeline and then reused in a PPT-to-Markdown tool is asyncio.gather under a Semaphore of ten, with per-batch retry so one failure does not sink the run. Vision batches had to stay at three images or the workers ran out of memory. Over 160 slide images went from about fifty minutes serial to under two minutes. An agent SDK route was abandoned after silent hangs, and a test now asserts it is never imported again.
3. Token hygiene: rtk. Filter shell output before it reaches the model instead of asking the model to truncate afterwards. It cuts 60 to 90 percent of tokens from noisy commands like git log and test runs. The hook only wraps the Bash tool, so built-in file reads need an explicit rtk read.
4. Intent contracts: DOX. Hierarchical AGENTS.md files, child directories overriding parents, so an agent reads the local rules before editing anything. It is instructions, not a runtime: if the agent ignores it, nothing enforces it.
5. Output determinism: DESIGN.md, shadcn/ui, Next.js. For generated courseware, design tokens alone are not enough. DESIGN.md pins colour, type, spacing and radius. shadcn/ui pins component structure and accessibility. Next.js pins assembly: layouts, routes, TypeScript types. Fix all three layers and the model only composes, so two generations of the same page come out with the same skeleton.
6. Style contracts and the closed loop: Ultracite. One command installs a lint preset and generates agent configuration. The three layers matter more than the rules. Rules are soft constraints the model reads at session start. Hooks are hard constraints that run the fixer on the agent's post-write event. Skills are per-user method knowledge shared across repos. Rules and hooks are separate flags. DOX and Ultracite both emit AGENTS.md, so you merge them, intent first, style second.
7. Automation: Loop Engineering. Stop prompting; design the loop that prompts. Six primitives: scheduling, worktrees, skills, MCP connectors, maker/checker sub-agents, persistent state. Four loop types:
| Type | Trigger | Stops when | Fits |
|---|---|---|---|
| Turn-based | user prompt | model judges it done | short, one-off tasks |
| Goal-based | prompt plus a goal | an independent evaluator says done, or a round cap | verifiable exit conditions |
| Time-based | interval | cancelled or work finished | periodic work, polling external systems |
| Proactive | event or schedule, nobody in the loop | per-task goal met; the routine runs until killed | triage, migrations, dependency bumps |
Guardrails from running one against the site itself: cheap triage with early exit, a verifier that is a fresh agent and rejects by default, a cap of three fix attempts before escalating, one state file per loop, read-only scope first, a kill switch, and the rule that a deterministic command you already know is faster by hand than through a skill.
What the layers share
- Separate the axes. Price, throughput and context size are three problems with three tools. Mixing them is how people conclude that AI is too expensive or too slow.
- Filter before, do not repair after. rtk pre-filters output, hooks fix files the second they land, rules front-load conventions. In every layer the fix moves earlier in the pipeline.
- Contracts live as files the agent reads. Intent in AGENTS.md, style in the lint preset, design in DESIGN.md, project state in STATE.md. Humans write them, tools enforce them, agents read them.
- Soft, hard, reusable. Rules, hooks, skills has the same shape as loop engineering's skills, verifier, state: a soft instruction layer, a hard enforcement layer, and a knowledge layer that compounds across runs.
- Never self-grade. Goal loops use a separate evaluator, verifiers reject by default, and the certification review pipeline is the same maker/checker idea applied to content.
- Reserve the model for judgment. Scripts for deterministic work, hand-typed commands for the ones you know, the model for exploration, orchestration and unattended runs.
Life in Shenzhen
The office routine settled quickly: the canteen tray, the lobby screen in the morning, Shenzhen Bay at night. I stayed at Lanson Place near Shenzhen Bay, close enough to walk to Talent Park after work and watch the skyline light show from the waterfront, or keep going to the beach. On one weekend I took the train up to Guangzhou and had breakfast looking at Canton Tower, then watched it light up after dark.
Two days of company visits
In mid-July I joined the 2026 Yale China Trip delegation for two days of company visits around Shenzhen.
Salubris (信立泰) in the IBIP biomedical park showed us how a chronic-disease pharma company thinks about its product tree.
XtalPi (晶泰科技) was the highlight of day one. Their pitch is AI-driven drug discovery, and the part that stayed with me was the automated wet lab: robot arms and shuttles running experiments around the clock while the models decide what to try next.
Galbot (银河通用) walked us through the evolution from prototype to their G1 V2.0 humanoid, then let the robots do the talking.
Day two was at Shenzhen InnoX Academy (深圳科创学院), a hard-tech incubator that was hosting its 2026 medical-tech founders camp. The wall of "systematic empowerment" steps, from talent pool to supply chain to go-to-market, is the most concrete description of how Shenzhen turns research into products that I have seen anywhere.
WAIC 2026 in Shanghai
A few days later I flew to Shanghai for the World Artificial Intelligence Conference. Humanoids were everywhere: AgiBot's partner wall, AheadForm's uncannily expressive heads, Fullive.ai, and a robot football pitch that drew a bigger crowd than most keynotes.
What I am taking with me
- Zero-cost experimentation changes behaviour. The same model behind a metered channel makes people hesitate to run something twice. Behind a free channel, they run it a hundred times. A lot of "AI is unreliable" is really "we did not try enough times".
- Move from writing prompts to designing systems. A one-off prompt solves a one-off problem. Rules, hooks, skills and a scheduled loop keep solving it after you leave.
- Write conventions for humans and models alike. Once the team and the agents share the same AGENTS.md, design spec and lint preset, code review goes back to being about logic instead of style.
