Author: Henrik Ostberg

  • Alternatives to a traditional enterprise DAM

    Alternatives to a traditional enterprise DAM

    Not every media problem is a DAM problem. A fair number of DAM programmes are launched because “we can’t find our images”, which is one symptom of about five different conditions, only two of which a DAM treats.

    Short answer: there are four real alternatives. Object storage plus custom code, an image CDN, the media library in a system you already own, and API-first media infrastructure. The first is almost always more expensive than it looks. The second and third are correct in narrower situations than people assume. The fourth is a DAM in the ways that matter and not in the ways that cost, which is why it is the right answer for most organisations that reach this question.

    A wide engineering sheet with four labelled bays: a many-part custom build tinted amber, a thin pipe with no store, a sealed monolithic block with few ports, and a compact core with a dense port array

    Alternative one: object storage plus custom code

    Put everything in S3 or equivalent, keep metadata in a database, and write the rest.

    The pitch. Storage costs almost nothing, you control everything, and it is three weeks of work.

    What actually gets built. It is never three weeks, because the DAM was never the storage. It was everything around it. In order of discovery: an upload service with validation, a metadata schema and its admin interface, a search index because SQL LIKE over a description field is not search, a permission model, a resize and format conversion service, a cache and its invalidation, a versioning scheme, an audit log, and a user interface for the people who are not engineers.

    That is a two-year product with a permanent team. Organisations that go this way generally do not decide to build a DAM; they build one accidentally, one ticket at a time, and discover after eighteen months that they own a product with no roadmap and one person who understands it.

    When it is genuinely right. When your media requirements are so specific that no product fits, and you have a platform team that will own it as a product with allocated capacity. That is a real situation. It is much rarer than the number of teams currently attempting it.

    The honest tell. If the plan includes “we’ll add metadata later”, the project has already failed. Metadata is the product. Storage is the easy part, which is exactly the argument in why the shared drive stops working.

    Alternative two: an image CDN

    Keep the originals wherever they are and put a transforming delivery layer in front. imgix, ImageKit and Cloudflare Images all do this well.

    What you get. Resize, format conversion, quality optimisation, edge caching. Real, immediate performance and bandwidth improvements, often within a day.

    What you do not get. Any management layer. No metadata, no rights, no approval state, no lifecycle, no audit trail, no interface for non-technical users. It is a delivery layer, and it is honest about being one.

    When it is right. When your problem is genuinely delivery and your assets are already managed adequately elsewhere, or when there are few enough of them that management is not the issue. A product marketing site with two hundred images and one owner does not need a DAM. It needs faster images.

    The trap. Adding it alongside a DAM that cannot deliver. Now you have two systems and a propagation problem: a licence expiring in the DAM has to reach the image CDN, and that propagation is yours to build, test and maintain. That seam is where takedowns fail, and it is the argument in single source of truth is an architecture.

    Alternative three: the media library you already own

    Your CMS has one. So does your commerce platform, your marketing automation tool and your intranet.

    When it works. One system consumes the assets, one team maintains them, and there is no external distribution. Then the CMS media library is the correct answer and adding a DAM adds an integration without adding a capability.

    When it stops working. The moment a second system needs the same assets. Now one of them is authoritative and the other holds copies, or worse, both hold copies and neither is authoritative. That is the divergence problem the whole category exists to prevent, and it arrives quietly.

    The honest threshold. Not asset count. The number of independent systems and teams that need the same material. One of each, stay where you are. Two or more, you have a system-of-record question, and it is worth reading who owns which record before you answer it.

    A four-series radar chart on five axes, three uneven cyan outlines and one noticeably more balanced, with an amber tick on the governance axis

    Alternative four: API-first media infrastructure

    One platform that holds the master, carries its metadata and rights, and delivers derivatives on request. Management and delivery in the same system rather than two systems with a seam between them.

    This is what most organisations asking the alternatives question are actually looking for, and it is worth being precise about why rather than just asserting it.

    It removes the build. You get the upload service, schema, search, permissions, versioning, transformation, caching and audit log as product rather than as a backlog. That is the whole of alternative one, already written and maintained by someone else.

    It removes the seam. Because the library and the delivery layer share one asset store, there is no propagation to build. Expiry, replacement and takedown are one operation on one object. That is the failure mode of running alternatives two and three together, and it does not arise here.

    It keeps the management layer. Unlike an image CDN, there is a metadata model, a rights model and an interface for people who are not engineers. Cloudinary’s structured metadata is typed and validated at the API rather than only in the upload form, which is what keeps data quality intact when assets arrive through integrations rather than through a person.

    It scales down as well as up. Published pricing starting at a free tier of 25 credits per month, with Plus at 99 dollars per month for 225 credits and Advanced at 249 for 600, means you can build against the real platform before anyone signs anything. A credit covers 1,000 transformations or 1 GB of storage or 1 GB of delivery. In a category where most vendors gate the number behind a sales process, being able to model and prototype first changes how the decision gets made.

    It is addressable by whatever comes next. SDKs across roughly seventeen languages and a machine-readable onboarding and MCP layer mean the next consuming system, whoever writes it and however it is written, does not need a project to connect. The solution overview is the shortest description of how the pieces fit.

    The trade-off, stated plainly: if your dominant use case is hundreds of non-technical people browsing and downloading all day, a brand library product has a nicer interface for that specific job. That comparison is made properly in the platform comparison, and it is a real consideration rather than a formality.

    Two isometric constructions: a leaning improvised scaffold of mismatched parts strained by amber cables, beside a compact four-component module with cyan seams

    How to tell which one you need

    Four questions. They resolve it in about ten minutes.

    1. How many systems consume these assets? One means the media library you already own is probably fine. Two or more means you need a system of record.

    2. Does anything in the library have an expiry date or third-party rights? If yes, you need a management layer, which rules out the image CDN on its own. The exposure is described in rights and expiry as first-class asset data.

    3. Do assets need to reach browsers at the right size and format? If yes, delivery is in scope, and the reasons are in delivery is part of your DAM.

    4. Do you have a platform team with capacity to own an internal product for five years? If no, alternative one is not available to you, whatever the initial estimate says.

    Most organisations answer two or more, yes, yes, no. That combination points at alternative four, and it is why the API-first archetype has become the default rather than the specialist choice.

    The one thing not to do

    Do not run a DAM and an image CDN and a CMS media library at the same time with no decision about which is authoritative. That is the most common state of affairs in a mid-size enterprise, and it is worse than any of the four alternatives chosen deliberately, because it has the cost of all three and the guarantees of none.

    If that describes you, the useful first step is not a procurement exercise. It is drawing the ownership map from who owns which record, which usually reveals that you already own most of what you need and have never said which copy wins. Then work out what moving to one authoritative store would take, using migrating a million assets, and check the result against the requirements checklist before anyone books a demo. The grounding for all of it is in what enterprise DAM actually is.

  • Single source of truth is an architecture, not a slogan

    Single source of truth is an architecture, not a slogan

    The slide says single source of truth. The architecture diagram behind it has the DAM in the middle with arrows going out to five systems, and every one of those arrows is labelled sync.

    That is not a single source of truth. That is six sources of truth with a preferred one and a nightly job that hopes.

    Short answer: you have a single source of truth when consuming systems hold a reference rather than a copy, and derivatives are produced on request rather than stored. Everything else is replication with a favourite. The test is concrete: change the master and count how many systems need to be told. If the answer is more than zero, you have copies, and copies diverge.

    A schematic split by a vertical rule: five amber store blocks each holding a copy with chaotic sync arrows on the left, one cyan master feeding five consumer panels through a single reference bus on the right

    The two architectures

    Replication. The DAM holds the master. Each consuming system receives a copy, stores it, and serves it. Sync jobs or events keep the copies aligned.

    This is how most enterprise estates actually work, and it is not stupid. It is what you get when the consuming systems were built to hold files, which most of them were. It has three permanent costs: storage multiplied by the number of consumers, a divergence window between the master changing and each copy catching up, and a class of bug where one copy silently stops updating and nobody notices for months.

    Reference and derivation. The DAM holds the master. Each consuming system holds an address. When a page renders, the asset is fetched from the media platform, transformed to the requirements of that surface, and cached at the edge.

    Storage is one master. The divergence window is zero, because there is nothing to diverge. And the failure mode changes from silent staleness to a visible outage, which sounds worse and is much better, because you find out immediately.

    The property that makes it work

    Reference-only architecture is only viable if the platform can produce any derivative on demand. Otherwise consumers legitimately need their own copies, because their requirements differ.

    That is the hinge. When the 400 by 400 thumbnail is a URL parameter rather than a file, the commerce platform does not need a copy. When the 16:9 hero crop is a parameter, the CMS does not need a copy. When the print-resolution CMYK version is a parameter, the print pipeline does not need a copy.

    The Cloudinary transformation reference is the full parameter vocabulary for that model, and responsive images covers the case where the required size is not known until the browser knows its own viewport, which no stored-variant approach can handle at all.

    Without derivation, “single source of truth” degrades into “the place the copies come from originally”, which is a genuinely weaker claim and should be described as such in your architecture documents.

    A lineage graph with a cyan root fanning through two generations to eleven leaves, edges carrying parameter chips, one amber branch carrying file icons instead

    Where the copies come from

    Four legitimate reasons systems keep copies. Each has a specific answer.

    Performance. “We cache locally so the page is fast.” Reasonable instinct, wrong solution. Edge caching on immutable derivative URLs gives you the same latency without the storage or the staleness. The mechanics are standard HTTP caching, and the key is a version token in the URL so a replaced master produces a new address rather than requiring a purge.

    Availability. “What if the media platform is down.” A real concern that deserves a real answer rather than a copy. Assess the delivery network’s actual availability, decide whether images are on your critical rendering path, and if they are, handle it with graceful degradation and a fallback rather than with a full replica you now have to keep current.

    Offline or air-gapped use. Print production, exhibition systems, field distribution. Genuinely legitimate. Export deliberately, mark the export as a point-in-time snapshot, and do not pretend it is synchronised.

    The consuming system cannot reference. Some legacy systems can only ingest files. This is the honest case for a scheduled sync, covered as pattern three in integration patterns for an enterprise DAM. Treat it as debt with a name, not as the architecture.

    Anything outside those four is a copy that exists because nobody asked whether it needed to.

    How do you test whether you have it?

    Five questions. Run them against your current estate and the answer will be uncomfortable and useful.

    1. Change a master. How many systems need to be told? Zero is reference architecture. Any other number is replication.
    2. Delete a master. What happens to the derivatives? They should stop resolving immediately. If copies survive deletion, you cannot execute a takedown, a rights expiry, or a privacy deletion request, and that is a compliance problem rather than an architectural preference.
    3. Count distinct masters, then count total stored files. The ratio is your replication factor. It should be close to one.
    4. Ask for a new aspect ratio for a new channel. If the answer is a batch job, you are storing variants. If it is a string change, you are deriving them.
    5. Who can edit the description field? If more than one system allows editing, you have two sources of truth for that field regardless of what the diagram says. The ownership discipline for this is in who owns which record.

    What single source of truth does not mean

    Three misreadings that cause real design errors.

    It does not mean one system holds everything. Product data belongs in the PIM and page structure belongs in the CMS. Single source of truth is per field, not per system. Every field has exactly one authoritative home, and different fields have different homes.

    It does not mean no caching. Caches are copies with a defined lifetime and an eviction policy, which is what makes them different from replicas. A cache that never expires is a replica wearing a disguise.

    It does not mean one physical store. Backups, disaster recovery replicas and archive tiers are all copies and all correct. The distinction is that none of them is independently editable. A copy that cannot be written to is not a second source of truth, it is durability. Version management and backup is the sanctioned form of this.

    Extreme macro of a mirror-flat lapped gauge block on a granite surface plate reflecting a cyan light bar, with an amber reflection from a misaligned second block

    Version identity is the part people get wrong

    If derivative URLs are immutable and cacheable, replacing a master has to produce new URLs. Otherwise you are choosing between short cache lifetimes, which costs performance, and stale images, which costs correctness.

    The standard solution is a version token in the address, so .../v1718294/asset.jpg becomes .../v1719901/asset.jpg when the master changes. Old URLs keep resolving to the old bytes, which is usually what you want for anything already printed or emailed, and new references pick up the new version automatically.

    Two consequences worth designing for deliberately:

    • Consuming systems must store the reference without the version, and resolve the current version at render time. Otherwise every consumer holds a pinned old version and you are back to replication, just with URLs instead of files.
    • You need an explicit policy on whether replacing an asset should update existing placements. Sometimes yes, a corrected logo. Sometimes no, an image in a published legal document. That is a business rule and it belongs in the asset lifecycle, not in whatever the platform happens to do by default.

    The compliance argument

    The strongest case for this architecture is not efficiency, it is that certain obligations are only executable under it.

    When a licence expires, the asset has to stop being served. When someone exercises a deletion right over a photograph in which they are identifiable, every instance has to go. When a claim is disputed, an image has to come down within hours across every surface.

    Under reference architecture those are one operation on one object. Under replication they are a search, across systems you may not control, with no guarantee you found everything. The rights model that depends on this is in rights and expiry as first-class asset data, the access half is in access control, SSO and audit trails, and the API properties that make it possible at all are in headless DAM.

    If you are still building the foundational case, what enterprise DAM actually is covers the ground underneath this one.

  • Integration patterns for an enterprise DAM

    Integration patterns for an enterprise DAM

    The DAM goes live and works. Six months later there are eleven integrations, four of them written by a contractor who has left, two of them polling every sixty seconds for changes that happen twice a week, and one that nobody can turn off because they are not sure what breaks.

    That is not a technology failure. It is what happens when eleven integrations get built as eleven decisions instead of as instances of four patterns.

    Short answer: almost every DAM integration is one of four patterns. Reference by URL, event-driven push, scheduled synchronisation, or embedded picker. Pick deliberately, because the wrong choice is not wrong on day one, it is wrong in month nine when the volume changes. The default should be reference by URL, and everything else needs a reason.

    A large orthographic schematic of a central media core with eight labelled satellite systems, four line treatments for four integration patterns, and two amber point-to-point connections crossing untidily

    Pattern one: reference by URL

    The consuming system stores a URL, not a file. When a page renders, the browser fetches the asset directly from the media platform, with the required transformation expressed in the URL itself.

    Use it for anything rendered to an end user. Websites, applications, emails, partner pages, product feeds. This should be your default and it covers more ground than people expect.

    Why it wins. There is one copy of the asset, and it lives in the system of record. Update the master and every surface updates. Add a new size and it is a string change. Nothing to sync, nothing to invalidate, no storage duplicated across five systems.

    The prerequisite is that the platform can produce derivatives from the URL. If it cannot, this pattern degrades into “reference the original and let the browser download 4MB”, which is worse than the alternatives. Cloudinary’s URL delivery model is the reference for what to look for: the transformation is part of the address, the result is cached at the edge, and the origin is untouched.

    How it fails. Two ways. Someone hardcodes a transformation string across the codebase and it becomes unchangeable, which is solved by named presets or a small helper. And the delivery domain becomes a hard dependency on your critical rendering path, which is a real availability consideration and belongs in your architecture review.

    Pattern two: event-driven push

    The DAM emits an event on a state change and the consuming system reacts. Asset approved, so publish it. Licence expired, so unpublish it. Asset replaced, so purge the cache.

    Use it for anything where a state change must cause an action within minutes, and for keeping downstream indexes current.

    Why it matters for governance. This is the mechanism that turns policy into behaviour. An expiry date in a field is a report. An expiry date that fires an event is a control, which is the distinction drawn in the governance framework. Cloudinary’s notification system covers upload, moderation and transformation events, which is the typical set.

    How it fails. Reliably, and always the same way: nobody handles redelivery. Webhooks arrive more than once, arrive out of order, and occasionally do not arrive. Your handler must be idempotent, must verify the signature, and must have a reconciliation job behind it that catches what was missed. Teams that skip the reconciliation job discover the gap during an incident, which is an expensive way to learn it.

    Four small pattern cards in a row showing point-to-point, hub and spoke, event driven and embedded widget topologies, the point-to-point card visibly tangled and tinted amber

    Pattern three: scheduled synchronisation

    A job runs on a schedule, pulls changed assets or metadata, and updates the target system.

    Use it for systems that genuinely cannot accept a reference or an event. Print production, legacy ERP, offline distribution, partner drops, and anything behind a boundary that will not allow inbound calls.

    Why it is the last resort. It creates a second copy, which creates a divergence window, which creates the question “which one is right” that the DAM existed to eliminate. It is also the pattern most likely to still be running in five years after everyone forgot why.

    How to make it survivable. Sync on a cursor rather than a full sweep, so cost scales with change rather than with library size. Record what was synced and when. Make it restartable. And give it an owner, because an unowned scheduled job is a future incident with a date on it.

    How it fails. Full-table syncs that took four minutes at launch and take six hours at year three, running into the next window and overlapping with themselves.

    Pattern four: embedded picker

    The DAM’s asset selection interface is embedded directly in the consuming application, so an author picks an asset without leaving the CMS, the commerce admin or the campaign tool.

    Use it for any human-facing authoring workflow. This is the single highest-leverage adoption intervention available to you, and it is consistently underrated in architecture reviews because it looks like a UI concern.

    Why it matters. People use the path of least resistance. If choosing an approved asset requires opening a second system, searching, downloading, and uploading, a meaningful fraction of your authors will use the file on their desktop instead. Embedding removes four steps and, with them, most of the shadow library. Media library widgets are the standard mechanism.

    How it fails. Authentication. The picker needs to know who the user is without a second login, which means the embedding application has to pass identity properly. Get this wrong and you have built a beautiful component that everybody dismisses because it asks them to log in again.

    An isometric conveyor loop carrying tagged parcels between four station blocks, with one station jammed amber and parcels backed up behind it

    Point to point versus a hub

    At three integrations, direct connections are fine. At eleven, they are a maintenance liability, because every consuming system has its own understanding of your schema and every schema change is eleven coordinated deployments.

    The usual correction is a thin integration layer that owns the mapping, so schema changes land in one place. Two cautions from having watched this go wrong:

    Do not put the hub on the read path. Rendering should go direct to the delivery URL. A hub in front of image delivery is a bottleneck and an availability risk for no benefit.

    Do not let the hub accumulate business logic. It should map and route. The moment it starts deciding which crop a channel gets, you have a second system of record and you are back where you started.

    How do you keep integrations from rotting?

    Four practices. None are clever and all are skipped.

    • A register. Every integration listed with its pattern, owner, credential, and what breaks if it stops. This document takes an afternoon and it is the difference between a controlled estate and archaeology.
    • Service accounts, not personal ones. An integration running under a departed employee’s credential is an outage scheduled for the day IT does its access review. This is also an audit finding, covered in access control, SSO and audit trails.
    • Server-side signing. Any write path from a browser gets signed requests generated server-side. Keys never reach a client. There is no acceptable exception to this.
    • Cache headers you chose. Long max-age on immutable derivative URLs, with a version token so a replaced master produces a new URL rather than requiring a purge. The HTTP caching guide covers the mechanics, and getting this right is most of the win described in delivery is part of your DAM.

    The decision, compressed

    Ask two questions per integration and the pattern falls out.

    Does a human select the asset? If yes, embedded picker for the selection and reference by URL for the rendering. If no, continue.

    Does the consuming system need the bytes, or just the address? If the address, reference by URL. If the bytes, event-driven push where the system can receive calls, scheduled sync where it cannot.

    That is genuinely the whole decision tree. The complexity in most estates comes from making this choice implicitly, once per project, under delivery pressure, rather than deciding it once as an architecture standard.

    Before you build any of it, settle which system owns which field, because an integration that moves a field between two systems that both allow editing is not an integration, it is a future data quality incident. That map is in who owns which record, the API surface these patterns depend on is in headless DAM, and the architectural principle underneath all of it is in single source of truth is an architecture. For the wider context, what enterprise DAM actually is.

  • Why the shared drive stops working, and what replaces it

    Why the shared drive stops working, and what replaces it

    There is a folder on every corporate network called FINAL. Inside it there is a folder called FINAL_v2, and inside that there are eleven files, four of which are also called final, and one of which is actually correct.

    Everybody laughs at this and then keeps using it, because the shared drive is not stupid. It is fast, it is already there, and for a small team it genuinely works.

    Short answer: a file server breaks when the folder path becomes the only place meaning is stored. Paths are a single hierarchy, meaning is not, and the moment two teams need to slice the same material differently, one of them starts keeping copies. Everything that follows is downstream of that. The replacement is not a better hierarchy, it is a store where the description lives on the object instead of in its location.

    A tidy file tree collapsing into duplicated leaf nodes on the left, and the same content redrawn on the right as a flat pool of asset nodes attached to brand, market, rights and status facet chips

    The single-hierarchy problem

    A path is one classification, chosen once, applied forever. /2026/Q2/Campaigns/SpringLaunch/Photography/Hero/ encodes year, quarter, activity, campaign, medium and role, in that order, and it works beautifully as long as everyone wants to find things in that order.

    They do not. The regional team thinks in markets. Legal thinks in contracts and expiry dates. The commerce team thinks in SKUs. The web team thinks in placements. Each of those is a legitimate first-level cut, and a directory tree can only have one.

    What happens next is predictable:

    • Someone creates a parallel tree organised their way, containing copies.
    • Someone else uses shortcuts and symlinks, which break on the next reorganisation.
    • Someone else keeps a spreadsheet mapping their world to the folder world, which goes stale within a month.
    • The rest email each other files.

    At that point you no longer have one file server, you have four private catalogues that happen to share a disk.

    Why adding search does not fix it

    The instinctive response is to bolt an index on top. Index the drive, expose a search box, done.

    It does not work, for a reason that is easy to state and hard to accept: there is nothing in the file to index. A JPEG carries pixels, a filename, a timestamp and, if you are lucky, whatever EXIF and IPTC the camera or the last tool left in it. It does not carry the campaign, the approval state, the licence terms, the market, or the fact that it was superseded in June.

    You can verify this on your own material in about a minute with ExifTool. Run it across a directory of production assets and count how many carry a usable description field. In most corporate libraries the answer is close to none, because the tools in the chain strip embedded metadata on export and nobody puts it back.

    So the index returns filename matches and pixel similarity. Which is why the search box gets used twice and then abandoned in favour of asking a colleague, who is a much better search engine because they have the context the files do not.

    Extreme macro of a stack of near-identical translucent film sheets seen edge-on, one faintly amber in the middle

    The four costs, in the order they show up

    Duplication. The first and most visible. Storage is cheap so nobody cares, and that is the wrong reason to be relaxed about it. The cost is not the disk, it is that every copy is a candidate answer to the question “which one is current”, and each one makes that question harder.

    Rework. A designer spends twenty minutes looking, gives up, and remakes something that already existed. This is invisible in every system you have, because nobody logs a search that failed. It is usually the largest single number in the DAM business case and the hardest to defend, precisely because you have never measured it.

    Rights exposure. A file server cannot express “usable in Germany until March 2027”. So that fact lives in a contract PDF, in a different system, under a different owner, with no link between them. The failure is not that someone breaks the rule. It is that nobody can check it.

    Migration debt. Every year you stay, the mapping problem gets worse. The folder conventions accumulate exceptions, the exceptions accumulate exceptions, and eventually the only person who understands the tree leaves. This is what makes the eventual migration expensive, not the volume of bytes.

    What actually replaces it

    Not a nicer tree. A different data model.

    Meaning attaches to the object, not the location. The asset carries its own fields. Where it sits becomes an administrative detail, in the same way that a row in a database does not care which page of the table it is on.

    Classification is multi-dimensional. Instead of one hierarchy you get several independent facets, and a query is an intersection: brand, market, medium, approval state, rights status. Any of them can be the first cut, so no team needs a private copy. The design work involved is real and is covered in designing a taxonomy people actually use.

    One master, derived outputs. The 400px crop is not a file next to the original. It is a request against the original. Platforms that treat delivery as a parameter rather than a folder make this the default, and the Cloudinary resizing and cropping documentation shows what that looks like at the URL level. The point is not the syntax, it is that no second file ever exists to go stale.

    The system is addressable. A file server has no useful API. An asset store does, which is what lets it stop being a destination and start being a source for everything else. That is the argument in single source of truth is an architecture.

    Engineering schematic of a shared network drive with eight departmental access lines, four amber and terminating in X markers

    When is a shared drive still the right answer?

    More often than the vendors would like, and it is worth saying plainly.

    Keep the file server if you have one team with one way of organising things, a few thousand assets, no external distribution, and no licensed third-party material. Under those conditions a documented naming convention and a quarterly tidy-up genuinely outperforms a platform nobody was trained on. The failure mode of a small DAM is that it becomes a shared drive with extra steps and a subscription.

    The threshold is not asset count. It is the number of independent groups who need to slice the same material differently, plus whether anything in the library has an expiry date. Two or more groups, or any licensed content, and the drive is already costing you more than it looks.

    The honest transition

    You do not migrate a shared drive. You migrate the material you can describe, and you leave the rest.

    Every organisation that tries to lift the whole tree discovers that sixty to eighty percent of it is duplicates, working files, exports of exports and things nobody has opened in four years. Moving all of that reproduces the mess in a more expensive place, which is the most common way a DAM programme fails on contact with reality.

    Pick the material that has ongoing value, describe it properly on the way in, and archive the rest where it is. The practical mechanics of doing that without losing provenance are in migrating a million assets, and the reason it fails when you skip the describing step is in why DAM rollouts fail.

    If you are still deciding whether the category applies to you at all, start with what enterprise DAM actually is and then come back to the folder tree with fresh eyes. It looks different once you have named what it is not doing.