yceffort.
I dig into how the web works and share what I build and measure through writing and tools. These days I think about how developers who work with AI build judgment and learn.
This is the actual record of your browser loading this tab just now. The measurements never leave your browser.
Reading the record
Hi, I'm yceffort, a frontend engineer. I have been building software since 2014 and still work as a frontend engineer today. Across healthcare, donation, travel, and financial services, I have worked on everything from user interfaces to servers and deployment environments. While leading a frontend team, I built shared libraries and developer tools, and thought about how people work well together through code review and mentoring.
I want to know why code that used to work broke, and how far to trust a number that says something got faster. When the documentation does not explain it, I read the source code and the build output, then reproduce and measure it myself. On this blog I leave what I learned along the way, where I got it wrong, and the questions I still cannot answer.
What I pay attention to
- What happens beneath the framework. I look into React rendering, the Next.js cache, JavaScript modules, and how bundlers behave. I am drawn to problems that only make sense below the abstraction, like a singleton that was one module in the source but became two after the build.
- Performance and operations, confirmed by measurement. I follow bottlenecks from the browser and the network all the way to Node.js servers and Kubernetes deployments. I also build and run this blog myself, and check both the improvement and the limits of measurement, for example by comparing the cost of a service worker with real user data and experiments.
- Developer tools you can trust for years. I care about shared libraries, CLIs, package management, and supply chain security, and I weigh compatibility and maintenance cost as much as features and speed. Recently I wrote down what it took to match the original tool’s results while porting the Markdown linter I use every day to Rust.
- How developers who work with AI build judgment and learn. I use coding agents every day. I think about what to verify generated code with, and how developers learn judgment when they read less code. I write about my own experience with these tools and about what other developers tell me.
Writing and sharing
I have been recording what I learn and the mistakes I make on this blog since 2018, and I have carried the work of understanding and explaining technology into books as well. The books are published in Korean.
- Modern React Deep Dive, author
- npm Deep Dive, co-author
- Frontend Performance Optimization Deep Dive, author
- React Interview Guide, Korean translation
I am now writing an essay, Who Learns the Judgment That Remains (working title, in Korean), about where developers build their judgment when AI writes the code. I am refining the manuscript by looking back on my own experience and listening to other developers.
At DAN24, I gave a talk on optimizing the bundle size of web services. I also share what I covered in the books and on the blog through talks.
Tools I build as open source
I turn what bothered me in daily work into tools, and extend existing libraries for the environments I need them in. My interest is growing from browser compatibility and webview debugging to developer tools and desktop apps that help with everyday work.
- coldpath: A Rust CLI that traces JavaScript bundle bytes back to their original sources with source maps and V8 coverage. It separates code that runs on load from code that runs only on interaction, and produces bundle treemaps and pull request comparisons. Analysis runs offline, without Node.js or a browser.
- number-flow: A fork of barvian/number-flow that makes its number animations work in older browsers and webviews. It keeps the original API, adds a fallback engine built on requestAnimationFrame, and was verified on real legacy browsers.
- storage-inspector: A Lit web component for inspecting and editing localStorage and sessionStorage inside a webview. Each key gets a description and type from a schema, and values are validated as you edit them.
- rust-markdownlint: A Markdown linter written in Rust that aims to be compatible with markdownlint-cli2. Its diagnostics and auto-fixes were checked against the original tool, and it runs on the repositories I maintain.
- yc.clipboard: A macOS menu bar app for searching and reusing your clipboard history, including text, images, and files. It supports pinning, previews, and pasting back into the previous app.
Helping with code
Since 2016 I have served on the board of the nonprofit JUMP, helping with work automation and programming education. In 2021 I was a mentor at the Samsung Software Academy For Youth (SSAFY). I also spend time reducing repetitive work for the people I work with and helping others solve problems on their own.