Han Tang Lin · backend engineer in Taipei · former astronomer
- 🧑💻 Backend Supervisor at Pacston: technical lead on a FastAPI + PostgreSQL platform I architected end to end, leading a backend team of five
- 🔭 Previously an observational astronomer with two first-author papers, on M-dwarf stellar flares (AJ) and Type Ia supernova hosts (MNRAS)
- 🐛 Most useful where a live system is quietly wrong under concurrency: jobs that run three times, locks that aren't there, retries that multiply traffic, tokens nobody verifies
- 🎨 Off-hours: GLSL shaders, React Three Fiber and Blender models, all on my site
- 🌏 中文 · English · Français · 日本語
- 📈 1M+ requests / month across 195 REST endpoints over 44 tables; I wrote ~90% of its 44K production lines
- 🚀 p99 39.2 s → 1.0 s: moved a 37-second reconciliation off the request path behind a Postgres advisory lock; slow requests 880 → 19 per day
- 🔁 3× → exactly once: traced a triple-firing scheduled job to a trigger timeout colliding with AWS async retries
- 🌊 418× retry amplification shut down: 43K requests were fanning out into 18M Lambda invocations
- 🔍 N+1 hunting: 1,108 → 6 queries per request (12.3 s → 775 ms) and 244 → 3 (2.6 s → 210 ms) on core endpoints; primary API mean duration −48%, cold-start init −23%
More from production
- 🧯 Runaway job contained: production API p99 28.2 s → 9.4 s; 5xx on the affected endpoint 87% → 0%
- 🔐 JWT verification hardened: every token now checked for signature and expiry
- 🤝 100 PRs merged integrating 2,392 commits from 8 engineers; introduced the team's first CI quality gate and its uv + ruff toolchain
- 🔭 NCU TOM: target & observation manager in production at Lulin Observatory, built solo (FastAPI, PostgreSQL, Next.js). Rebuilt its light-curve plotting on canvas after benchmarking 15 charting libraries: DOM nodes 60,082 → 104 at 20k points · issue tracker
- ⚖️ sync-async-k8s-path: FastAPI sync vs async measured under Locust load, from CPU-pinned Docker Compose to Kubernetes. Async 512 vs sync 335 RPS, a connection-pool sweep from 167 to 642 RPS, and the single-pod breaking point at 5,000 users · interactive walkthrough
- 🤖 tylerastro.dev: my trilingual notebook for code, life and 推し活, with Tyler-bot, a streaming chat assistant on the Vercel AI SDK checked by an 80+ case pytest eval suite
- 🎤 Utano Track: 15,000+ fan timestamps from VTuber streams, turned into a clickable song index
- 🎶 Let's Sing Together: YouTube playback synced line by line to lyrics, for learning Japanese by singing along
- 🗺️ Folium Institute Map: the QS top-100 physics & astronomy institutes on one interactive world map
- 🛰️ Astronomy-FITS-examples: tools and demos for downloading science images from observatories
- ✨ Simultaneous Detection of Optical Flares of the Magnetically Active M-dwarf Wolf359, AJ 163, 164 (2022), my M.Sc. thesis
- 💥 A closer look at the host-galaxy environment of high-velocity Type Ia supernovae, MNRAS 531, 1988 (2024)
Backend · Python · FastAPI · Django · SQLAlchemy · Pydantic · AWS Chalice
Data · PostgreSQL · MySQL · DynamoDB · Elasticsearch
AWS · Lambda · API Gateway (REST & WebSockets) · Cognito · EventBridge · App Runner · Aurora · CloudWatch
Frontend · TypeScript · Next.js · React · React Three Fiber · Three.js
Tooling · Docker · GitHub Actions · uv · ruff · pytest · OpenAI & Anthropic APIs
- ⚾ Catcher in baseball, outfielder in softball
- 🎤 推し: 白玖ウタノ. Utano Track and her 3rd-anniversary site are my fan projects
- 🎮 Little Busters! and 📺 Angel Beats!, so Key soundtracks on repeat. "My Soul, Your Beats!" forever
🌐 tylerastro.dev · 💼 LinkedIn · ✍️ Medium · ✉️ tyler@tylerastro.dev · 📄 CV
