Mutation Testing: Testing the Quality of Your Tests
100% code coverage but bugs still slip through? Having tests doesn't mean having good tests. Here's how mutation testing reveals the real quality of your test suite.

Writing about development and technology.
100% code coverage but bugs still slip through? Having tests doesn't mean having good tests. Here's how mutation testing reveals the real quality of your test suite.

Adding English to a Korean-only blog with next-intl. Lessons from implementing i18n in Next.js App Router, including routing, message files, and Server Components.

I built a service and nobody came. How I implemented technical SEO in Next.js to drive organic traffic without a marketing budget.

TDD and BDD both share a 'tests first' philosophy but differ in focus and application. From the Red-Green-Refactor cycle to Gherkin syntax — a practical TypeScript comparison.

My service was down for 12 hours and I had no idea. How I built a minimal monitoring stack as a solo developer with free and low-cost tools.

That fear when you get your first code review? Everyone goes through it. A practical guide covering everything from writing review-friendly PRs to giving constructive feedback and building a healthy review culture.

I was tired of users reporting errors before I knew about them. How I set up Sentry in a Next.js project for real-time error tracking and alerting.
I've wasted hours with direct fetch mocks or vi.mock() on axios, only to find the mock drifted from the real API. MSW intercepts at the network level and eliminates that problem. Here's everything from setup to Vitest and Storybook integration.

Users found the broken signup before I did after a late-night deploy. How I set up Playwright E2E tests and integrated them into CI to prevent this.

Tests that inspect internal component state break on every refactor. Testing Library's core philosophy is to test only what the user actually does. Here's why getByRole is the best default, what separates userEvent from fireEvent, and the most common anti-patterns to avoid.

Frontend development blocked by unfinished APIs. MSW intercepts requests at the network level so you can build and test without a real backend.

Unit tests all green, but QA finds a bug in three clicks. That's the E2E gap. Here's everything you need to automate real browser scenarios with Playwright — from first test to CI integration.

My trial-and-error journey introducing frontend testing. Practical patterns for testing React components with Vitest and Testing Library.

Spent a whole night debugging because I confused vi.mock() and vi.spyOn(). Here's a practical deep dive into Vitest's advanced features — mocking strategies, snapshot testing, and why your coverage numbers might be lying to you.

My Kanban board built with HTML5 Drag and Drop worked everywhere except Naver Whale. Browser gestures hijack native drag events. dnd-kit's Pointer Events architecture bypasses this entirely.

Tried to contribute to an open source project but gave up because there was no README. That's when I realized the true value of good docs.

Setting up a new Mac took 2 days. With dotfiles and automation scripts, it now takes 30 minutes to get a fully configured dev environment.

Regex looked like alien language until I learned 20 practical patterns. Now text processing that took 50 lines fits in one.

Writing form validation from scratch led to edge case hell. React Hook Form + Zod is the optimal combination for type-safe forms.

Switched from Redux to Zustand and cut boilerplate by 90%. But using it properly requires understanding some key patterns.
