1. The name of a Chef node, must say who, and it can say what. The who is implicit; each name uniquely identifies a particular node. The what is a side-effect of using natural language; 2. This name has lots of what in it. It’s a production node. It’s frontend, not backend. It speaks HTTP 3. I need a unique identifier anyway, so it might as well tell me something about the node too, right?. Why not much what? 4. On the Chef server each node is a record in a datastore. The node name is like 'username' then isn't it? If you're implementing an app that has usernames, are you going to have a policy where your username must also describe personal interests? 5. Don't give your Chef nodes names that contain words describing what they do for a living. The node name should be a unique identifier only. 6. I need to know what this node does. The name tells me environment and job description so I'm leveraging that. When my names tell me what the node is; this is the simplest way. 7. Somebody stood up two more slaves and did the names with some capital letters. Chef ran fine, but less than half the RAM was being used. Node names were about the last thing I thought to look at. 8. Again, rich naming conventions inform this decision. 9. Tweak the naming convention, this code breaks. Meanwhile more frontend web nodes get launched, now some have broken SSL. Because load balancers, can't reliably reproduce. Takes days to figure out. 10. So decouple the who and the what. Give nodes totally random names. Of course, you need the what information somewhere. 11. Tags are supposed to describe what. Tags are the place to stash natural language words that are loaded with assumed meaning. 12. Here we're asking the same questions as before about what this node is. But we're not looking to the node's unique identifier for that information. 13. Here still using natural language to encapsulate a ton of abstracted knowledge, but it's significantly cleaner. 14. Legend has it, way back in 2002 Jeff Bezos one day demanded that going forward, all communication between services must happen through an official, discoverable, API; ad-hoc backdoors were forbidden. Steve Yegge blogged about just how hard this was to swallow at the time. Node names that say both who and what aren't formal enough. They're not an official interface. They work for a while, and you can write code that can parse them and do the right thing, sometimes, but it's just the wrong way to go.