Skip to content
GGemini Kim
  • Home
  • Articles
  • About
KO/EN

Articles

Notes, essays, and observations.

  1. April 19, 2026

    Split AI Development Work by Context, Device, and Risk

    Combine IDE review, desktop agents, and a remote mobile workflow by assigning each task according to context size, inspection needs, and operational risk.

    • Backend Engineering
    • Delivery & Evolution
    • Career & Learning
    Read ↗
  2. April 12, 2026

    Evolve Development Templates from Observed AI Workflows

    Update development templates from repeated AI-assisted use, while keeping validation explicit and project-specific instructions out of universal defaults.

    • Backend Engineering
    • Delivery & Evolution
    • Career & Learning
    Read ↗
  3. April 5, 2026

    Store Object Keys, Not File URLs

    Design file uploads around stable object keys, server-composed delivery URLs, collision-resistant names, and separately retained original filenames.

    • Backend Engineering
    • Data & Persistence
    • Delivery & Evolution
    Read ↗
  4. March 29, 2026

    Split AI Changes into Pull Requests Teammates Can Review

    Keep AI-generated code accountable by narrowing scope, rebuilding coherent commits, and splitting risky changes into pull requests teammates can understand.

    • Testing & Quality
    • Delivery & Evolution
    • Collaboration
    Read ↗
  5. March 22, 2026

    AI Output Is Not the Same as Engineering Productivity

    AI agents can raise output, but complex work still depends on context, memory, judgment, and the self-directed thinking of strong teammates.

    • Backend Engineering
    • Career & Learning
    • Collaboration
    Read ↗
  6. March 15, 2026

    Judge AI Practices by Real Workplace Utility, Not Buzzwords

    Test AI practices in real work instead of chasing labels, and use firsthand experience to separate durable methods from marketing-driven fear.

    • Backend Engineering
    • Career & Learning
    Read ↗
  7. March 8, 2026

    Build Career Density, Not Just Study Time

    Career growth comes less from unrelated study during work hours than from building dense, explainable experience through meaningful company work.

    • Career & Learning
    Read ↗
  8. March 1, 2026

    When to Split Front-Office and Back-Office Systems

    Decide whether front- and back-office systems belong together by comparing purpose, lifecycle, feature overlap, team workflow, and operational cost.

    • Architecture
    • Collaboration
    Read ↗
  9. February 22, 2026

    How to Evaluate a Bootcamp Beyond Its Brand

    Evaluate a bootcamp through concrete learning goals, mentor capability, credible outcomes, practical limits, and whether the price is justified.

    • Career & Learning
    Read ↗
  10. February 15, 2026

    Choosing Project Structure and Tech Stacks in the AI Era

    Choose project boundaries and technology stacks by team size, existing expertise, reviewability, and failure cost—not AI output speed alone.

    • Architecture
    • Backend Engineering
    Read ↗
  11. February 8, 2026

    Simplify Modules and Layers for AI-Assisted Greenfield Work

    Explore fewer modules, interfaces, and layers for AI-assisted greenfield work, while protecting clarity, quality, and incremental treatment of legacy systems.

    • Architecture
    • Backend Engineering
    • Career & Learning
    Read ↗
  12. February 1, 2026

    Make Overwork and Leadership Failures Visible

    Turn engineering overload into visible work, shared evidence, and scoped escalation so teams can negotiate resources and expose recurring leadership failures.

    • Delivery & Evolution
    • Collaboration
    Read ↗
  13. January 25, 2026

    Model Drafts by Meaning: Status or Separate Storage?

    Choose a status for ordinary lifecycle stages and separate versioned storage for distinct preparatory data, based on domain meaning and compatibility cost.

    • Domain Modeling
    • Data & Persistence
    Read ↗
  14. January 18, 2026

    Break Sequential ID Links in Anonymous Services

    Use independent random identifiers for identity-related records to remove obvious sequential links, while recognizing that UUIDs alone cannot guarantee anonymity.

    • Architecture
    • Data & Persistence
    Read ↗
  15. January 11, 2026

    Hide Preview Content at the Server Boundary, Not in CSS

    Do not ship gated text and merely blur it in the client; transform previews at the server response boundary while preserving an honest layout cue.

    • API Design
    Read ↗
  16. January 4, 2026

    Coordinate Account Deletion Cleanup Without a Message Broker

    For small services, collect domain-specific cleanup handlers behind one interface so account deletion stays explicit without extra messaging infrastructure.

    • Architecture
    • Backend Engineering
    Read ↗
  17. December 14, 2025

    Split All-in-One Libraries into Composable Dependency Modules

    Avoid hidden infrastructure, runtime cost, and dependency conflicts by splitting company libraries into modules each service can understand and compose deliberately.

    • Architecture
    • Backend Engineering
    • Reliability & Operations
    Read ↗
  18. December 7, 2025

    Server-Driven API Responses for Mobile App Compatibility

    Keep changing display policy and experiments server-side for old app versions, but isolate that translation at the API boundary to protect the domain model.

    • Architecture
    • Backend Engineering
    • API Design
    Read ↗
  19. November 30, 2025

    Turn an Unusual Developer Background into an Interview Strength

    Keep your full work history honest, then tailor project emphasis to each role so adjacent experience gives interviewers credible reasons to hire you.

    • Career & Learning
    • Collaboration
    Read ↗
  20. November 23, 2025

    Keep a Small Documentation Set the Team Can Trust

    Reduce documentation sprawl by maintaining a trusted core of policy, concepts, system flows, and API contracts with clear ownership and onboarding feedback.

    • Architecture
    • Delivery & Evolution
    • Collaboration
    Read ↗
  21. November 16, 2025

    Change Engineering Culture Through Trust and Small Wins

    Learn a new organization before prescribing fixes, earn trust through delivery, and let visible gains from tests and shared policy work spread beyond your team.

    • Testing & Quality
    • Career & Learning
    • Collaboration
    Read ↗
  22. November 9, 2025

    Design Data Relationships for Organizational Reality

    Prefer simple relationship cardinality, then account for observed requirement churn, decision habits, and deadline constraints instead of predicting every future change.

    • Architecture
    • Domain Modeling
    • Collaboration
    Read ↗
  23. November 2, 2025

    Turn Tacit Engineering Rules into Living Team Conventions

    Document the engineering rules teammates carry in their heads, explain why they exist, permit team overrides, and keep them alive through review and onboarding.

    • Architecture
    • Career & Learning
    • Collaboration
    Read ↗
  24. October 26, 2025

    Avoid the Admin Common Module That Owns Every Domain

    Keep admin features from reversing domain dependencies. Preserve service boundaries and accept small duplication while admin requirements continue to diverge.

    • Architecture
    • Backend Engineering
    • Domain Modeling
    Read ↗
  25. October 19, 2025

    Build Engineering Career Range Across Company Sizes

    Match company scale to your long-term path: broaden operating and leadership experience when needed, or preserve focus when deep technical craft is the goal.

    • Career & Learning
    • Collaboration
    Read ↗
  26. October 12, 2025

    Oracle to MySQL Migration with Adapters, Dual Writes, and Flags

    A reversible Oracle-to-MySQL migration using compatible adapters, dormant deployments, dual writes, tested switches, deliberate rollback, and legacy cleanup.

    • Data & Persistence
    • Testing & Quality
    • Reliability & Operations
    • Delivery & Evolution
    Read ↗
  27. October 5, 2025

    Choose Your Next Developer Job for Experience, Not Salary Alone

    Compare developer jobs by the domains, operating problems, and responsibilities you can turn into lasting capability, while respecting real financial constraints.

    • Reliability & Operations
    • Career & Learning
    Read ↗
  28. September 28, 2025

    Engineering Leadership Starts Before the Title

    Prepare for engineering leadership by already handling reviews, incidents, broad problems, and peer trust before an organization adds the formal title.

    • Career & Learning
    • Collaboration
    Read ↗
  29. September 21, 2025

    Design Your Developer Career Around Strengths and Experiments

    Map your strongest capabilities, test different kinds of engineering work, and keep revising a future direction from evidence rather than vague ambition.

    • Career & Learning
    • Collaboration
    Read ↗
  30. September 14, 2025

    Code Review Health Is a Trend, Not a Comment Count

    Use automation and draft pull requests to align teammates early, then track whether repeated feedback declines as shared conventions become real practice.

    • Delivery & Evolution
    • Career & Learning
    • Collaboration
    Read ↗
  31. September 7, 2025

    Account Deletion Data: Retention, Separation, and Recovery Design

    Design deleted-account data around verified retention rules, isolated storage, encryption, expiry, and the operational flows that may still need recovery.

    • Data & Persistence
    • Reliability & Operations
    • Delivery & Evolution
    Read ↗
  32. August 31, 2025

    Java Optional Rules: Keep Absence at Data Boundaries

    Use Java Optional where a missing return value gives callers a real choice, while keeping fields, parameters, and trusted internal flows explicit.

    • Architecture
    • Backend Engineering
    Read ↗
  33. August 24, 2025

    How to Break Long Legacy Migrations into Small, Deployable Steps

    Break exhausting legacy work into small development, verification, and deployment increments that create feedback before a perfect rewrite.

    • Testing & Quality
    • Delivery & Evolution
    • Collaboration
    Read ↗
  34. August 17, 2025

    Discover Domain Concepts from Information and Behavior

    Use information and process or behavior from case-dependent viewpoints to distinguish transport events from domain concepts.

    • Architecture
    • Domain Modeling
    • Data & Persistence
    Read ↗
  35. August 10, 2025

    Why Domain Concepts Should Not Mirror Database Tables

    Model business importance, hierarchy, and behavior instead of creating one domain object and repository for every persistence table.

    • Architecture
    • Domain Modeling
    • Data & Persistence
    Read ↗
  36. August 3, 2025

    Developer Testing Responsibility Before QA Handoff

    Verify expected behavior before QA handoff so testers can pursue edge cases, reduce release loops, and build stronger cross-functional trust.

    • Testing & Quality
    • Delivery & Evolution
    • Collaboration
    Read ↗
  37. July 27, 2025

    Calculate the Full Cost of a New Programming Language

    Evaluate language adoption through hiring, learning, observability, shared libraries, integration, and maintenance—not technical fit alone.

    • Architecture
    • Reliability & Operations
    • Collaboration
    Read ↗
  38. July 20, 2025

    Prove Domain Knowledge Through Real Problem Solving

    Domain expertise grows through real operations, policy, and cross-team problems. Show it through concrete problem solving, not terminology alone.

    • Domain Modeling
    • Career & Learning
    • Collaboration
    Read ↗
  39. July 13, 2025

    Improve a Bad Legacy Schema Behind a Code Boundary

    Hide cryptic tables behind repositories and meaningful types, regain control in code, then approach improvements to the legacy database.

    • Architecture
    • Data & Persistence
    • Delivery & Evolution
    Read ↗
  40. July 6, 2025

    Design Distributed Tracing and Safe Production Logs Together

    Correlate requests across services while controlling log volume, masking sensitive fields, limiting access, and retaining only useful operational data.

    • Backend Engineering
    • Data & Persistence
    • Reliability & Operations
    Read ↗
  41. June 29, 2025

    Why Pagination Count Queries Slow Down Databases

    Understand why exact totals can cost more than limited queries and when to consider slices, cached metadata, estimates, or product changes.

    • Backend Engineering
    • Data & Persistence
    • Performance & Scale
    Read ↗
  42. June 22, 2025

    Split Batch Ingestion from Processing to Reduce Retry Cost

    Stage external data, rerun internal transformations without repeating provider calls, and reduce the traffic and recovery costs of oversized batch jobs.

    • Data & Persistence
    • Reliability & Operations
    • Delivery & Evolution
    Read ↗
  43. June 15, 2025

    Refactor Spaghetti Code with Characterization Tests

    Capture legacy behavior with broad API tests, refactor behind the safety net, and deploy small reversible changes while coverage grows.

    • Architecture
    • Testing & Quality
    • Delivery & Evolution
    Read ↗
  44. June 8, 2025

    Vibe Coding Still Requires Engineering Judgment

    Use AI coding tools without surrendering problem definition, code review, quality standards, or the technical knowledge needed to verify results.

    • Backend Engineering
    • Testing & Quality
    • Career & Learning
    Read ↗
  45. June 1, 2025

    Agile Does Not Mean No Documentation

    Agile values working software without banning documentation. Write what teams, continuity, security, and regulated operations genuinely require.

    • Delivery & Evolution
    • Career & Learning
    • Collaboration
    Read ↗
  46. May 25, 2025

    Your Company Provides Experience, Not Developer Growth

    Developer growth comes from turning work, books, projects, and communities into personal judgment—not waiting for an employer to do it.

    • Career & Learning
    • Collaboration
    Read ↗
  47. May 18, 2025

    Reduce Account-to-Profile Linkability in Anonymous Services

    Explore identifier separation, disposable mapping keys, minimal retention, and the recovery tradeoffs behind a privacy-oriented account model.

    • Architecture
    • Backend Engineering
    • Data & Persistence
    Read ↗
  48. May 11, 2025

    Keep Guest Data Masking in the Presentation Layer

    Learn why guest masking and author flags belong at the presentation boundary, keeping domain logic clean while preventing raw data exposure.

    • Architecture
    • Backend Engineering
    • API Design
    Read ↗
  49. May 4, 2025

    What Senior Engineers Owe the Developers Who Come Next

    Seniority is more than tenure: learn how maintainable code, tests, guidance, and team continuity define responsible senior engineering.

    • Testing & Quality
    • Career & Learning
    • Collaboration
    Read ↗
  50. April 27, 2025

    Separate Core Data from Like-Count Aggregates

    Design scalable like-based ranking with separate aggregates, explicit freshness goals, async updates, reconciliation, and search boundaries that follow real demand.

    • Architecture
    • Data & Persistence
    • Reliability & Operations
    • Performance & Scale
    Read ↗
  51. April 20, 2025

    Use ID Range Gaps for Safer Database Rollbacks

    Separate legacy and new identifier ranges to prevent rollback collisions, simplify reverse migration, and make operational traffic easier to trace.

    • Data & Persistence
    • Reliability & Operations
    • Delivery & Evolution
    Read ↗
  52. April 13, 2025

    Split God Query Methods by Purpose

    Replace universal dynamic queries with purpose-specific methods, migrate callers incrementally, and shrink the side-effect surface before deeper refactoring.

    • Backend Engineering
    • Testing & Quality
    • Delivery & Evolution
    Read ↗
  53. April 6, 2025

    How Experienced Entry-Level Developers Can Stand Out

    Prepare prior work for interviews by explaining what you did, the problem you faced, how you approached it, the solution you tried, and the action you took.

    • Career & Learning
    Read ↗
  54. March 30, 2025

    Legacy Cleanup Starts with Safe Dead-Code Removal

    Shrink legacy systems safely by combining runtime evidence, database checks, API consumer verification, and incremental dead-code deletion.

    • Testing & Quality
    • Reliability & Operations
    • Delivery & Evolution
    Read ↗
  55. March 23, 2025

    Modernize Legacy Systems with Small Deployments

    Reduce modernization risk with small verified deployments, practical rollback boundaries, visible progress, and value that survives a paused project.

    • Testing & Quality
    • Reliability & Operations
    • Delivery & Evolution
    Read ↗
  56. March 16, 2025

    Solve Small Problems with Proportional Engineering

    Measure what existing systems can do, solve small problems proportionally, and add caches or distributed infrastructure only when evidence demands it.

    • Architecture
    • Reliability & Operations
    • Performance & Scale
    • Career & Learning
    Read ↗
  57. March 9, 2025

    Find Domain Boundaries Through Concept Lifecycles

    Compare creation, reads, changes, and deletion to judge cohesion, coupling, and boundaries among products, orders, payments, shipping, and settlement.

    • Architecture
    • Domain Modeling
    • Data & Persistence
    Read ↗
  58. March 2, 2025

    Paginated Like Counts: Start with a Simple Query

    Count likes for the current page with a bounded query before adding counter columns or Redis and their added management costs.

    • Backend Engineering
    • Data & Persistence
    • Performance & Scale
    Read ↗
  59. February 23, 2025

    Separate Domain Learning from Technology Experiments

    Use familiar tools to launch domain projects, and isolate unfamiliar infrastructure in minimal experiments with focused performance tests.

    • Performance & Scale
    • Delivery & Evolution
    • Career & Learning
    Read ↗
  60. February 16, 2025

    Developer Growth Starts with Finishing the Work

    Build professional trust by completing valuable work within a quality baseline, then refactor, learn, and prepare deliberately for the next step.

    • Delivery & Evolution
    • Career & Learning
    • Collaboration
    Read ↗
  61. February 9, 2025

    Protect Order Snapshots with Soft Delete and Boundaries

    Separate current products from immutable order snapshots, preserve refund history, and use status transitions or archives before destructive deletion.

    • Domain Modeling
    • Data & Persistence
    • Reliability & Operations
    Read ↗
  62. February 2, 2025

    Keep Core Entities Light by Delaying ORM Associations

    Decide ORM associations by lifecycle and responsibility, separating searchable supporting data so core entities stay focused and adaptable.

    • Architecture
    • Domain Modeling
    • Data & Persistence
    Read ↗
  63. January 26, 2025

    Architecture Rules Need Team Judgment Before Automation

    Balance automated layer enforcement against review capacity, repository scale, developer growth, and a team's need to reason about architecture.

    • Architecture
    • Testing & Quality
    • Collaboration
    Read ↗
  64. January 19, 2025

    Translate Exceptions at Module Boundaries

    Keep implementation exceptions inside their modules and define explicit translation boundaries that prevent dependencies from leaking upward.

    • Architecture
    • Backend Engineering
    • API Design
    Read ↗
  65. January 12, 2025

    Why Manager and Processor Classes Are Refactoring Signals

    Use vague class names as code-smell signals, then narrow responsibilities and right-size layers without denying necessary transitional design.

    • Architecture
    • Delivery & Evolution
    Read ↗
  66. January 5, 2025

    Swagger vs REST Docs: Choose API Documentation by Context

    Compare Swagger and REST Docs by test enforcement, code intrusion, customization, and a pragmatic migration path for legacy APIs.

    • API Design
    • Testing & Quality
    • Delivery & Evolution
    Read ↗
  67. December 28, 2024

    Reader and Writer Are Options, Not Architecture Rules

    Choose Reader, Writer, and tool-layer boundaries from code size, domain distance, legacy constraints, and team conventions—not imitation.

    • Architecture
    Read ↗
  68. December 21, 2024

    The Common Module Trap: Organize Code Around Concrete Capabilities

    Delay common modules until ownership is clear, and organize logging, exceptions, and shared protocols around concrete capabilities instead.

    • Architecture
    • Testing & Quality
    Read ↗
  69. December 15, 2024

    Join the Team Before You Try to Change It

    Adapt to a new engineering team through timely questions, visible progress, early review, and small evidence-based changes after trust is earned.

    • Career & Learning
    • Collaboration
    Read ↗
  70. December 8, 2024

    How to Break Up a Giant Service Class Without Guesswork

    Split an oversized service by mapping concepts, tracing responsibilities, testing boundaries, and comparing concrete refactoring options.

    • Architecture
    • Testing & Quality
    Read ↗
  71. December 1, 2024

    Keep Operational Tables Clean by Building a Separate Query Model

    Design operational tables around business concepts, then serve complex history and admin searches from a separate query model.

    • Architecture
    • Data & Persistence
    Read ↗
  72. November 24, 2024

    Enums or Code Tables? Let the Rate of Change Decide

    Use enums for stable values and focused tables for frequently changing ones without turning one common-code table into a dumping ground.

    • Domain Modeling
    • Data & Persistence
    Read ↗
  73. November 18, 2024

    One Database, Separate Boundaries: Controlling Data Access by Domain

    How separate entity and repository boundaries can protect core rules from integration code even when both areas share one database table.

    • Architecture
    • Domain Modeling
    • Data & Persistence
    Read ↗
  74. November 11, 2024

    Append, Don’t Overwrite: Designing Immutable Operational Data

    An append-only repayment example that makes history and synchronization clearer, along with the storage and query costs it introduces.

    • Data & Persistence
    • Reliability & Operations
    Read ↗
  75. November 4, 2024

    What a Utility Bill Can Teach Us About Domain Modeling

    How a utility bill revealed a missing delinquency concept in a repayment model and why everyday artifacts can guide software design.

    • Architecture
    • Domain Modeling
    • Career & Learning
    Read ↗
  76. October 28, 2024

    Rank Your Domain Concepts Before You Spend Design Effort

    Identify a small first tier of domain concepts, separate supporting flows, and spend limited design time on the service's center.

    • Architecture
    • Domain Modeling
    • Career & Learning
    Read ↗
  77. October 22, 2024

    Experience, Repetition, and the Developer Who Keeps Growing

    How varied experience, repeated attempts, and business awareness help developers solve unfamiliar problems and keep improving.

    • Career & Learning
    Read ↗
  78. October 15, 2024

    Before Fixing Circular Dependencies, Fix the Domain Model

    Resolve confusing ownership and concept boundaries before using interfaces or dependency inversion to treat an apparent circular reference.

    • Architecture
    • Backend Engineering
    • Domain Modeling
    Read ↗
  79. October 8, 2024

    Create a Deliberate Messy Boundary to Keep the Core Clean

    Contain unavoidable complexity in an explicit outer boundary so limited engineering time can protect the system's core concepts.

    • Architecture
    • Testing & Quality
    Read ↗
  80. October 1, 2024

    Nullable or Zero? Choosing a Kotlin JPA Entity ID Strategy

    Compare nullable and zero-valued numeric IDs for Kotlin JPA entities, including new-entity detection, ambiguity, and verification.

    • Backend Engineering
    • Data & Persistence
    Read ↗
  81. September 25, 2024

    CS Knowledge Becomes Valuable When It Solves Real Problems

    Learn computer science through real engineering problems, then show the reasoning and improvements it made possible in your work.

    • Career & Learning
    Read ↗
  82. September 18, 2024

    Layering That Teammates Can Understand—and the Build Can Enforce

    Define stable layer roles, constrain optional upper layers, and automate checks only when a team needs stronger enforcement.

    • Architecture
    • Testing & Quality
    Read ↗
  83. September 11, 2024

    Turn Production Incidents into Shared Domain Knowledge

    Use incident reviews, working notes, concept maps, and rotated operations to reduce domain knowledge gaps across a software team.

    • Domain Modeling
    • Reliability & Operations
    • Collaboration
    Read ↗
  84. September 4, 2024

    One Project, Many Deployables: Drawing Boundaries by Runtime Role

    Separate public, admin, batch, and operations workloads into runnable applications without splitting the whole codebase into separate projects too early.

    • Architecture
    • Backend Engineering
    • Delivery & Evolution
    Read ↗
  85. August 29, 2024

    Name Readers, Finders, and Searchers by Behavior

    Distinguish Reader, Finder, and Searcher classes by direct reads, added filtering, and composite searches rather than result count.

    • Architecture
    • Backend Engineering
    • Testing & Quality
    Read ↗
  86. August 22, 2024

    Measure Before Replacing Outbox Polling

    Evaluate outbox polling with realistic load tests, then consider a simpler application-level delivery path before adopting log tailing.

    • Architecture
    • Domain Modeling
    • Performance & Scale
    Read ↗
  87. August 15, 2024

    Publish Events Where the Business Flow Is Visible

    Place event publication in the layer that understands the completed business action, while keeping implementation-specific cases explicit.

    • Architecture
    • Domain Modeling
    Read ↗
  88. August 9, 2024

    Compose My Page Data Without Inventing a My Domain

    Build My page summaries through a dedicated composition layer while keeping user, order, and product responsibilities in their proper domains.

    • Architecture
    • Backend Engineering
    • API Design
    Read ↗
  89. August 2, 2024

    Modules, Layers, and Architecture Are Different Decisions

    Separate module boundaries from code-level layers and architectural style, then extract modules only when implementation needs stronger constraints.

    • Architecture
    Read ↗
  90. July 26, 2024

    Earn Your Interfaces: Abstraction After Evidence

    Start with concrete code, extract interfaces from proven variation, and keep one-to-one abstractions only when they create a real boundary.

    • Architecture
    • Testing & Quality
    Read ↗
  91. July 19, 2024

    Choose Hexagonal Architecture for a Reason

    Choose hexagonal architecture when protocols, isolation, scale, or likely growth justify its extra structure—not because the label signals skill.

    • Architecture
    Read ↗
  92. July 13, 2024

    Track Database Changes with the Work That Ships Them

    Collect database changes with the issue and PR that need them, test them in development, and hand off the final release set before code deployment.

    • Data & Persistence
    • Reliability & Operations
    • Delivery & Evolution
    Read ↗
  93. July 6, 2024

    Authorization Without Redundant Reads

    Resolve the logged-in user once, keep access checks focused, and separate system-wide administration from channel-level permissions.

    • Architecture
    • API Design
    • Testing & Quality
    Read ↗
  94. June 29, 2024

    Design for Change with Core Ownership and Surrogate Keys

    Centralize a shared registration rule in the core, escalate isolation only when needed, and keep changing business uniqueness out of the primary key.

    • Architecture
    • Data & Persistence
    Read ↗
  95. June 22, 2024

    Why a My Page Is Not a Domain

    A My Page is a client-facing view, not a business domain. Keep orders, products, and coupons with their real owners and combine them at the boundary.

    • Backend Engineering
    • Domain Modeling
    • API Design
    Read ↗
  96. June 16, 2024

    Software Is Not Done Until It Is Deployed

    Stale pull requests and delayed releases make changes harder to review, deploy, diagnose, and roll back. Keep the path to production short and observable.

    • Delivery & Evolution
    Read ↗
  97. June 9, 2024

    Separate Shared Counts from Personalized Cache State

    Compose a reaction status from reusable queries, then cache the shared count without leaking one member’s personalized state to everyone else.

    • Architecture
    • Performance & Scale
    Read ↗
  98. June 2, 2024

    What Repeated Failure Teaches a Developer Career

    Career failures become useful when they change how you verify opportunities, value trusted referrals, and revise the rules you made from earlier setbacks.

    • Reliability & Operations
    • Career & Learning
    Read ↗
  99. May 26, 2024

    One Read Model for Guests and Members

    Return public reaction counts and member-specific state through one read flow while keeping optional identity distinct from required authentication.

    • Architecture
    • API Design
    Read ↗
  100. May 20, 2024

    Rebuild First, Migrate Second

    Design a replacement system around the problems it must solve, then handle legacy data through explicit migration mappings and retirement conditions.

    • Architecture
    • Data & Persistence
    • Delivery & Evolution
    Read ↗
  101. May 13, 2024

    Modeling Reactions from Requirements to Scale

    Turn a vague like-button request into a reaction model by clarifying policy, estimating data growth, and planning when count queries must change.

    • Architecture
    • Data & Persistence
    • Performance & Scale
    Read ↗
  102. May 6, 2024

    Designing Domain Models Beyond the Shape of the UI

    A tree-shaped API does not require a tree-shaped domain. Keep the client contract at the presentation boundary and compose it from internal concepts.

    • Architecture
    • Backend Engineering
    • API Design
    Read ↗
  103. April 30, 2024

    Put Logic Where Change Is Cheapest: Client vs. Server

    Place display-only work near the UI, but centralize meaningful or changing values when multiple clients and shipped app versions make updates expensive.

    • API Design
    • Delivery & Evolution
    Read ↗
  104. April 23, 2024

    Don't Distort Production Code Just to Make Tests Easier

    Change production code when its behavior becomes clearer or legacy code needs a testing seam—not merely to expose values or methods that only tests use.

    • Testing & Quality
    • Delivery & Evolution
    Read ↗
  105. April 16, 2024

    Modernize Legacy Systems Gradually—and Treat Caches as Operations

    Choose legacy boundaries carefully, change them in small steps, and add a shared cache only after DB work and deployment failure modes are understood.

    • Reliability & Operations
    • Performance & Scale
    • Delivery & Evolution
    Read ↗
  106. April 9, 2024

    Reversible Design Is the Antidote to Overengineering

    Build the requirement in front of you, look only a little beyond it, and keep speculative structures cheap to expand, remove, or replace.

    • Architecture
    • Data & Persistence
    Read ↗
  107. April 3, 2024

    Win Technical Arguments with Small Proofs, Not Opinions

    Diagnose why a proposal is blocked, build a small proof, strengthen your reasoning, understand the opposing case, and treat new technology as company risk.

    • Architecture
    • Collaboration
    Read ↗
  108. March 27, 2024

    A Practical Entry Strategy for a Frozen Junior Developer Market

    In a tight 2024 hiring market, broaden the first-company search, turn real work into problem-solving evidence, and show reasoning rather than a technology list.

    • Career & Learning
    Read ↗
  109. March 20, 2024

    Build APIs for Clarity, Not REST Purity

    Use REST ideas where they improve an HTTP contract, but let client clarity, team consistency, domain boundaries, and change cost decide the API.

    • API Design
    Read ↗
  110. March 13, 2024

    Validate at the Boundary, Simplify the Core

    Turn API input into complete business values at the presentation boundary, keep nulls out of inner flows, and validate stored data when it enters the system.

    • Architecture
    • API Design
    Read ↗
  111. March 7, 2024

    From SI to Product Development: Turn Job Requirements into a Learning Plan

    A move from contract work to a product team depended on help and luck; the repeatable strategy is to study target job requirements and build relevant experience.

    • Career & Learning
    Read ↗
  112. February 29, 2024

    Your First Test Can Be Messy—Refactor It Later

    Start with the test that proves the behavior you care about, mock enough to make it run, and improve test design through repeated use and review.

    • Backend Engineering
    • Testing & Quality
    Read ↗
  113. February 22, 2024

    Keep API Request Models Out of the Core Domain

    Convert external request objects into business-owned values at the presentation boundary so the API depends inward and the core never depends back.

    • Architecture
    • Backend Engineering
    • API Design
    Read ↗
  114. February 15, 2024

    Design Performance Tests from Real Traffic Shapes

    Estimate volume and arrival patterns before choosing a load test, add deliberate headroom, and require evidence only where traffic risk justifies it.

    • Testing & Quality
    • Reliability & Operations
    • Performance & Scale
    Read ↗
  115. February 9, 2024

    Foreign Keys Are an Operational Tradeoff, Not a Rule

    Choose foreign keys, indexes, and ORM mappings from integrity needs, incident response, deployment practice, and who operates the database.

    • Backend Engineering
    • Data & Persistence
    • Reliability & Operations
    Read ↗
  116. February 2, 2024

    Give Cross-Domain Behavior to the Domain That Owns It

    Before placing a caller-owned interface across modules, identify which domain owns the action and let callers depend on that capability.

    • Architecture
    • Backend Engineering
    • Domain Modeling
    Read ↗
  117. January 26, 2024

    Who Owns the Enum? Dependency Design Across Domain Modules

    Put a business enum with its domain, let storage depend inward, and use a small shared enum module only while the domain boundary is still emerging.

    • Architecture
    • Backend Engineering
    Read ↗
  118. January 19, 2024

    Provider Identity and Authentication Boundaries for Platform APIs

    How a small platform API resolves provider keys into a domain identity, separates tenant data, and chooses an authentication boundary that fits its scale.

    • Architecture
    • Backend Engineering
    • API Design
    Read ↗
  119. January 13, 2024

    Where Cross-Domain Coordination Code Belongs

    Use business ownership, cohesion, imports, and a package-move experiment to place code that coordinates a primary action with another domain's rule.

    • Architecture
    • Domain Modeling
    Read ↗
  120. January 6, 2024

    Domain Models First: A Conservative Approach to JPA Associations

    A cautious way to map JPA entities: start with IDs, add associations only when lifecycles truly align, and model business concepts independently.

    • Backend Engineering
    • Domain Modeling
    Read ↗
  121. December 9, 2023

    You Can Practice High-Traffic Engineering Without Real Traffic

    Build and operate a small service, create load deliberately, and show how you found and fixed bottlenecks without pretending a load test equals production experience.

    • Backend Engineering
    • Performance & Scale
    • Career & Learning
    Read ↗
  122. December 4, 2023

    Reliable Database Tests Without a Shared Test Database

    Choose mocks, an in-memory database, Testcontainers, or a real database by the failure you need to catch, while keeping ordinary tests isolated from shared infrastructure.

    • Backend Engineering
    • Data & Persistence
    • Testing & Quality
    Read ↗
  123. November 30, 2023

    Do Not Create a DTO for Every Layer by Habit

    Use DTOs where data crosses a boundary with a different contract. Mapping has a cost, but so does letting external request shapes define the inside of a service.

    • Architecture
    • Backend Engineering
    • API Design
    Read ↗
  124. November 25, 2023

    Git History Is a Team Asset, Not a Work Diary

    Split work before polishing commits, shape pull requests for reviewers, and leave a history that helps the next engineer understand changes and recover a release.

    • Delivery & Evolution
    • Career & Learning
    • Collaboration
    Read ↗
  125. November 21, 2023

    Put Circuit Breakers Next to the Failing I/O

    Circuit breakers, timeouts, cache fallbacks, and remote-call policies belong near the implementation that performs the I/O, while domain code chooses the required behavior.

    • Architecture
    • Backend Engineering
    • Reliability & Operations
    Read ↗
  126. November 16, 2023

    Timeouts Are Product Decisions, Not Just Client Settings

    Design timeout, retry, and recovery policies from the user's waiting budget and the uncertainty of each failure instead of applying one retry rule everywhere.

    • Backend Engineering
    • Reliability & Operations
    Read ↗
  127. November 12, 2023

    Do Not Split Modules Before the Domain Has Matured

    Domain maturity comes from understanding policy, behavior, and operating reality. Let those lessons reveal module boundaries instead of freezing guesses too early.

    • Architecture
    • Backend Engineering
    • Domain Modeling
    Read ↗
  128. November 7, 2023

    Grow Software One Boundary at a Time

    Start with working code, then extract functions, classes, packages, modules, and projects as real cohesion and scale make each stronger boundary necessary.

    • Architecture
    Read ↗
  129. November 2, 2023

    Keep Layers Logical and Packages Cohesive

    Modules, packages, and architectural layers solve different problems. Package related behavior together and let layers describe roles without scattering a feature.

    • Architecture
    Read ↗
  130. October 29, 2023

    Upgrade Dependencies Before the Gap Becomes a Project

    Frequent, prioritized dependency upgrades keep change small, expose compatibility problems early, and prevent a maintained service from quietly accumulating debt.

    • Backend Engineering
    • Delivery & Evolution
    Read ↗
  131. October 24, 2023

    Software Should Survive the Developer Who Built It

    Good company software reduces debt, fits the team's operating ability, and remains understandable and repairable after its original developer leaves.

    • Architecture
    • Testing & Quality
    • Collaboration
    Read ↗
  132. October 20, 2023

    Unit Tests Should Preserve Business Intent

    A business-layer unit test is useful when it guides design, records meaningful behavior, or makes the next developer reconsider a risky change.

    • Architecture
    • Testing & Quality
    Read ↗
  133. October 15, 2023

    When an AI Agent Calls the Same Tool Twice

    Retries are normal in distributed systems and AI workflows. Use database constraints, idempotency keys, and bounded retries to prevent duplicate side effects.

    • Backend Engineering
    • Reliability & Operations
    Read ↗
  134. October 11, 2023

    Multi-Module Too Early Makes Design Harder

    Modules should enforce boundaries discovered through implementation, not freeze guessed domains or mirror an architecture diagram before the software is understood.

    • Architecture
    Read ↗
  135. October 6, 2023

    Gradle Dependency Scopes Are Architectural Boundaries

    Use Gradle implementation, api, runtimeOnly, and compileOnly deliberately to express module access, prevent accidental coupling, and preserve design intent.

    • Architecture
    • Backend Engineering
    Read ↗
  136. October 2, 2023

    Operate Your Toy Project Before Calling It a Service

    A toy project becomes service experience only after launch: pick one goal, find real users, watch retention, and learn when to stop.

    • Reliability & Operations
    • Career & Learning
    Read ↗
  137. September 27, 2023

    Isolate Admin Work from the Service Domain

    Admin APIs have different queries, mutation needs, and release risks. Isolate them by module or repository instead of letting operational convenience reshape the core service.

    • Architecture
    • Backend Engineering
    Read ↗
  138. September 22, 2023

    Use Reader and Writer Components to Reveal Business Flow

    Reader and writer components can hide storage details, narrow change, and let the business layer show policy, but only when the software's lifetime justifies them.

    • Architecture
    • Backend Engineering
    • Testing & Quality
    Read ↗
  139. September 18, 2023

    Carry One Trace ID across Distributed Services

    Logs become operationally useful when one request can be followed across HTTP calls and asynchronous events without exposing sensitive data or flooding storage.

    • Backend Engineering
    • Reliability & Operations
    Read ↗
  140. September 13, 2023

    Define Problems from the User's Perspective

    Problem-solving improves when you separate technical load from product value, launch what you build, and keep asking why a user would choose it.

    • Career & Learning
    Read ↗
  141. September 9, 2023

    Reuse Below the Use-Case Layer

    When use cases call one another for reuse, business changes spread and cycles follow. Compose above them or extract focused implementation components below them.

    • Architecture
    • Backend Engineering
    Read ↗
  142. September 4, 2023

    Choose Experience and Judgment over Development Jargon

    Theories and patterns are useful references, but a developer still needs to explain the code, its tradeoffs, and what happened when it was operated.

    • Architecture
    • Career & Learning
    • Collaboration
    Read ↗
  143. August 31, 2023

    How to Split a Large Service Class by Responsibility and Layer

    Use constructor dependencies and imports to diagnose an oversized service, then separate cohesive responsibilities before adding another architecture label.

    • Architecture
    • Backend Engineering
    • Testing & Quality
    Read ↗
  144. August 26, 2023

    Choose Normalization from Requirements and Object Relationships

    Database normalization is not a score to maximize. Decide from change semantics, query cost, and the relationships the data is meant to preserve.

    • Architecture
    • Backend Engineering
    • Data & Persistence
    Read ↗

© 2026 Gemini Kim

RSSGitHubLinkedInXYouTube