---
title: "Interface Naming - Anything But Java's Standard, Please"
url: "https://osherove.com/blog/2006/6/14/interface-naming-anything-but-javas-standard-please.md"
canonical: "https://osherove.com/blog/2006/6/14/interface-naming-anything-but-javas-standard-please.html"
published: "2006-06-14T19:03:00"
updated: "2006-06-14T19:03:00"
tags: [".NET", "General Software Devel..."]
author: "Roy Osherove"
description: "Jeremy dislikes Interface names that being with 'I' (\"ISerializable\"..). Len Holgate disagrees with him , but likes to name his classes in a \"verb-noun\" fasion (\"IManageUsers\"). Personally, I'd much rather have \"I\" for…"
usage: "Licensed under CC BY 4.0 — reuse, quote and adapt with attribution (Roy Osherove, link to the original page)."
license: "https://creativecommons.org/licenses/by/4.0/"
---

# Interface Naming - Anything But Java's Standard, Please

By Roy Osherove June 14, 2006 In [.NET](https://osherove.com/blog/category/net), [General Software Devel...](https://osherove.com/blog/category/general-software-devel)

**Historical article** · Originally published June 14, 2006; technical details may be outdated.

[Jeremy dislikes Interface names that being with 'I'](http://codebetter.com/blogs/jeremy.miller/archive/2006/04/26/143489.aspx) ("ISerializable"..). [Len Holgate disagrees with him](http://www.lenholgate.com/archives/000653.html), but likes to name his classes in a "verb-noun" fasion ("IManageUsers").

Personally, I'd much rather have "I" for interfaces. It makes the code much clearer.

Having worked both in Java and C#, I find it very confusing in Java when I keep seeing class names, but I alwasy have this thought in the back of my head "maybe it's really an interface?". And so I have to keep hovering my mouse over the variable types to understand what they really are.

To me, seeing "I" for a type, lets me know that this variable represents something abstract, which its implementation is changeable (I can cast it to other stuff, and send it as a representation of my own stuff).

It lets me understand code which uses lots of dependency injection and realize just what I'm up against.

As for how to name interfaces (the part after the "I"), I like to go with a different rule of thumb than Len's. I name my interfaces as to \*what can be done to them\*. So a class that implements them suddenly has more abilities to be performed through it. For example, "ISerializable" indicates that the class that implements it supports another operation performed on it.

Len's example states he'd name something "**IManageUsers**". I'd rather call it "**IUserManager**" instead, since it is more in the realm of the real implementers of this interface ("**UserManager**", "**DBUserManager**" etc.)

It's really a matter of taste and the standard your company employs, but whatever it is, I feel that Java makes it the hardest to comprehend what you're up against. For example, that interface in Java would have been called "UserManager" in the first place, leading to much uglier names such as "UserManagerImp". Ugh.

## More in .NET

[All posts in .NET](https://osherove.com/blog/category/net)

- Jun 18, 2006

    ### [This week at the C# User group - Hardcore ASP.NET 2.0 \[Dan Amiga\]](https://osherove.com/blog/2006/6/18/this-week-at-the-c-user-group-hardcore-aspnet-20-dan-amiga.html)

- Jun 14, 2006

    ### [Mapping CLR, Winfx and .NET Framework 3.0 upcoming versions](https://osherove.com/blog/2006/6/14/mapping-clr-winfx-and-net-framework-30-upcoming-versions.html)

- Jun 11, 2006

    ### [Resharper Vs. Refactor! and CodeRush - Let the games begin.](https://osherove.com/blog/2006/6/11/resharper-vs-refactor-and-coderush-let-the-games-begin.html)

- Jun 11, 2006

    ### [Got an MSBuild-SikdeKick wish? Post it on Matan's blog!](https://osherove.com/blog/2006/6/11/got-an-msbuild-sikdekick-wish-post-it-on-matans-blog.html)


---

## About the author

**Roy Osherove**: Senior Solutions Architect at AWS working on AI for production and AI-driven development; author of The Art of Unit Testing and Elastic Leadership, with about 20 years of consulting and training on unit testing, TDD, team leadership and continuous delivery.

### Sites

- [RobotPaper](https://robotpaper.ai/): This blog: AI patterns and anti-patterns, AI and coding agents, and engineering leadership.
- [osherove.com](https://osherove.com): Roy's personal site. Author of The Art of Unit Testing and Elastic Leadership; consulting and training on unit testing, TDD, team leadership and continuous delivery, plus about 20 years of blog posts.
- [The Art of Unit Testing](https://www.artofunittesting.com): The Art of Unit Testing, 3rd Edition (Manning): readable, maintainable, trustworthy unit tests, plus TDD workshops in C#, JavaScript, Java and Kotlin.
- [5whys.com](https://www.5whys.com): Roy's writing on software team leadership: self-organizing teams, surviving chaos, learning mode and the Elastic Leadership model.
- [Pipeline Driven](https://pipelinedriven.org): Continuous delivery and DevOps practices: build patterns, pipeline-friendly testing, DevOps metrics and enterprise DevOps.
- [Elastic Leadership](https://www.elasticleadership.com): Elastic Leadership, Roy's framework for software team leaders (survival, learning and self-organizing modes).

### Social

- X: https://x.com/royosherove
- LinkedIn: https://www.linkedin.com/in/osherove/

### Contact

- Contact form: https://forms.gle/jQSx5KoXvrVA1JCK7

### License

Licensed under CC BY 4.0 — reuse, quote and adapt with attribution (Roy Osherove, link to the original page). License: https://creativecommons.org/licenses/by/4.0/
