<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Softeria guides</title>
    <link>https://softeria.com/guides</link>
    <atom:link href="https://softeria.com/guides/feed.xml" rel="self" type="application/rss+xml" />
    <description>Long-form answers to the questions that come up in evaluations and handover meetings.</description>
    <language>en</language>
    <lastBuildDate>Mon, 05 Oct 2026 00:00:00 GMT</lastBuildDate>
    <image>
      <url>https://softeria.com/brand/og/softeria.f31813ef.jpg</url>
      <title>Softeria guides</title>
      <link>https://softeria.com/guides</link>
    </image>
    <item>
      <title>Single sign-on: one login, and one place to take it away</title>
      <link>https://softeria.com/guides/single-sign-on</link>
      <guid isPermaLink="true">https://softeria.com/guides/single-sign-on</guid>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <category>Data and access</category>
      <dc:creator>Softeria</dc:creator>
      <description>What single sign-on actually is, what separate passwords cost on the day someone leaves, why groups beat per-tool user lists, and the questions IT should ask before a new tool is allowed to have users at all.</description>
      <content:encoded><![CDATA[<p><em>Every internal tool with its own password is a list of people somebody has to remember to update. Single sign-on replaces all of those lists with the one you already keep.</em></p><h2>The short version</h2><ul><li>Single sign-on means the tool holds no password. It asks your company directory who the person is, and believes the answer.</li><li>The real benefit is not convenience. It is that switching off one account in one place ends access everywhere.</li><li>Let the groups you already maintain decide who reaches what, so there is no second list of people to keep in step with the first.</li><li>Ask before you buy: which standard, whether password login can be turned off, how long a session outlives the account, and whether single sign-on costs extra.</li></ul><p>Count the internal tools in your organisation that have their own login screen: the booking system, the supplier register, the form a department built, the reporting tool somebody bought on a card. Each one keeps its own list of users and its own passwords, and each of those lists has to be updated by hand every time somebody joins, changes role or leaves.</p><p>Most of those lists are wrong right now. Not badly wrong, just slightly: a contractor from last spring, a colleague who moved to another department and kept what they had. Single sign-on is the way to stop keeping the lists at all.</p><h2>What single sign-on actually is</h2><p>With single sign-on, the tool never sees a password. When someone opens it, they are sent to the company’s identity provider — Microsoft Entra ID, Google, Okta or similar — which checks who they are in whatever way the company has decided, and sends them back with a signed statement: this is Kari, she is in these groups. The tool trusts that statement and lets her in.</p><p>Two standards do almost all of this work. OpenID Connect is the newer one and what most modern tools use; SAML is older and still common in large enterprise software. Either is fine. What matters is that it is one of them, rather than something a vendor invented.</p><ul><li><strong>It is not a password manager.</strong> A password manager remembers many passwords for you. Single sign-on means there is only one, and only your directory holds it.</li><li><strong>It is not “the same password everywhere”.</strong> Syncing one password into ten systems puts ten copies of it in ten places. Single sign-on puts it in none of them.</li><li><strong>It is not a personal “Sign in with Google”.</strong> A private Gmail account signing in to a work tool is still a personal account. It has to be the company’s directory, or the company cannot switch it off.</li></ul><h2>What separate passwords cost</h2><p>The case for single sign-on is usually made as convenience — one login instead of twelve — and convenience is the weakest part of it. The costs of separate passwords are elsewhere.</p><ul><li><strong>Leavers keep access.</strong> Offboarding switches off the company account. It does not reach the tool with its own user list, unless somebody remembers that tool exists and has the rights to change it.</li><li><strong>Your security rules stop at the door.</strong> Two-factor sign-in, blocked countries, managed devices only — whatever your directory enforces, a tool with its own password skips all of it.</li><li><strong>Passwords get reused.</strong> People do not invent a strong new password for the canteen booking system. They use one they already have, which is now only as safe as the least careful site they used it on.</li><li><strong>Nobody can say who has access.</strong> When an auditor or a customer asks who can reach a system, the answer is spread across a dozen admin screens, and some of them belong to people who have left.</li></ul><h2>The day someone leaves</h2><p>This is the moment single sign-on is really for. Disable one account in the directory, and the next time that person tries to open any connected tool, the identity provider says no. There is no list to work through, so there is nothing on it to forget.</p><p>It is worth being precise about the gaps, because there are some, and they are where the checking should go.</p><ul><li><strong>Sessions already open.</strong> A person who signed in this morning may stay signed in until their session runs out, even after the account is disabled. Find out how long that is in each tool — minutes and hours are fine, weeks are not.</li><li><strong>Logins that go round the side.</strong> Many tools keep a password login alongside single sign-on, for the first administrator or out of habit. An account created there is outside your directory and survives everything above.</li><li><strong>Keys and tokens.</strong> Integration keys and personal access tokens are often created by a person and outlive them. They should belong to a service, with a named owner, not to whoever set it up.</li></ul><blockquote><p><strong>Keep one way in that does not depend on the directory</strong></p><p>Turning password login off entirely has one real risk: if the identity provider is unavailable or misconfigured, nobody can get in to fix anything. The answer is one emergency administrator account, kept sealed, its use logged and checked — not a password login left open for everyone.</p></blockquote><h2>Groups, not lists</h2><p>Single sign-on answers “who is this”. The next question is “what may they do”, and the tempting answer is to give each tool its own list again: Kari is an editor here, an administrator there. That rebuilds the problem single sign-on just removed.</p><p>The better pattern is to let the groups you already maintain decide. The finance group can approve invoices; the warehouse group can register deliveries. When Kari moves from finance to the warehouse, somebody changes her groups in the directory — which they were going to do anyway — and every tool follows without being touched.</p><p>Groups decide which doors a person may open. They do not decide which records are theirs once inside: that is a separate question, answered at the data, and the guide on row-level security covers it.</p><h2>What to ask before a tool gets users</h2><p>These are the questions worth asking of any tool, bought or built, before anybody is allowed to sign in to it. Each has a short answer if the vendor has thought about it.</p><ul><li><strong>Which standard?</strong> OpenID Connect or SAML, and does it work with the identity provider you actually run? “We support Microsoft” is not an answer until you know which part of Microsoft.</li><li><strong>Is it included?</strong> Single sign-on is often kept for the most expensive plan. Find out before the pilot, not at renewal, because the cheap plan with separate passwords is the one people will quietly keep using.</li><li><strong>Can password login be switched off?</strong> If it cannot, single sign-on is an option, not a rule, and the side door stays open.</li><li><strong>Are groups read at sign-in?</strong> Does access follow the groups in your directory as they are today, or are they copied once and left to drift?</li><li><strong>How long does a session outlive the account?</strong> The honest number, and whether an administrator can end a session early.</li><li><strong>Where are sign-ins recorded?</strong> Your identity provider records that someone signed in. The tool should record what they did once they had — and you should be able to read it.</li></ul><h2>How this works on our platform</h2><p>Since you may be reading this on the site of a company that sells a platform: what gets built with Softeria signs people in with the accounts they already have — Microsoft Entra ID, Google Cloud Identity, or any standards-compliant OpenID Connect provider, such as Okta, Auth0 or Keycloak. We issue no new passwords, the groups you already maintain decide who reaches what, and when someone leaves your directory their access ends.</p><p>The part worth keeping whatever you use: a tool that keeps its own list of people is a tool somebody will forget on the day it matters. Make the directory the only list, and offboarding becomes one step instead of a hunt.</p><h2>Read next</h2><ul><li><a href="https://softeria.com/faq#sign-in">How do people sign in?</a> — The short answer, in the questions and answers</li><li><a href="https://softeria.com/guides/row-level-security">Row-level security explained</a> — Once you know who someone is, which records are theirs</li><li><a href="https://softeria.com/guides/shadow-it">What to do about shadow IT</a> — Where most of the separate passwords come from</li></ul>]]></content:encoded>
      <enclosure url="https://softeria.com/brand/og/softeria.f31813ef.jpg" length="190527" type="image/jpeg" />
      <media:content url="https://softeria.com/brand/og/softeria.f31813ef.jpg" medium="image" type="image/jpeg" width="2400" height="1260" />
    </item>
    <item>
      <title>Row-level security, and why it belongs in the database</title>
      <link>https://softeria.com/guides/row-level-security</link>
      <guid isPermaLink="true">https://softeria.com/guides/row-level-security</guid>
      <pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate>
      <category>Data and access</category>
      <dc:creator>Softeria</dc:creator>
      <description>What row-level security is, the three places teams put record-level rules, why the ones written in application code eventually leak, and the checks that tell you whether yours actually holds.</description>
      <content:encoded><![CDATA[<p><em>Almost every application has a rule of the form “you may only see your own records”. Where that rule is written decides whether it is a guarantee or a habit.</em></p><h2>The short version</h2><ul><li>Row-level security answers “which records”, not “which endpoints”. They are separate questions and they need separate mechanisms.</li><li>A rule enforced in screens or in handler code holds only as long as every future query remembers it. That is a bet on a team’s memory, indefinitely.</li><li>Declared at the data, the rule is applied to every query — including the report, the export button and the background job somebody adds next year.</li><li>Test it as an attacker would: ask for a record by id that you should not be allowed to see, and watch what comes back.</li></ul><p>Row-level security is the answer to a question every application with more than one customer has to answer: of all the rows in this table, which ones is this particular person allowed to touch? Not “may this person read invoices” — that is a coarser question about the endpoint — but “may this person read this invoice”.</p><p>The distinction sounds pedantic until you notice that most data leaks are not break-ins. They are ordinary, authenticated users receiving rows that were never meant for them, from a query nobody thought about twice.</p><h2>Two questions that get confused for one</h2><p>Access control in a typical application is really two decisions stacked on top of each other, and they fail in different ways.</p><ul><li><strong>Method-level access:</strong> may this caller use this operation at all? “Any signed-in user may read the bookings collection. Only an administrator may delete one.” This is a yes-or-no decision made before any data is read, and it is usually driven by a role on the user’s login token.</li><li><strong>Row-level access:</strong> given that they may read bookings, which bookings? “The ones for their own company.” This is a filter applied to the data itself, and it can only be answered by looking at how the record relates to the person asking.</li></ul><p>Teams reach for roles to solve both, because roles are the tool that is already there. It works right up to the first customer who wants two of their own users to see different subsets of their own data — at which point you are inventing a role per customer, and the role list has become a slow, badly indexed copy of your data model.</p><h2>The three places the rule ends up</h2><p>In practice, record-level rules end up in one of three places, and they are not equivalent.</p><ul><li><strong>In the interface.</strong> The screen only ever shows the current user’s records, so nobody sees anything they should not. This is not security; it is layout. The underlying request can be re-issued by hand with a different id in it, and everything the interface was hiding comes back.</li><li><strong>In the endpoint code.</strong> Every handler adds a condition — <code>where company_id = current_user.company_id</code> — before it runs the query. This is real enforcement, and it works. It also has to be repeated in every handler, forever, by everyone, including the person adding a CSV export at half past four on a Friday.</li><li><strong>At the data.</strong> The rule is declared once, against the relationship that makes a record “yours”, and the database applies it to every query on that table regardless of which piece of code asked. There is no handler to forget, because the filter is not in the handler.</li></ul><p>The second option is the common one and it is worth being precise about why it disappoints. It is not wrong. It is correct on the day it is written and it decays: an endpoint that was safe stays safe, but the surface keeps growing — a reporting query, an admin screen, a webhook, a scheduled job, an AI assistant that queries the same tables. Each one is a fresh opportunity to leave the condition out, and nothing in the system objects when you do.</p><blockquote><p><strong>The failure is quiet</strong></p><p>A missing authentication check breaks loudly: nobody can log in. A missing row filter breaks silently — the endpoint works, returns data, passes its tests, and hands the wrong customer’s rows to whoever asks. It is usually found by a customer, which is the expensive way to find it.</p></blockquote><h2>The rule is a path through your data</h2><p>The reason record-level rules resist being expressed as roles is that “yours” is almost never a property of the record. It is a path: this task belongs to a project, which belongs to a team, which you are a member of. Ownership is two or three relationship hops away, and it changes when somebody joins or leaves.</p><p>That is the shape a good row-level mechanism takes as its input. You point at the relationship that carries ownership, and every query on the collection is narrowed to the records reachable from the person asking. You are describing your data model rather than enumerating cases, which is why it keeps working when the model grows.</p><p>It also gives you something the role-per-customer approach cannot: the same person can hold different rights on different records. Organiser of one tournament, ordinary member of the next, and their login token never changes — because the right is recorded on the membership, not on the person.</p><h2>Multi-tenancy is this problem wearing a suit</h2><p>Multi-tenancy — one running system serving many customers who must never see each other — reads like an architecture decision, and gets discussed as one: separate databases per customer, or one database with a tenant column. But the second option is exactly the problem above, and the first is often chosen mainly to avoid having to solve it.</p><p>Separate databases per customer are genuinely safer against this one failure mode, and they cost you everywhere else: migrations to run per tenant, backups to manage per tenant, cross-customer reporting that becomes a project, and a per-customer setup cost that quietly sets a floor under how small a customer you can afford to take. If the row-level rule holds at the data, a shared database stops being the risky option.</p><h2>How to tell whether yours actually holds</h2><p>Whatever mechanism you use, these are the checks worth doing before you promise a customer that their data is isolated. All of them are half an hour of work and most of them find something the first time.</p><ul><li><strong>Ask for a record you should not have.</strong> Sign in as one customer, take the id of another customer’s record, and request it directly. You should get nothing — not an empty screen, an empty response.</li><li><strong>Try every door, not just the front one.</strong> The list endpoint is usually correct because somebody tested it. Check single-record reads, search, exports, reports, aggregate counts and any real-time subscription separately. Counts are a favourite: “42 results” leaks the existence of rows the list hides.</li><li><strong>Check the write side too.</strong> Reads get the attention; updates and deletes are what change somebody else’s data. Try updating a record belonging to another tenant, and try creating a record that points at one.</li><li><strong>Check what happens when the link is missing.</strong> A record whose owning relationship is empty is nobody’s row. Depending on the mechanism, that means it is invisible to everyone or visible to everyone — and only one of those is safe. Find out which you have.</li><li><strong>Watch what the check costs.</strong> If the rule is applied by joining across relationships, an over-broad configuration can turn one read into a great many joins. Correct but slow is a problem you will meet in production, not in testing.</li></ul><blockquote><p><strong>Subscriptions are the exception worth knowing about</strong></p><p>Live-update mechanisms often sit outside the row filter: a client subscribed to a collection can be told that a record changed, including records it could not read. Usually no field values travel with that — but the existence of the row does. Ask where your real-time layer sits relative to your row-level rules, because it is rarely in the same place.</p></blockquote><h2>How this works on our platform</h2><p>For completeness, since you may be reading this on the site of a company that sells one: on RestAPI.com the row-level rule is a security policy declared on the relationship that carries ownership, and it is applied to every query on that collection. Method-level access stays where it belongs — roles on the token, checked before any data is read — and the two are configured separately because they are different questions.</p><p>The part worth stealing even if you never use our platform: the rule is declared against the data model, not written into handlers. Whatever database or framework you are on, that is the property that decides whether your isolation is a guarantee or a habit.</p><h2>Read next</h2><ul><li><a href="https://softeria.com/products/restapi">RestAPI.com</a> — Data models, APIs and security policies in one platform</li><li><a href="https://softeria.com/faq#who-sees-what">Can we control who sees which records?</a> — The short answer, in the questions and answers</li><li><a href="https://softeria.com/guides/shadow-it">What to do about shadow IT</a> — The other way data ends up somewhere it should not be</li></ul>]]></content:encoded>
      <enclosure url="https://softeria.com/brand/og/softeria.f31813ef.jpg" length="190527" type="image/jpeg" />
      <media:content url="https://softeria.com/brand/og/softeria.f31813ef.jpg" medium="image" type="image/jpeg" width="2400" height="1260" />
    </item>
    <item>
      <title>Who owns the code an AI tool writes for you?</title>
      <link>https://softeria.com/guides/who-owns-ai-generated-code</link>
      <guid isPermaLink="true">https://softeria.com/guides/who-owns-ai-generated-code</guid>
      <pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate>
      <category>Buying software</category>
      <dc:creator>Softeria</dc:creator>
      <description>Ownership, readability and portability are three separate questions hiding inside “do we own it”. What the law is unsettled about, what the contract decides, and the exit test that answers it in practice.</description>
      <content:encoded><![CDATA[<p><em>It is the right question to ask a supplier, and it is three questions in a trench coat. Two of them have clear answers. The one everybody argues about matters least.</em></p><h2>The short version</h2><ul><li>“Do we own it” bundles copyright, readability and portability. Ask them separately or you will get one answer covering for the other two.</li><li>Copyright in purely machine-generated output is genuinely unsettled and varies by country. It is also rarely the thing that hurts you.</li><li>What decides your position in practice is the contract and the exit path: what the terms grant you, and whether the thing runs without the vendor.</li><li>The test that cuts through all of it: could another developer take this and run it next Tuesday, without asking us for anything?</li></ul><p>Ask a supplier whether you own what their tool builds and you will get a confident yes. It is a fair answer to an unfair question, because “own” is doing three jobs at once: who holds the copyright, can you read and change the thing, and can you run it somewhere else. A vendor can be entirely truthful about the first and leave you stuck on the third.</p><h2>The three questions</h2><ul><li><strong>Legal ownership.</strong> Who holds the rights to the output, and what do the terms you signed say about it?</li><li><strong>Transparency.</strong> Can you see the code, read it, review it, and have your own developers change it — or is it behind an editor and a format that only the vendor’s software understands?</li><li><strong>Portability.</strong> If the relationship ends, does what you built keep running? On whose infrastructure, with whose database, and how much work is the move?</li></ul><p>They come apart in ways that matter. You can hold every right to a system you cannot read. You can be able to read code you cannot run anywhere but there. Only the combination is worth anything.</p><h2>The legal part, honestly</h2><p>Copyright in machine-generated output is unsettled, and it is unsettled differently in different countries. The general direction in the United States has been that copyright protects human authorship, and that material produced by a machine without meaningful human creative input is not registrable — while work where a person contributed the creative expression, and used a tool along the way, is treated normally. Other jurisdictions weigh it differently, and the position keeps moving.</p><blockquote><p><strong>This is not legal advice</strong></p><p>We build software, not legal opinions, and the law here is genuinely in motion. If ownership of the output is load-bearing for your business — you intend to license it, sell the company, or defend it — get advice from someone who does that for a living, in your jurisdiction.</p></blockquote><p>The practical consequence is smaller than it sounds. For most internal systems and most products, the question that decides your position is not whether a copyright registration would survive a challenge. It is what your agreement with the vendor grants you, and whether the thing runs without them. Those are contractual and technical questions, and both have clear answers today.</p><h2>What to read in the terms</h2><p>Whatever tool you are evaluating, these are the clauses that decide what you actually walk away with. They are usually short and rarely hidden — but they are also rarely volunteered.</p><ul><li><strong>What is granted on the output.</strong> Does the agreement assign the output to you, or license it to you? A licence can be revoked or made conditional on staying a customer; assignment cannot.</li><li><strong>What happens on termination.</strong> Do your rights to what was built survive the contract ending? If the answer is only implied, it is not an answer.</li><li><strong>What they may do with your code and data.</strong> Is any of it used to train models, or to improve the service in a way that involves keeping it? A plain statement either way is fine; silence is not.</li><li><strong>What you get on the way out, and when.</strong> Data export, database structure, and the application source — in a standard format, on demand, without a support ticket and a wait.</li><li><strong>Whether anything in it only runs there.</strong> Proprietary components, a runtime only they operate, or a build step you cannot reproduce. This one is technical, but it belongs on the same list, because it is what turns a good contract into a bad position.</li></ul><h2>The exit test</h2><p>One question settles most of this, and you can ask it in a sales call: if we left next Tuesday, what exactly would we take, and what would it take to run it? Vendors who have thought about it answer in specifics. Ones who have not answer in reassurance.</p><p>A good answer has four parts, and you should ask to see each one rather than be told about it.</p><ul><li><strong>The source, in a normal shape.</strong> An ordinary project in a mainstream framework that a developer who has never met the vendor can open and understand. Ask to look at a real one before you buy.</li><li><strong>The data, in a format something else reads.</strong> Not a proprietary archive that only imports back into the same product.</li><li><strong>The database structure, not just the rows.</strong> Data without its schema is a large puzzle. Plain SQL for the structure is the thing to ask for.</li><li><strong>A path to somewhere else.</strong> What it takes to host the result elsewhere — and whether anything in it is a service only that vendor runs.</li></ul><p>It is worth noticing what this test is not about. It is not a plan to leave. Most people asking it stay. It is a way of finding out whether staying will be a choice or a consequence — which is also, incidentally, the strongest thing a supplier can offer you.</p><h2>Where we stand</h2><p>Our answers, since it would be strange to publish this and be coy: the application code is yours and it is ordinary code in ordinary frameworks — React, Next.js, Vue, Flutter — that your own developers can read and change. Your data and your database structure export in full, on demand, including as SQL scripts an ordinary database can read. The questions and answers page states all of this in the specific, and Softeria Studio is the product it applies to.</p><p>We would rather compete on being worth staying with. That is a commercial position, not a moral one — but it is the one that lets us publish this guide without editing the awkward parts out of it.</p><h2>Read next</h2><ul><li><a href="https://softeria.com/faq#who-owns">Do we own what gets built?</a> — Our answer, stated plainly</li><li><a href="https://softeria.com/products/studio">Softeria Studio</a> — What it builds, and what you get to keep</li><li><a href="https://softeria.com/guides/row-level-security">Row-level security explained</a> — The other question worth asking a supplier early</li></ul>]]></content:encoded>
      <enclosure url="https://softeria.com/brand/og/softeria.f31813ef.jpg" length="190527" type="image/jpeg" />
      <media:content url="https://softeria.com/brand/og/softeria.f31813ef.jpg" medium="image" type="image/jpeg" width="2400" height="1260" />
    </item>
    <item>
      <title>Shadow IT is a symptom, not a crime</title>
      <link>https://softeria.com/guides/shadow-it</link>
      <guid isPermaLink="true">https://softeria.com/guides/shadow-it</guid>
      <pubDate>Mon, 17 Aug 2026 00:00:00 GMT</pubDate>
      <category>Running IT</category>
      <dc:creator>Softeria</dc:creator>
      <description>Why departments build their own systems, which risks are real and which are theatre, how to find what exists without starting a witch hunt, and how to make the sanctioned path faster than the unsanctioned one.</description>
      <content:encoded><![CDATA[<p><em>Somewhere in your organisation is a spreadsheet with macros that three people depend on and nobody supports. It exists because it was faster than asking.</em></p><h2>The short version</h2><ul><li>Shadow IT is what a long queue looks like from the outside. Banning it addresses the symptom and lengthens the queue.</li><li>The dangerous part is rarely the tool. It is data in personal accounts, no backup, no access removal when someone leaves, and one person who understands it.</li><li>Find it with an amnesty, not an audit. People hide tools from auditors and hand them over to colleagues.</li><li>The durable fix is making the approved path faster than the workaround, because that is the only competition it has ever lost.</li></ul><p>Every organisation past a certain size runs on software nobody approved: a spreadsheet that schedules the shifts, an Access database from 2014, a form somebody built over a weekend, a personal automation account holding a key to the finance system. This is usually described as a discipline problem. It is almost never a discipline problem.</p><p>It is a queue problem. Somebody needed a small system, the official route quoted months, and the work still had to happen this quarter. What they built was a rational response to the options in front of them.</p><h2>Why it happens</h2><p>It is worth being specific, because the reasons point at different fixes.</p><ul><li><strong>The request is small and the process is not.</strong> A five-field register goes through the same intake, prioritisation and procurement as a core system, so it never reaches the top of any list.</li><li><strong>Nobody owns “small”.</strong> Large projects have sponsors. A tool that helps eleven people in one department has no one whose year is judged by whether it exists.</li><li><strong>The department has budget and a card.</strong> A subscription is an expense, not a project, and expenses do not require the platform team.</li><li><strong>The tools got good.</strong> Building something that works is genuinely within reach of a capable non-developer now. The barrier that used to enforce central IT by accident has gone.</li></ul><p>None of these are solved by a policy stating that unapproved tools are forbidden. They are solved by shortening the queue — or by admitting the queue exists and giving people a supported way to build in the open.</p><h2>The risks that are real, in order</h2><p>Shadow IT risk registers tend to open with compliance and end with vague warnings about security. In practice, the failures that actually happen come in a fairly predictable order.</p><ul><li><strong>One person understands it.</strong> The most common failure is not a breach. It is that Marit built it, Marit has left, and nobody can change the VAT rate.</li><li><strong>It is not backed up.</strong> A personal drive, a laptop, a free tier with no retention. The tool is fine until the day it is not, and there is no earlier version to go back to.</li><li><strong>Access does not end when employment does.</strong> The company account leaves with the offboarding checklist. The tool built on a personal login does not — and neither do the shared passwords three people know.</li><li><strong>Company data is in a personal account.</strong> Not the tool itself: the customer list inside it, sitting in something registered to an individual, outside every agreement your organisation has signed.</li><li><strong>Nobody can answer the regulator.</strong> When you are asked where personal data is processed and who has access, systems you do not know about are systems you cannot answer for. This is where the compliance concern is genuinely earned.</li><li><strong>It is quietly load-bearing.</strong> The one nobody notices until an audit: a spreadsheet that started as a convenience and is now the only record of something the business runs on.</li></ul><blockquote><p><strong>What is usually not the risk</strong></p><p>The tool being amateurish rarely hurts anyone. Plenty of departmental systems are ugly and entirely adequate for eleven people. Focus the effort on where the data sits, who can reach it, and what happens when the author leaves — not on whether the interface would pass review.</p></blockquote><h2>Finding it without a witch hunt</h2><p>You cannot govern what you cannot see, and you will not see it if the first move is an investigation. People conceal tools from auditors and volunteer them to colleagues. The framing decides which one you get.</p><ul><li><strong>Run an amnesty, and say the word.</strong> Announce plainly that nobody is in trouble, that the goal is to keep what works, and that anything handed over gets backed up and supported. Then honour it, visibly, the first time somebody tests it.</li><li><strong>Ask what people built, not what they use.</strong> “What did you make to get your job done?” gets answers. “List your unapproved software” gets silence.</li><li><strong>Follow the expenses and the sign-ins.</strong> Card statements and your identity provider’s list of applications will show most of the subscriptions without anyone having to confess to them.</li><li><strong>Look for the shared logins.</strong> A password three people know is both a finding and a good conversation opener about what it is protecting.</li></ul><h2>Deciding what happens to each one</h2><p>Once you have a list, most items sort quickly into four piles. The mistake is treating everything as though it belongs in the first.</p><ul><li><strong>Adopt.</strong> It matters, it works, and it needs an owner, a backup and company sign-in rather than a rewrite. Most of the list ends up here.</li><li><strong>Rebuild.</strong> It matters and the current version genuinely cannot be secured — data in a personal account, or logic nobody can follow. Rebuild it properly, and keep the person who wrote it involved; they know the rules the software encodes.</li><li><strong>Retire.</strong> It solved a problem that no longer exists, or two people use it out of habit. Turn it off, with notice.</li><li><strong>Leave alone.</strong> A spreadsheet one person uses to organise their own work is not a system. Not everything needs governing, and hoovering up the harmless ones is how an amnesty loses its credibility.</li></ul><h2>Making the approved path the fast one</h2><p>Everything above is cleanup. It comes back unless the underlying arithmetic changes, because the workaround only ever won on speed.</p><p>What changes the arithmetic is a supported way to build small systems that is genuinely quicker than the unsupported way — where company sign-in, hosting, backups and a record of who did what come as part of building it rather than as a review at the end. When the sanctioned route is the fast route, shadow IT stops being a policy problem and becomes an unattractive option.</p><p>That is the case Studio for business exists to make: departments get to build the tool they need, in an environment that already has single sign-on, managed hosting and an audit trail, so what they build is visible from the day it exists instead of the day it fails. But the principle holds whatever you use to do it — governance that is slower than the alternative is governance that is being routed around.</p><h2>Read next</h2><ul><li><a href="https://softeria.com/products/studio-for-business">Studio for business</a> — Governed environments with company sign-in and an audit trail</li><li><a href="https://softeria.com/guides/row-level-security">Row-level security explained</a> — Once the tools are in the open, this is the next question</li><li><a href="https://softeria.com/faq#sign-in">How do people sign in?</a> — Entra, Google Cloud Identity and anything OpenID Connect</li></ul>]]></content:encoded>
      <enclosure url="https://softeria.com/brand/og/softeria.f31813ef.jpg" length="190527" type="image/jpeg" />
      <media:content url="https://softeria.com/brand/og/softeria.f31813ef.jpg" medium="image" type="image/jpeg" width="2400" height="1260" />
    </item>
  </channel>
</rss>
