<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thomas Gossmann</title>
    <description>The latest articles on DEV Community by Thomas Gossmann (@gossi).</description>
    <link>https://dev.to/gossi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F336127%2F60ce09da-43fe-4358-ae26-4d1fdcd35185.jpeg</url>
      <title>DEV Community: Thomas Gossmann</title>
      <link>https://dev.to/gossi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gossi"/>
    <language>en</language>
    <item>
      <title>Releasing Theemo v2</title>
      <dc:creator>Thomas Gossmann</dc:creator>
      <pubDate>Tue, 23 Jan 2024 14:03:02 +0000</pubDate>
      <link>https://dev.to/gossi/releasing-theemo-v2-596c</link>
      <guid>https://dev.to/gossi/releasing-theemo-v2-596c</guid>
      <description>&lt;p&gt;Theemo is an open source Design Token automation suite and consists of a Figma plugin, a Sync toolkit (with integrations to read from Figma and write to Style Dictionary), theme generation and framework adapters to load those to support the entire &lt;a href="https://theemo.io/token-pipeline"&gt;token pipeline&lt;/a&gt; end-to-end.&lt;br&gt;&lt;br&gt;
It started as a bunch of scripts and over time they grow together to form a unity. With all of its pieces working well in harmony now and the documentation being ready, I consider this to be the version 2 of Theemo.&lt;/p&gt;

&lt;p&gt;Highlights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transforms for variables in Figma&lt;/li&gt;
&lt;li&gt;Plugin system for tooling integrations&lt;/li&gt;
&lt;li&gt;Variable export from Figma (wo/ enterprise plan)&lt;/li&gt;
&lt;li&gt;Extended Style Dictionary support for Transforms and Modes&lt;/li&gt;
&lt;li&gt;Developer support for working with tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of this is covered in the &lt;a href="https://theemo.io"&gt;documentation at theemo.io&lt;/a&gt;. Based on the research in &lt;a href="https://gos.si/blog/inside-design-tokens-definitions-traits"&gt;Inside Design Token&lt;/a&gt; series, which made it to the website itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transforms for Variables in Figma
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/community/plugin/791262205400516364/theemo-design-tokens"&gt;Theemo Figma plugin&lt;/a&gt; started with support for referencing styles long before there were variables in Figma. Pretty soon after was able to run transforms on those reference (eg. manipulate saturation in a reference). Figma variables support those manipulations for prototype mode but not for colors or numbers (as we use them in Design Systems). The initial feature has been updated to support &lt;a href="https://theemo.io/design/figma/transforms"&gt;color transforms with variables&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ur2C_i5h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gos.si/wp-content/uploads/transforms-1024x822.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ur2C_i5h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://gos.si/wp-content/uploads/transforms-1024x822.png" alt="" width="800" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Plugin System for Tooling Authors
&lt;/h2&gt;

&lt;p&gt;The idea of Theemo is to provide a token pipeline and keep the machinery running. Users configure the behavior to match their system. To connect with third-party tools for exchanging tokens, the pipeline opened up with a plugin system for those integrations.&lt;/p&gt;

&lt;p&gt;Tooling authors can write plugins and focus on the integration of their tools. If you are a tooling author, read on, things got interesting with version 2.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrate with Token Sync
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://theemo.io/sync"&gt;Sync tokens&lt;/a&gt; from one tool to another is the heart of Theemo. Figma and Style Dictionary are supported out of the box. In version 1 this was built in and support ended here. Inspired by &lt;a href="https://eslint.org/blog/2022/08/new-config-system-part-2"&gt;eslint’s flat config&lt;/a&gt;, in version 2 the entire sync pipeline changed to a plugin system and continuing support for &lt;a href="https://theemo.io/sync/figma/overview"&gt;reading from Figma&lt;/a&gt; and &lt;a href="https://theemo.io/sync/style-dictionary/overview"&gt;writing to Style Dictionary&lt;/a&gt; (now as plugins).&lt;/p&gt;

&lt;p&gt;Need to support for &lt;a href="https://penpot.app/"&gt;Penpot&lt;/a&gt; or another integration? Learn how to &lt;a href="https://theemo.io/sync/reader#write-your-own-reader-plugin"&gt;write your own plugin&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sync Support for Figma Plugins
&lt;/h3&gt;

&lt;p&gt;Are you writing a Figma plugin? Then you realized, your plugin can store data in Figma and then read it through their REST API. Oh, that data is relevant when exporting tokens from Figma? Then Theemo got you covered as it allows to develop the reading counter part. The plugin system defines an interface with different data exchange points, support the ones relevant to you. Learn how to &lt;a href="https://theemo.io/sync/figma/plugins"&gt;read from your Figma plugin&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Variables Export from Figma
&lt;/h2&gt;

&lt;p&gt;Figma supports exporting variables through a special endpoint, well, at least when you are on an enterprise plan. There are a lot of reasons, why you want to use the enterprise plan, but solely for exporting variables? That’s not in everyone’s budget or a reason to increase the pricing plan for your organization.&lt;/p&gt;

&lt;p&gt;The literally hidden feature of Figma Theemo plugin is to &lt;a href="https://theemo.io/design/figma/variables-export"&gt;export variables&lt;/a&gt;. Thanks to the new plugin infrastructure, these variables are read with the &lt;a href="https://theemo.io/sync/figma/reader#theemo-plugin"&gt;Theemo plugin for syncing from Figma&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extended Style Dictionary support for Transforms and Modes
&lt;/h2&gt;

&lt;p&gt;Before working on version 2 of Theemo, I took the research from the past years and put it into the &lt;a href="https://gos.si/blog/inside-design-tokens-definitions-traits"&gt;Inside Design Token&lt;/a&gt; series. I discussed &lt;a href="https://gos.si/blog/inside-design-tokens-features"&gt;features&lt;/a&gt; and how they are supported as through &lt;a href="https://gos.si/blog/inside-design-tokens-theming"&gt;theming&lt;/a&gt;. While working on the series, Jacob Miller from Figma opened up the discussion at the DTCG asking for &lt;a href="https://github.com/design-tokens/community-group/issues/210"&gt;Native modes and theming support&lt;/a&gt;. I also shared my results and the discussion is still ongoing.&lt;/p&gt;

&lt;p&gt;Theemo v2 implements my proposed solution. As part of sync you can configure your desired behavior and the Theemo integration for Style Dictionary provides the necessary extensions to understand the format and run the build (for the curious: it’s using the &lt;a href="https://dbanks.design/blog/dark-mode-with-style-dictionary"&gt;single-token method&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Remember the color transformation in the Figma plugin? They are piped all the way from Figma, into the JSON files and are handled by Style Dictionary now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Support for Working with Tokens
&lt;/h2&gt;

&lt;p&gt;When working with tokens in code, especially with token values as Theemo does it, there wasn’t a good code package available. Now there is &lt;code&gt;@theemo/tokens&lt;/code&gt; with rich Typescript types to cover token types, their value formats and extensions to run your own typing experimentation.&lt;/p&gt;

&lt;p&gt;This package is heavily influenced rsp. based on these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/lukasoppermann/style-dictionary-utils"&gt;&lt;code&gt;style-dictionary-utils&lt;/code&gt; by Lukas Oppermann&lt;/a&gt; – Can be used as substitute to and &lt;code&gt;@theemo/style-dictionary&lt;/code&gt; when none of the Theemo features are used.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/knapsack-labs/design-token-tools"&gt;Design Token Tools by Knapsack&lt;/a&gt; – Very good to read and write tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s a bit of bittersweet to have fragmented packages like these, but also it is vital in the current situation we are in. All of these packages are here to experiement with the DTCG token format to probe its boundaries and to form the direction forward. I think we all agree to take the best parts and merge them under the banner of DTCG at some point 🙂&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps?
&lt;/h2&gt;

&lt;p&gt;Version 2 unlocks new capabilities and I want to share next experiments I’m eyeing on; no timeline given though, feel free to be first :]&lt;/p&gt;

&lt;h3&gt;
  
  
  Transforms from Figma to CSS
&lt;/h3&gt;

&lt;p&gt;Color palettes can be crafted with primitive transforms (such as HSL) or new color formats, such as &lt;a href="https://www.youtube.com/watch?v=yYwEnLYT55c&amp;amp;pp=ygUVY3NzIGNvbG9yIHBhbGV0dGUgaHNi"&gt;HSB&lt;/a&gt; &lt;a href="https://uxdesign.cc/simplified-figma-color-variables-based-on-hsb-interpolation-c3e404585176"&gt;interpolations&lt;/a&gt; to highly sophisticated algorithms seen in &lt;a href="https://colorbox.io"&gt;ColorBox&lt;/a&gt; by Lyft, &lt;a href="https://leonardocolor.io"&gt;Leonardo&lt;/a&gt; by Adobe, or &lt;a href="https://primer.style/prism"&gt;Prism&lt;/a&gt; by Github.&lt;/p&gt;

&lt;p&gt;FWIW is to support primitive transforms (HSL, HSB, etc.) from within Figma, export these theme internals to CSS, and write a little “Styling UI overlay”, in which you select a couple of hues to change the color of the App in realtime.&lt;/p&gt;

&lt;p&gt;Making use of new &lt;a href="https://developer.chrome.com/blog/css-relative-color-syntax"&gt;relative colors&lt;/a&gt; in &lt;a href="https://www.w3.org/TR/css-color-5/#relative-colors"&gt;CSS color level 5&lt;/a&gt; features while keeping an eye on &lt;a href="https://github.com/w3c/css-houdini-drafts/issues/1088"&gt;value transform worklets for Houdini&lt;/a&gt; (to support HSB). The information are already available, thanks to Theemo. This would target special transforms for Style Dictionary to do the job.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validations for Design Tokens
&lt;/h3&gt;

&lt;p&gt;I mentioned &lt;a href="https://gos.si/blog/inside-design-tokens-the-hidden-knowledge#linting"&gt;linting&lt;/a&gt; to be one of the challenges for tokens. Figma introduced scopes for variables to help with that regard. These scopes are already exported with Theemo and are available to Sync. A potential integration to discover is &lt;code&gt;stylelint-csstree-validator&lt;/code&gt; to be the counterpart to Figma scopes. If so, this can be the next integration into Sync. The idea is to get helpful support to the fingertips of engineers to give them confidence about proper token usage. But this is me fishing in the dark, so I’m more than happy to receive feedback on this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Involved
&lt;/h2&gt;

&lt;p&gt;Happy to receive feedback, help or contributions. Best place is to open up an issue over at &lt;a href="https://github.com/theemo-tokens/theemo"&gt;Github&lt;/a&gt; or start a conversation in the &lt;a href="https://www.design.systems/"&gt;Design Systems Slack&lt;/a&gt;, where you can find me as &lt;code&gt;@gossi&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That’s it folks&lt;br&gt;&lt;br&gt;
– gossi&lt;/p&gt;

</description>
      <category>designsystem</category>
      <category>designtokens</category>
      <category>theemo</category>
    </item>
    <item>
      <title>The Hidden Skill and Art of Naming Things</title>
      <dc:creator>Thomas Gossmann</dc:creator>
      <pubDate>Fri, 27 Aug 2021 11:45:51 +0000</pubDate>
      <link>https://dev.to/gossi/the-hidden-skill-and-art-of-naming-things-35m0</link>
      <guid>https://dev.to/gossi/the-hidden-skill-and-art-of-naming-things-35m0</guid>
      <description>&lt;p&gt;The two hardest problems in programming are cache invalidation, naming things and off-by-one. You learn a lot about algorithms while studying computer science to find clever solutions for the problem at hand - but for naming things?&lt;/p&gt;

&lt;p&gt;For me undoubtedly this is the hardest problem. In fact, this issue exists in almost every discipline, whether you are pioneering a field and are the first one to name your discovered thing(s) or on a daily basis when communicating with your co-workers. As developers, we face this when communicating with our PM on our specs or with designers on sketches, mockups, or components.&lt;/p&gt;

&lt;p&gt;While studying sports science it is common (and required) to start with a definition first and then use it along the way. In computer science, this of course happens for the technical terms but isn't considered for actually writing software to solve a problem in a certain domain. During my software engineer apprenticeship, I remember in &lt;em&gt;some&lt;/em&gt; situations getting tips and discuss naming things on the spot for domain-related terminology. In university, for the handful of computer science courses I had, nothing - this was left out. I can't remember a linguistic course for this, that I think would come closest for teaching this.&lt;/p&gt;

&lt;p&gt;Discussing naming things at work is often seen as unnecessary and considered a waste of time preventing you from getting the job done. There might be some truth to it, as it wouldn't necessarily matter for the current task you might be working on, but the pain becomes "visible" when the next person has to deal with your (improper) naming. When the naming doesn't click immediately or doesn't do what the name suggests, it gets hairy and the problem is passed on to the following person (that might even be your future you). Sometimes, it's wise to take a shortcut when the context is not known well enough to give it a proper name (note to developers: please put a comment in your code).&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes a Good Naming?
&lt;/h2&gt;

&lt;p&gt;A good naming is already encoded in the term &lt;a href="https://thedomaindrivendesign.io/developing-the-ubiquitous-language/"&gt;ubiquitous language&lt;/a&gt; and it's enough to describe it in two points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A non-technical/industry language eliminating inaccuracies understandable by a multi-disciplined team&lt;/li&gt;
&lt;li&gt;No ambiguity!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You could say there are some people who spent more time on naming things than others. I've realized there is some mastery level to naming things, roughly:&lt;/p&gt;

&lt;p&gt;Level 0 - Just name it with the first thing that comes to mind &lt;br&gt;Level 1 - Your naming suggest what it does properly &lt;br&gt;Level 2 - With your naming a consumer can no longer use your thing the wrong way &lt;br&gt;Level 3 - Your name is a beauty and makes the consumer smile, it leads to a positive emotional benefit. This is where you begin to imagineer and reach for art (this is the bonus level - hardly reached).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Important Note: This is not really a mastery level, like you shall NOT say: "I'm at naming things level 2". It's only a short, quick, and non-exhaustive scale for use within this article!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ambiguity is clearly the enemy of good and clear naming and it almost ever happens unintentionally. I consider this problem solved, when reaching level 2 with your naming, the gap from level 1 to 2 is the hardest to jump.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Naming things as a skill will unfortunately often go unnoticed, rarely praised and honored. Instead, it will most often be recognized when it's done (completely) wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;Test Yourself with an Example&lt;/h2&gt;

&lt;p&gt;Let's use this wireframe (below) as an example. Imagine you are about to develop this screen which contains three sets of information. The application in which this is going to be used, is an international app and the contents for the text are stored in locale files, your job is to give these variables proper names. Easy huh?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Cqzqdnag--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gos.si/wp-content/uploads/naming-things-example.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Cqzqdnag--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://gos.si/wp-content/uploads/naming-things-example.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a straight forward way to name these three variables:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Headline&lt;/li&gt;
&lt;li&gt;Tagline&lt;/li&gt;
&lt;li&gt;Text&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Boom! you would think, you found three variable names that get the job done quickly and can move on. But later your brain starts to think: is it really a &lt;em&gt;headline&lt;/em&gt;? What about &lt;em&gt;heading&lt;/em&gt; or &lt;em&gt;header&lt;/em&gt;? What even is the difference between the three? As web-developers, we can at least relate &lt;em&gt;header&lt;/em&gt; to an equivalent &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; element that is there to &lt;em&gt;structure&lt;/em&gt; the document into semantic sections. That's the first relief here, disconnecting &lt;em&gt;header&lt;/em&gt; from &lt;em&gt;headline&lt;/em&gt; and &lt;em&gt;heading&lt;/em&gt;. Identifying &lt;em&gt;header&lt;/em&gt; as a structural thing allows for more connections to related concepts.&lt;/p&gt;

&lt;p&gt;Where else is structuring used to section documents? For me, I have explored this in &lt;em&gt;LaTeX&lt;/em&gt; and &lt;em&gt;HTML&lt;/em&gt;, each of these technologies comes with mechanics to provide structure.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML: Mainly &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;section&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;header&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;footer&amp;gt;&lt;/code&gt; as well as &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; to &lt;code&gt;&amp;lt;h6&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;LaTeX: Most of &lt;code&gt;\\part&lt;/code&gt;, &lt;code&gt;\\chapter&lt;/code&gt;, &lt;code&gt;\\title&lt;/code&gt;, &lt;code&gt;\\heading&lt;/code&gt;, &lt;code&gt;\\subheading&lt;/code&gt; etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The name of these mechanics can also help us create a guided structure for naming our variables in an entire project. These names are good candidates to prefix and structure our locales. An important learning from that little exaggeration is that the name of the variables are &lt;em&gt;sourced&lt;/em&gt; from the technical implementation (if applicable). This is good knowledge to assist your naming and maybe come up with some guidance on semantics. It's not yet enough to land on the final design for the naming but a little success and very good input.&lt;/p&gt;

&lt;p&gt;Left is the unclarity between &lt;em&gt;headline&lt;/em&gt; and &lt;em&gt;heading&lt;/em&gt;. I am not a native English speaker and I don't know the nuances between them linguistically, which is a problem we see occur quite often (as English is the language of international teams as well as development often happens in English, too). A possible explanation, I came up for myself, is that it depends on the context/discipline we are in. From a &lt;em&gt;marketing&lt;/em&gt; perspective, this would perhaps tend to be more of a &lt;em&gt;headline&lt;/em&gt;, which is important to attract the interest of a possible reader. On the other side, in scientific writing, a &lt;em&gt;heading&lt;/em&gt; is quite fine to summarize the following section or it might be a required field for the article format/magazine you are publishing for.&lt;/p&gt;

&lt;h3&gt;Discussion&lt;/h3&gt;

&lt;p&gt;Even with &lt;em&gt;what seems to be a simple example&lt;/em&gt; there is a lot to learn and explore around, which gives more context to land on a proper naming. The example shown is one I haven't solved for myself yet, but it's good practice to explain the levels I described earlier:&lt;/p&gt;

&lt;p&gt;Level 0 - Take the first naming &lt;br&gt;Level 1 - With a bit more investigation, come to a solution that feels has more of a &lt;em&gt;proper&lt;/em&gt; naming &lt;br&gt;Level 2 - The naming resolves in a convention of what words to use for what purpose. At this point, you can't get the naming of your variables wrong anymore, and you also know how to implement them. &lt;br&gt;Level 3 - Perhaps not reachable at all for this situation (but that's ok, not every situation has a bonus level)&lt;/p&gt;

&lt;p&gt;Level 0 and 1 do have a trap for the uncanny valley of naming things, they may seem right and obviously are not at the same time. What exploring of level 1 unlocks is a mystified view of what's slumbering in the topic and to see the possibility of reaching level 2.&lt;/p&gt;

&lt;p&gt;What was the level you felt comfortable with? Did you drop at some point? Are you fine with just the first three variable names and called it a day? Have I just caught your interest and you are about to dig deeper and solve the mystery? Have you maybe already solved that one?&lt;/p&gt;

&lt;h2&gt;Naming Things in Product Development&lt;/h2&gt;

&lt;p&gt;For product development domain-driven design (DDD) is a good method to aim for a ubiquitous language. Reaching there requires a conversation between stakeholders from multiple disciplines to grasp all perspectives and land on a shared language to eliminate the mental burden in your team's daily conversations and to quickly reach the point of discussion.&lt;/p&gt;

&lt;p&gt;From the perspective of the role of a developer, there are a couple of things you want to look for when having conversations with people from other disciplines, with yourself or peer developers. The best resource to consult are domain experts and they are likely to speak a completely different language than developers are used to. This is already the first point of friction as I've realized that developers tend to name things as they appear technically. It requires time and effort to shift your mind and allow other naming methods, such as domain-driven design. In the end, we want the code to speak &lt;em&gt;the&lt;/em&gt; ubiquitous language and not let the domain adopt a technical language.&lt;/p&gt;

&lt;p&gt;Important for naming are &lt;strong&gt;objects&lt;/strong&gt; and &lt;strong&gt;actions&lt;/strong&gt;. These names are taken from the &lt;a href="https://uxdesign.cc/an-introduction-to-object-oriented-ux-and-how-to-do-it-829bf6b248a1"&gt;OOUX&lt;/a&gt; naming convention for &lt;em&gt;things&lt;/em&gt; (nouns) and &lt;em&gt;activities&lt;/em&gt; (verbs). While OOUX is great and I admire it for what it offers, it is not a gold standard. If you've already settled on terms for your own team, that's great. Yet for the rest of the section, I'm going to use objects and actions as described here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;… &lt;strong&gt;objects&lt;/strong&gt; (nouns) are entites/aggregates, locations (business verticals), areas (on the screen), elements/components, etc.&lt;/li&gt;
&lt;li&gt;… &lt;strong&gt;actions&lt;/strong&gt; (verbs) are activities a stakeholder can perform directly related to an object&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unveiling, identifying, and characterizing them is a not-so-easy job. &lt;strong&gt;Landing at a vocabulary that is used in the specs (product), in graphic editor (design), and finally in code (development) is the goal&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here are a couple of ideas to improve your naming game:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Talk and listen to designers&lt;/strong&gt;, you may want to ask the reasons or background for something. You can also testify your assumptions, such as “do we do that, so the customer can get xyz?”. During a refinement, train yourself to understand the cues that will draw your attention. Often, there are phrases like “we do a list here, so the customer receives an explanation for xyz”. The “receives an explanation for xyz” part answers the question of &lt;em&gt;what&lt;/em&gt; something is meant for. By doing these things you not only get a better feeling to arrive at a proper naming. A very nice side-effect is the better understanding for design and especially the design creation process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Talk to P*-title positions (PM/PO/P*)&lt;/strong&gt;, to understand the different ways in which the app stakeholders manipulate these &lt;em&gt;objects&lt;/em&gt;, their &lt;em&gt;relationship&lt;/em&gt; to others, and which &lt;em&gt;actions&lt;/em&gt; they are supposed to perform. P*-title positions are a great resource to understand these nuances as they know, define and understand the product.This is done as part of the &lt;a href="https://www.rewiredux.com/ooux"&gt;ORCA process&lt;/a&gt; and the part described here might also be done by designers (or in combination with P*-level).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-stack pairing between FE and BE developers,&lt;/strong&gt; to consult on objects and their technical characteristics. FE developers mostly work with a subset of the whole objects as defined in the backend or even on the database level. It is a very welcoming discussion to see how objects are represented in BE, then filtered to be transferred over the wire, consumed and processed by FE developers. Often a pairing session between BE and FE developers is fruitful to better understand the technical picture and to learn what matters on the FE and BE respectively, the &lt;em&gt;what&lt;/em&gt; and &lt;em&gt;how&lt;/em&gt; about the (technical) relationship.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Imagine a real-life situation,&lt;/strong&gt; sometimes it’s very helpful to think of an imaginary situation, where the work of your product is done by a human. Let's say a consulting situation, where the consultant and a customer are sitting in a room together. No digital devices, everything in paper in front of them on a table.This little simulation game is very helpful to draw actions from. Especially in a non-digital situation, there is no click, no tap, no swipe a customer or consultant can do. You can directly eliminate this way of thinking. Examples:&lt;ul&gt;
&lt;li&gt;The consultant would have a &lt;em&gt;folder&lt;/em&gt; with recommendations, that can be &lt;em&gt;opened.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The customer takes a pencil and &lt;em&gt;signs&lt;/em&gt; a &lt;em&gt;contract.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The customer will &lt;em&gt;choose&lt;/em&gt; between &lt;em&gt;offers&lt;/em&gt; lying in front of them.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beyond Tellerrand&lt;/strong&gt;, a thought experiment taking a couple of minutes, where you are exceeding the scope on purpose, pushing the boundary far further than it should be. This helps to explore the space around the actual context, will help fine-tune what is the boundary and more important, what your name WILL NOT BE. It's a way to see a sharper image of the scenery you are looking at.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event storm&lt;/strong&gt;, with your multi-disciplined team (invite domain experts!) about the subject from multiple perspectives to reach a clear picture, understand the other perspectives and be further able to share empathy with them and embody their perspective (to take a stance against yourself?).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event storm with yourself&lt;/strong&gt;, This is actually a misconception in itself but when event storming as a team is too much/not affordable, this might come in handy. When doing this on your own, you have to virtually embody other perspectives and try to understand their situation when looking at the how-to-call-it. Take it with a grain of salt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name storm&lt;/strong&gt; (ok, I made up that one). When you understand the scenery and the only thing left is to land on a final name and you have too many candidates, throw a name storm session to decide on a final name.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With all these methods you should maintain a document about your domain terminology. Refine this document over time with even preciser descriptions and wording.&lt;/p&gt;

&lt;p&gt;Writing specifications with this terminology will become utterly easy. Even the best specifications are not prevented from becoming outdated and the code remains a single source of truth. The holy grail a developer can reach for is to assure the code &lt;em&gt;reads&lt;/em&gt; as the spec. Consider every location where the naming of code units does not conform to your terminology as tech debt.&lt;/p&gt;

&lt;p&gt;Testify your existing code by reversing the approach from above. Deducting objects and actions from your code and how they are connected together, is it possible to reverse engineer the specification (for a non-developer)? Does the name of the function properly describe what it is doing or is it required to read the implementation details of it? Does the name properly express &lt;em&gt;(for) what&lt;/em&gt; it is doing?&lt;/p&gt;

&lt;h2&gt;Grow your Repertoire&lt;/h2&gt;

&lt;p&gt;Becoming talented at naming things means you will have a big repertoire and be able to faster discard options, that you already know will not help you achieve what you are looking for. This is common amongst all talents in various disciplines. In order to stay or be talented, growing a repertoire is essential; so you can faster reach for level 2 on naming. That's why it is never a waste to pursue an idea even if it turns out to be a bad option. Following that path already has grown your repertoire over another person who took a shortcut. Don't forget to stay curious and keep up the hunger to really get to the bottom of a problem as this is the motivation for going on such a journey.&lt;/p&gt;

&lt;h2&gt;Apply Naming Things for the Biggest Impact&lt;/h2&gt;

&lt;p&gt;Naming things often requires research, failing attempts, try and error, and overall is a costly voyage. It's wise to funnel this process to control the impact.&lt;/p&gt;

&lt;p&gt;First of all, identify people who have an interest in naming things properly and will do the required steps to land there. This is not something binary but on a scale, you can draw people towards one or the other end of the spectrum, much related is also the concept of &lt;a href="https://bigsea.co/ideas/micro-and-macro-thinkers/"&gt;macro and micro thinkers&lt;/a&gt;. I would say a person who is having a strong tendency to nail naming things is also a macro thinker. In terms of development, a macro thinker leans more on the side of architecture, developer experience, or tooling. On the other hand, micro thinkers learn more on the side of feature implementation, I have also heard the term &lt;em&gt;makers&lt;/em&gt; for them. The team you work with clearly needs both and both need to be rewarded for what they are good at. At best, the macro thinkers supply the micro thinkers with tools and guides so they can get the work done quickly.&lt;/p&gt;

&lt;p&gt;After identifying the right people, and knowing who belongs to the different group of thinkers, macro thinkers should be tasked with getting the naming right. There are technical things, such as namings in your tooling (design system is probably the best to name here) as well as namings in your product/domain. The former is more on a building blocks/foundation/tooling level whereas the latter is more on a conceptual level and when both are defined and their characteristics are worked out, development can happen at a fast pace as these are big piles of mental burdens keeping productivity low. Having them defined will make product development and engineering a joy to do.&lt;/p&gt;

&lt;p&gt;I hope this article helps you understand the value and skill of naming things and hopefully you can form new strategies with your team to naming things.&lt;/p&gt;

&lt;p&gt;Special thanks to &lt;a href="http://twitter.com/gabrielaospina"&gt;Gabriela Ospina&lt;/a&gt; for editing this article and nerding out with me about naming things!&lt;/p&gt;

&lt;p&gt;-gossi&lt;/p&gt;

</description>
      <category>ddd</category>
      <category>linguistics</category>
      <category>ubiquitouslanguage</category>
      <category>namingthingsishard</category>
    </item>
  </channel>
</rss>
