Naming — one of the hardest things in Software development

Continuous Delivery
2 min readDec 29, 2018


There are only two hard things in Computer Science: cache invalidation and naming things.

– Phil Karlton

I prefer to leave interfaces unadorned. The preceding I, so common in today’s legacy wads, is a distraction at best and too much information at worst. I don’t want my users knowing that I’m handing them an interface.

Clean Code, Uncle Bob Martin

We all struggle with naming on a day to day basis. What should we call a class, a function, a field or a table in the database? The fact that it is costly to change later. And the wrong namings add to the complexity because of the confusion it creates over time.

Ubiquitous Language

Ubiquitous Language is a technique to help you arrive at a common, shared language. A language that the developers and the domain experts/users use to communicate.

And, the common language helps the team to arrive at better names. The way to arrive at such a common language is through conversation.

Domain-Driven Design

Ubiquitous Language is one of the critical parts of Domain-Driven Design (DDD). The premise of DDD is initiating a creative collaboration between technical and domain experts. DDD helps to refine the models addressing the problems of a particular domain.

It is much deeper. The following mindmap should give you a quick overview and depth of this.

If done well Domain-driven design helps you move to Microservice Architecture.

Further reading

Ubiquitous Language — By James Shore

Domain Driven Design: Tackling Complexity Software in the Heart of Software

Pluralsight Course — Domain Driven Design Fundamentals

Pluralsight course — Domain Driven Design In Practice

Domain Driven Design By Eric Evans

Hunting for great names in programming by DHH

An updated version of an earlier post published at



Continuous Delivery

Co-founder/CTO @ PracticeNow, Bangalore, India. A strong believer of lean principles, an evangelist and practitioner of Continuous delivery