Announcing: FUID (Fully Unique Identifiers)

Announcing: FUID (Fully Unique Identifiers)

In my research and experience over the years fo various forms of Infrastructure and Application Development & Deployments, I’ve found there are many kinds of Identifier that we tend to expect has some form of Uniqueness to it. Which in many cases my be true, many others unfortunately isn’t.

We already use GUID (Globally Unique Identifier), UUID (Universally Unique Identifier) & until today I had never heard of ULID (Universally Unique Lexicographically Sortable Identifier) which you can read more on this over in this post GUID vs UUID vs ULID: Understanding Unique Identifiers -medium - ronaldo.oliver7 which goes in to the differences of the three of them.

However, having worked with different systems, I’ve always seen these sort of identifiers as not really being all that human friendly and definitely much more computer friendly than human friendly.

We tend to prefer things like simple fields like names. Systems where they have a backend name that is different to a name that may be surfaced in the front end can cause all manner of issues when you are building automations. SharePoint is unfortunately a great example of this, especially when you create something in the UI and in the backend it doesn’t give it the same name as what you had given it. Plus for certain fields you have it having a friendly name that isn’t close to the actual identifier that you need when automating stuff with it. Unfortunately, this is common in many products, especially in code libraries where an object may have an alias property, which whilst incredibly useful, can lead to people spending time misunderstanding & banging their heads against a brick wall.

So what is a FUID?

In building 🔗The Interaction Notes Family - IINs, DINs, FINs🔗 I realised that this was an issue that I wanted to overcome, particularly focusing on the following aspects.

  • Human Readable
  • Human Creatable
  • Machine Queryable
  • Machine Creatable
  • Enables An Object to be created from it
  • Unique to Author/s
  • Unique to Content Type
  • Unique to Content Publishing Platform
  • Unique to Date
  • Optionally, Unique to Time
  • Optionally, Unique to Content Revision / Version
  • Optionally, Unique to Organisation

With this I feel I have managed to create what ticks the boxes for all the above.

Here are a few Examples of a FUID in action that I have used in the IINs (Initial Interaction Notes) repo

  • GH:kilasuit|IINs|Partial|Anime|Bleach|IIN-P0002-2025-04-29-Bleach
  • GH:kilasuit|IINs|Partial|TechStuff|Scott_and_Mark|IIN-P01-2025-04-17-Series

Let’s break these down

  • Content Publishing Platform = GH
  • Author = kilasuit
  • Primary Content Type = IINs
  • Secondary Content Type = Partial
  • Tertiary Content Type = Anime
  • Quaternary Content Type = Bleach
  • Id = IIN-P0002-2025-04-29-Bleach

Versus

  • Content Publishing Platform = GH
  • Author = kilasuit
  • Primary Content Type = IINs
  • Secondary Content Type = Partial
  • Tertiary Content Type = TechStuff
  • Quaternary Content Type = Scott_and_Mark
  • Id = IIN-P01-2025-04-17-Series

Note we could add more additional levels of Content Type very easily here using additional terms from https://en.wikipedia.org/wiki/Ordinal_numeral

An example for this relating to a Software package like the ARMTemplateComplexity PowerShell Module - GitHub that I built for generating a Complexity Score for an ARM Template or repository of ARM Templates may look like this

PowerShell Gallery:kilasuit|PowerShell Module-ARMTemplateComplexity|Azure Resource Manager Templates|Complexity Scoring|Productivity Research|GitHub Hosted|<blogPostURL>

  • Content Publishing Platform = PowerShell Gallery
  • Author = kilasuit
  • Primary Content Type = PowerShell Module-ARMTemplateComplexity
  • Secondary Content Type = Complexity Scoring
  • Tertiary Content Type = Azure Resource Manager Templates
  • Quaternary Content Type = Productivity Research
  • Quinary Content Type = GitHub Hosted
  • Senary Content Type = <blogPostURL>

Or alternatively

PWSHGallery:kilasuit|PowerShell Module-ARMTemplateComplexity|Azure Resource Manager Templates|Complexity Scoring|Productivity Research|GitHub Hosted|<blogPostURL>

  • Content Publishing Platform = PWSHGallery
  • Author = kilasuit
  • Primary Content Type = PWSH Module-ARMTemplateComplexity
  • Secondary Content Type = Complexity Scoring
  • Tertiary Content Type = ARM Templates
  • Quaternary Content Type = Productivity Research
  • Quinary Content Type = GitHub Hosted
  • Senary Content Type = <blogPostURL>

Getting involve & Starting to Use FUIDs?

Whilst this makes sense to me, I have to admit that until I can get a number of additional tasks with this completed that this will be something that may not get many others onboard and using.

But those that do, I hope it will be of enough use to them. Especially as It is meant as a way for Content Authors to & Researchers to be able to more easily cross link various types of content, whether that be research documents, Software Packages and so forth with a easily unique searchable field, that in my opinion we did not have before.

Therefore I have created the following repository for this at FUID - kilasuit - GitHub and whilst it may be YARP - Yet Another Ryan Project, it certainly is one that when tied into repositories like those with 🔗The Interaction Notes Family - IINs, DINs, FINs🔗 that this will lead to a single source of queryable data for things like all my blog content across different platforms as well as any future software packages or applications that I & others may publish in future.

I would absolutely love it if others would make use of this especially once a bit more fleshed out and for them to start adding a FUID as an additional metadata property particularly in software packages like PowerShell Modules, Bicep Modules etc.

Platform Specific Unique Identifiers

Whilst in some package registries, there are unique identifiers, often similar to FUID’s in that they are built up of a number of other bits of package metadata with for example this in Microsoft Artifact Registry

mcr.microsoft.com/dotnet/runtime:10.0

Whilst this is a great platform specific identifier, one area this falls for me, which could be quite useful is when you have a package that you are publishing to many similar registries

FUID example for dotnet 9 Runtime

Whilst is is just a partial example it is a good one to use as dotnet is available in many different places via different methods

GH:dotnet|runtime|9.0|MAR:mcr.microsoft.com/dotnet/runtime:10.0|winget:Microsoft.DotNet.Runtime.9|apt:dotnet-runtime-9.0|dnf:dotnet-runtime-9.0|

More to come

Obviously as you can tell this is still an initial draft, and once I’ve slept on this a little more I think I’ll have more of an idea about how to evolve this in such a way that it definitely can become useful to me and others in future.

Especially when I think of some of the many different kinds of content hosts that are out there.

Comments

Let me know in the Comments below or via my socials what you think!

Chow4Now!

Comments : 0

Comments for this post yet are either not opened yet or it has been decided not to have any for this post or something is up with how we are trying to display them. If you think there should be comments on this post please let our webmaster know. Otherwise, please try again later!