<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://knowledgebase.pirho.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dex</id>
	<title>PiRho Knowledgebase - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://knowledgebase.pirho.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dex"/>
	<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/wiki/Special:Contributions/Dex"/>
	<updated>2026-09-10T07:53:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Restoring_Android_Studio_3_AVD_Manager&amp;diff=474</id>
		<title>Restoring Android Studio 3 AVD Manager</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Restoring_Android_Studio_3_AVD_Manager&amp;diff=474"/>
		<updated>2026-08-17T10:29:35Z</updated>

		<summary type="html">&lt;p&gt;Dex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Restoring Android Studio 3.0 Android Virtual Device Manager Functionality =&lt;br /&gt;
 &#039;&#039;&#039;Summary:&#039;&#039;&#039; Android Studio 3.0 was designed around a 2017-era Android SDK. Attempting to use Android Studio 3.0 with modern SDK components can result in missing AVD Manager functionality, Gradle synchronisation failures, emulator incompatibilities, and a generally unstable development environment. This article documents the investigation, diagnosis, reconstruction, and validation of a fully functional Android Studio 3.0 environment capable of running Android 8.0 Oreo (API 26) virtual devices.&lt;br /&gt;
 == Symptoms ==&lt;br /&gt;
 The environment initially exhibited the following symptoms: * Android Virtual Device (AVD) Manager missing or unavailable. * Android-specific tooling partially disabled. * Emulator installed but not fully integrated into Android Studio. * Gradle project synchronisation failures. * Dependency resolution failures. * Modern SDK components installed alongside Android Studio 3.0. Example errors included: &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt; Could not resolve junit:junit:4.12 Could not resolve javax.inject:javax.inject:1 Could not resolve org.hamcrest:hamcrest-library:1.3 Could not resolve com.squareup:javawriter:2.1.1 &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 == Environment ==&lt;br /&gt;
 === IDE ===&lt;br /&gt;
 &amp;lt;pre&amp;gt; Android Studio 3.0.0 Build 171.4408382 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === Operating System ===&lt;br /&gt;
 &amp;lt;pre&amp;gt; Windows 10 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === SDK Location ===&lt;br /&gt;
 &amp;lt;pre&amp;gt; S:\Android\Sdk &amp;lt;/pre&amp;gt;&lt;br /&gt;
 == Initial Observations ==&lt;br /&gt;
 Although Android Studio appeared to function, the installed Android SDK contained components from wildly different generations. The SDK contained: &amp;lt;pre&amp;gt; Build Tools 37.0.0 Build Tools 36.x Android Emulator 37.1.11 Android API 36 Command Line Tools (latest) &amp;lt;/pre&amp;gt; alongside: &amp;lt;pre&amp;gt; Android Studio 3.0 Android API 26 Build Tools 26.0.2 &amp;lt;/pre&amp;gt; This created a compatibility mismatch between the IDE and the SDK.&lt;br /&gt;
 == Investigation Process ==&lt;br /&gt;
 === Verify Emulator Installation ===&lt;br /&gt;
 The first step was to determine whether the Android Emulator itself was operational. &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; S:\Android\Sdk\emulator\emulator.exe -version &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; Android emulator version 37.1.11.0 &amp;lt;/pre&amp;gt; The emulator was present and functioning. The problem therefore was not a missing emulator.&lt;br /&gt;
 === Verify SDK Tools ===&lt;br /&gt;
 The next step was to verify installation of the classic Android SDK tooling. &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; S:\Android\Sdk\tools\bin\avdmanager.bat list target &amp;lt;/syntaxhighlight&amp;gt; Initially this failed because Java was not available through the operating system environment.&lt;br /&gt;
 === Verify Java ===&lt;br /&gt;
 Android Studio ships with a bundled Java Runtime Environment. &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; &amp;quot;S:\Program Files\Android\Android Studio\jre\bin\java.exe&amp;quot; -version &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; openjdk version &amp;quot;1.8.0_152-release&amp;quot; &amp;lt;/pre&amp;gt; Environment variables were then configured: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; set JAVA_HOME=S:\Program Files\Android\Android Studio\jre set PATH=%JAVA_HOME%\bin;%PATH% &amp;lt;/syntaxhighlight&amp;gt; Once Java was available, SDK tooling began functioning correctly.&lt;br /&gt;
 == Root Cause ==&lt;br /&gt;
 The underlying issue was a version mismatch. Android Studio 3.0 expects components contemporary with its release period: &amp;lt;pre&amp;gt; 2017 &amp;lt;/pre&amp;gt; The SDK, however, had accumulated components from approximately: &amp;lt;pre&amp;gt; 2017 - 2026 &amp;lt;/pre&amp;gt; Android Studio 3.0 can become unstable when paired with modern Android SDK components, particularly: * Modern Emulator releases. * Modern Build Tools. * Modern Platform Tools. * Modern Command Line Tools.&lt;br /&gt;
 == Reconstructing a Period-Correct SDK ==&lt;br /&gt;
 === Android Studio ===&lt;br /&gt;
 &amp;lt;pre&amp;gt; Android Studio 3.0.0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === Java ===&lt;br /&gt;
 &amp;lt;pre&amp;gt; OpenJDK 1.8.0_152 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === SDK Tools ===&lt;br /&gt;
 pre&amp;gt; 26.1.1 &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; sdkmanager.bat --version &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; 26.1.1 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === Platform Tools ===&lt;br /&gt;
 &amp;lt;pre&amp;gt; 26.0.0 &amp;lt;/pre&amp;gt; Direct download: &amp;lt;pre&amp;gt; https://dl.google.com/android/repository/platform-tools_r26.0.0-windows.zip &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; adb version &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; Android Debug Bridge version 1.0.39 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === Build Tools ===&lt;br /&gt;
 &amp;lt;pre&amp;gt; 26.0.2 &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; dir S:\Android\Sdk\build-tools &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; 26.0.2 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === Android Platform ===&lt;br /&gt;
 &amp;lt;pre&amp;gt; Android 8.0 (API 26) &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager.bat list target &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; Android API 26 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === Emulator ===&lt;br /&gt;
 The originally installed emulator was: &amp;lt;pre&amp;gt; 37.1.11.0 &amp;lt;/pre&amp;gt; A period-correct emulator was installed instead. Recommended: &amp;lt;pre&amp;gt; Android Emulator 27.2.9.0 Build ID 4773671 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === HAXM ===&lt;br /&gt;
 &amp;lt;pre&amp;gt; Intel HAXM 7.8.0 &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; emulator-check.exe accel &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; HAXM version 7.8.0 (4) is installed and usable. &amp;lt;/pre&amp;gt;&lt;br /&gt;
 == Verifying SDK Functionality ==&lt;br /&gt;
 === List Targets ===&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager.bat list target &amp;lt;/syntaxhighlight&amp;gt; Expected: &amp;lt;pre&amp;gt; Android API 26 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === List Devices ===&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager.bat list device &amp;lt;/syntaxhighlight&amp;gt; Expected: &amp;lt;pre&amp;gt; Pixel Pixel XL Nexus 5 Nexus 5X Nexus 6P ... &amp;lt;/pre&amp;gt;&lt;br /&gt;
 === Verify Installed System Images ===&lt;br /&gt;
 Installed images included: &amp;lt;pre&amp;gt; android-26/default/x86 android-26/default/x86_64 android-26/google_apis_playstore/x86 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 == Creating a Test Device ==&lt;br /&gt;
 A command-line AVD was created. &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager create avd ^ -n Test26 ^ -k &amp;quot;system-images;android-26;default;x86&amp;quot; &amp;lt;/syntaxhighlight&amp;gt; Verification: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager list avd &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; Name: Test26 Target: Android 8.0 Oreo ABI: x86 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 == Launching the Emulator ==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; emulator.exe -avd Test26 &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; HAX is working and emulator runs in fast virt mode. &amp;lt;/pre&amp;gt; The emulator booted successfully.&lt;br /&gt;
 == Verifying ADB Connectivity ==&lt;br /&gt;
 &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; adb devices &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; List of devices attached emulator-5554 device &amp;lt;/pre&amp;gt; This confirms: * Emulator operational. * Android boot completed. * ADB communications operational. * Development tooling working correctly.&lt;br /&gt;
 == Restoring AVD Manager ==&lt;br /&gt;
 After rebuilding the SDK using period-correct components and configuring Java correctly, Android Studio regained full AVD functionality. The following items became available: * Android Virtual Device Manager. * Pixel device profiles. * Oreo API 26 system images. * AVD creation wizard. * Emulator launch integration. A new Pixel API 26 virtual device was successfully created through the Android Studio graphical interface.&lt;br /&gt;
 == Final Working Configuration ==&lt;br /&gt;
 &amp;lt;pre&amp;gt; Android Studio 3.0.0 Java 1.8.0_152 SDK Tools 26.1.1 Platform Tools 26.0.0 Build Tools 26.0.2 Platform Android API 26 System Images Oreo x86 / x86_64 Emulator 27.2.9.0 HAXM 7.8.0 &amp;lt;/pre&amp;gt;&lt;br /&gt;
 == Lessons Learned ==&lt;br /&gt;
 === Validate Components Individually ===&lt;br /&gt;
 A functioning emulator does not prove Android Studio integration is working. Test the following independently: * Java * SDK Tools * Platform Tools * Emulator * HAXM * ADB&lt;br /&gt;
 === Avoid Mixing SDK Generations ===&lt;br /&gt;
 The Android SDK evolves rapidly. Combining: &amp;lt;pre&amp;gt; Android Studio 3.0 &amp;lt;/pre&amp;gt; with: &amp;lt;pre&amp;gt; Emulator 37.x Build Tools 37.x Platform Tools 37.x &amp;lt;/pre&amp;gt; creates compatibility issues.&lt;br /&gt;
 === Keep Legacy SDKs Isolated ===&lt;br /&gt;
 Maintain separate SDK trees for: * Legacy Android Studio versions. * Modern Android Studio versions. This prevents accidental upgrades.&lt;br /&gt;
 === Archive Known-Good Components ===&lt;br /&gt;
 Google&#039;s historical packages can be difficult to locate years later. Maintaining an archive of known-good versions simplifies future environment rebuilds.&lt;br /&gt;
 == Related Topics ==&lt;br /&gt;
 * [[Android Studio Legacy Environment Preservation]] * [[Android SDK Version Compatibility]] * [[Intel HAXM Configuration]] * [[Android Emulator Troubleshooting]] * [[Gradle Dependency Resolution]] * [[Software Archaeology]] * [[Development Environment Reconstruction]]&lt;br /&gt;
 == Conclusion ==&lt;br /&gt;
 The Android Virtual Device Manager issue was ultimately resolved by reconstructing a period-correct Android Studio 3.0 SDK environment, aligning Java, SDK Tools, Platform Tools, Build Tools, Emulator, and HAXM versions to the same era. Once the toolchain was made historically consistent, Android Studio successfully restored full AVD functionality and was able to create and run a Pixel Oreo (API 26) emulator. The remaining issues, relating to Gradle dependency resolution, became isolated and significantly easier to troubleshoot once the underlying SDK compatibility issues had been eliminated.&lt;br /&gt;
== Additional Findings ==&lt;br /&gt;
&lt;br /&gt;
Following restoration of Android Virtual Device Manager, additional compatibility issues were identified and resolved.&lt;br /&gt;
&lt;br /&gt;
These issues were not directly related to AVD Manager but were preventing successful project compilation and deployment.&lt;br /&gt;
&lt;br /&gt;
== Gradle Repository Compatibility ==&lt;br /&gt;
&lt;br /&gt;
Gradle synchronisation initially failed with dependency resolution errors.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Could not resolve junit:junit:4.12&lt;br /&gt;
&lt;br /&gt;
PKIX path building failed&lt;br /&gt;
&lt;br /&gt;
unable to find valid certification path to requested target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cause ===&lt;br /&gt;
&lt;br /&gt;
Android Studio 3.0 uses an older Java Runtime Environment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OpenJDK 1.8.0_152&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The project was attempting to retrieve dependencies from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://jcenter.bintray.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JCenter has long since been discontinued and certificate validation failed.&lt;br /&gt;
&lt;br /&gt;
=== Resolution ===&lt;br /&gt;
&lt;br /&gt;
Repositories were updated to use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;gradle&amp;quot;&amp;gt;&lt;br /&gt;
google()&lt;br /&gt;
mavenCentral()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
instead of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;gradle&amp;quot;&amp;gt;&lt;br /&gt;
jcenter()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gradle synchronisation then completed successfully.&lt;br /&gt;
&lt;br /&gt;
== ConstraintLayout Version Compatibility ==&lt;br /&gt;
&lt;br /&gt;
The project initially referenced:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;gradle&amp;quot;&amp;gt;&lt;br /&gt;
implementation &#039;com.android.support.constraint:constraint-layout:2.0.4&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilation failed with errors including:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
android:attr/dialogCornerRadius not found&lt;br /&gt;
android:attr/fontVariationSettings not found&lt;br /&gt;
android:attr/ttcIndex not found&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cause ===&lt;br /&gt;
&lt;br /&gt;
ConstraintLayout 2.0.4 belongs to a significantly newer Android tooling generation and introduces dependencies on Android Support Library 28.x components.&lt;br /&gt;
&lt;br /&gt;
The project was targeting:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
compileSdkVersion 26&lt;br /&gt;
targetSdkVersion 26&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Resolution ===&lt;br /&gt;
&lt;br /&gt;
ConstraintLayout was downgraded to the version contemporary with Android Studio 3.0:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;gradle&amp;quot;&amp;gt;&lt;br /&gt;
implementation &#039;com.android.support.constraint:constraint-layout:1.0.2&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resource compilation errors were eliminated.&lt;br /&gt;
&lt;br /&gt;
== Android Test Framework Dependency Conflict ==&lt;br /&gt;
&lt;br /&gt;
After resolving ConstraintLayout issues, Gradle reported:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Conflict with dependency&lt;br /&gt;
com.android.support:support-annotations&lt;br /&gt;
&lt;br /&gt;
Resolved versions for app (26.1.0)&lt;br /&gt;
and test app (27.1.1) differ&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cause ===&lt;br /&gt;
&lt;br /&gt;
Android Test Runner and Espresso were introducing a newer version of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
support-annotations&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
than the rest of the Android Support Libraries.&lt;br /&gt;
&lt;br /&gt;
=== Resolution ===&lt;br /&gt;
&lt;br /&gt;
Explicit dependency version alignment was introduced:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;gradle&amp;quot;&amp;gt;&lt;br /&gt;
androidTestImplementation(&lt;br /&gt;
    &#039;com.android.support.test:runner:1.0.2&#039;&lt;br /&gt;
) {&lt;br /&gt;
    exclude group: &#039;com.android.support&#039;,&lt;br /&gt;
            module: &#039;support-annotations&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
androidTestImplementation(&lt;br /&gt;
    &#039;com.android.support.test.espresso:espresso-core:3.0.2&#039;&lt;br /&gt;
) {&lt;br /&gt;
    exclude group: &#039;com.android.support&#039;,&lt;br /&gt;
            module: &#039;support-annotations&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
    &#039;com.android.support:support-annotations:26.1.0&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All Android Support Library components were then aligned to version 26.1.0.&lt;br /&gt;
&lt;br /&gt;
== Final Validation ==&lt;br /&gt;
&lt;br /&gt;
The rebuilt environment was validated by:&lt;br /&gt;
&lt;br /&gt;
* Creating a Pixel virtual device.&lt;br /&gt;
* Installing Android 8.0 Oreo (API 26).&lt;br /&gt;
* Building a Kotlin Android application.&lt;br /&gt;
* Deploying to the emulator.&lt;br /&gt;
* Confirming successful execution.&lt;br /&gt;
&lt;br /&gt;
The standard Android Studio sample application launched successfully and displayed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hello World!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Final Working Environment ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Android Studio      3.0.0&lt;br /&gt;
Java                1.8.0_152&lt;br /&gt;
Gradle              4.1&lt;br /&gt;
SDK Tools           26.1.1&lt;br /&gt;
Platform Tools      26.0.0&lt;br /&gt;
Build Tools         26.0.2&lt;br /&gt;
Platform            Android API 26&lt;br /&gt;
ConstraintLayout    1.0.2&lt;br /&gt;
AppCompat           26.1.0&lt;br /&gt;
Emulator            27.2.9.0&lt;br /&gt;
HAXM                7.8.0&lt;br /&gt;
Pixel Emulator      Oreo (API 26)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Outcome ==&lt;br /&gt;
&lt;br /&gt;
The environment was restored to a fully operational Android Studio 3.0 development platform.&lt;br /&gt;
&lt;br /&gt;
The following workflow was successfully validated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Edit&lt;br /&gt;
 → Build&lt;br /&gt;
 → Deploy&lt;br /&gt;
 → Emulator Launch&lt;br /&gt;
 → Application Execution&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The resulting environment closely matches a historically accurate Android development workstation from the Android Studio 3.0 / Android 8.0 Oreo era.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Restoring_Android_Studio_3_AVD_Manager&amp;diff=473</id>
		<title>Restoring Android Studio 3 AVD Manager</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Restoring_Android_Studio_3_AVD_Manager&amp;diff=473"/>
		<updated>2026-08-17T09:02:09Z</updated>

		<summary type="html">&lt;p&gt;Dex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Restoring Android Studio 3.0 Android Virtual Device Manager Functionality = &#039;&#039;&#039;Summary:&#039;&#039;&#039; Android Studio 3.0 was designed around a 2017-era Android SDK. Attempting to use Android Studio 3.0 with modern SDK components can result in missing AVD Manager functionality, Gradle synchronisation failures, emulator incompatibilities, and a generally unstable development environment. This article documents the investigation, diagnosis, reconstruction, and validation of a fully functional Android Studio 3.0 environment capable of running Android 8.0 Oreo (API 26) virtual devices. == Symptoms == The environment initially exhibited the following symptoms: * Android Virtual Device (AVD) Manager missing or unavailable. * Android-specific tooling partially disabled. * Emulator installed but not fully integrated into Android Studio. * Gradle project synchronisation failures. * Dependency resolution failures. * Modern SDK components installed alongside Android Studio 3.0. Example errors included: &amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt; Could not resolve junit:junit:4.12 Could not resolve javax.inject:javax.inject:1 Could not resolve org.hamcrest:hamcrest-library:1.3 Could not resolve com.squareup:javawriter:2.1.1 &amp;lt;/syntaxhighlight&amp;gt; == Environment == === IDE === &amp;lt;pre&amp;gt; Android Studio 3.0.0 Build 171.4408382 &amp;lt;/pre&amp;gt; === Operating System === &amp;lt;pre&amp;gt; Windows 10 &amp;lt;/pre&amp;gt; === SDK Location === &amp;lt;pre&amp;gt; S:\Android\Sdk &amp;lt;/pre&amp;gt; == Initial Observations == Although Android Studio appeared to function, the installed Android SDK contained components from wildly different generations. The SDK contained: &amp;lt;pre&amp;gt; Build Tools 37.0.0 Build Tools 36.x Android Emulator 37.1.11 Android API 36 Command Line Tools (latest) &amp;lt;/pre&amp;gt; alongside: &amp;lt;pre&amp;gt; Android Studio 3.0 Android API 26 Build Tools 26.0.2 &amp;lt;/pre&amp;gt; This created a compatibility mismatch between the IDE and the SDK. == Investigation Process == === Verify Emulator Installation === The first step was to determine whether the Android Emulator itself was operational. &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; S:\Android\Sdk\emulator\emulator.exe -version &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; Android emulator version 37.1.11.0 &amp;lt;/pre&amp;gt; The emulator was present and functioning. The problem therefore was not a missing emulator. === Verify SDK Tools === The next step was to verify installation of the classic Android SDK tooling. &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; S:\Android\Sdk\tools\bin\avdmanager.bat list target &amp;lt;/syntaxhighlight&amp;gt; Initially this failed because Java was not available through the operating system environment. === Verify Java === Android Studio ships with a bundled Java Runtime Environment. &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; &amp;quot;S:\Program Files\Android\Android Studio\jre\bin\java.exe&amp;quot; -version &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; openjdk version &amp;quot;1.8.0_152-release&amp;quot; &amp;lt;/pre&amp;gt; Environment variables were then configured: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; set JAVA_HOME=S:\Program Files\Android\Android Studio\jre set PATH=%JAVA_HOME%\bin;%PATH% &amp;lt;/syntaxhighlight&amp;gt; Once Java was available, SDK tooling began functioning correctly. == Root Cause == The underlying issue was a version mismatch. Android Studio 3.0 expects components contemporary with its release period: &amp;lt;pre&amp;gt; 2017 &amp;lt;/pre&amp;gt; The SDK, however, had accumulated components from approximately: &amp;lt;pre&amp;gt; 2017 - 2026 &amp;lt;/pre&amp;gt; Android Studio 3.0 can become unstable when paired with modern Android SDK components, particularly: * Modern Emulator releases. * Modern Build Tools. * Modern Platform Tools. * Modern Command Line Tools. == Reconstructing a Period-Correct SDK == === Android Studio === &amp;lt;pre&amp;gt; Android Studio 3.0.0 &amp;lt;/pre&amp;gt; === Java === &amp;lt;pre&amp;gt; OpenJDK 1.8.0_152 &amp;lt;/pre&amp;gt; === SDK Tools === &amp;lt;pre&amp;gt; 26.1.1 &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; sdkmanager.bat --version &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; 26.1.1 &amp;lt;/pre&amp;gt; === Platform Tools === &amp;lt;pre&amp;gt; 26.0.0 &amp;lt;/pre&amp;gt; Direct download: &amp;lt;pre&amp;gt; https://dl.google.com/android/repository/platform-tools_r26.0.0-windows.zip &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; adb version &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; Android Debug Bridge version 1.0.39 &amp;lt;/pre&amp;gt; === Build Tools === &amp;lt;pre&amp;gt; 26.0.2 &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; dir S:\Android\Sdk\build-tools &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; 26.0.2 &amp;lt;/pre&amp;gt; === Android Platform === &amp;lt;pre&amp;gt; Android 8.0 (API 26) &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager.bat list target &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; Android API 26 &amp;lt;/pre&amp;gt; === Emulator === The originally installed emulator was: &amp;lt;pre&amp;gt; 37.1.11.0 &amp;lt;/pre&amp;gt; A period-correct emulator was installed instead. Recommended: &amp;lt;pre&amp;gt; Android Emulator 27.2.9.0 Build ID 4773671 &amp;lt;/pre&amp;gt; === HAXM === &amp;lt;pre&amp;gt; Intel HAXM 7.8.0 &amp;lt;/pre&amp;gt; Validation: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; emulator-check.exe accel &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; HAXM version 7.8.0 (4) is installed and usable. &amp;lt;/pre&amp;gt; == Verifying SDK Functionality == === List Targets === &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager.bat list target &amp;lt;/syntaxhighlight&amp;gt; Expected: &amp;lt;pre&amp;gt; Android API 26 &amp;lt;/pre&amp;gt; === List Devices === &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager.bat list device &amp;lt;/syntaxhighlight&amp;gt; Expected: &amp;lt;pre&amp;gt; Pixel Pixel XL Nexus 5 Nexus 5X Nexus 6P ... &amp;lt;/pre&amp;gt; === Verify Installed System Images === Installed images included: &amp;lt;pre&amp;gt; android-26/default/x86 android-26/default/x86_64 android-26/google_apis_playstore/x86 &amp;lt;/pre&amp;gt; == Creating a Test Device == A command-line AVD was created. &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager create avd ^ -n Test26 ^ -k &amp;quot;system-images;android-26;default;x86&amp;quot; &amp;lt;/syntaxhighlight&amp;gt; Verification: &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager list avd &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; Name: Test26 Target: Android 8.0 Oreo ABI: x86 &amp;lt;/pre&amp;gt; == Launching the Emulator == &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; emulator.exe -avd Test26 &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; HAX is working and emulator runs in fast virt mode. &amp;lt;/pre&amp;gt; The emulator booted successfully. == Verifying ADB Connectivity == &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; adb devices &amp;lt;/syntaxhighlight&amp;gt; Output: &amp;lt;pre&amp;gt; List of devices attached emulator-5554 device &amp;lt;/pre&amp;gt; This confirms: * Emulator operational. * Android boot completed. * ADB communications operational. * Development tooling working correctly. == Restoring AVD Manager == After rebuilding the SDK using period-correct components and configuring Java correctly, Android Studio regained full AVD functionality. The following items became available: * Android Virtual Device Manager. * Pixel device profiles. * Oreo API 26 system images. * AVD creation wizard. * Emulator launch integration. A new Pixel API 26 virtual device was successfully created through the Android Studio graphical interface. == Final Working Configuration == &amp;lt;pre&amp;gt; Android Studio 3.0.0 Java 1.8.0_152 SDK Tools 26.1.1 Platform Tools 26.0.0 Build Tools 26.0.2 Platform Android API 26 System Images Oreo x86 / x86_64 Emulator 27.2.9.0 HAXM 7.8.0 &amp;lt;/pre&amp;gt; == Lessons Learned == === Validate Components Individually === A functioning emulator does not prove Android Studio integration is working. Test the following independently: * Java * SDK Tools * Platform Tools * Emulator * HAXM * ADB === Avoid Mixing SDK Generations === The Android SDK evolves rapidly. Combining: &amp;lt;pre&amp;gt; Android Studio 3.0 &amp;lt;/pre&amp;gt; with: &amp;lt;pre&amp;gt; Emulator 37.x Build Tools 37.x Platform Tools 37.x &amp;lt;/pre&amp;gt; creates compatibility issues. === Keep Legacy SDKs Isolated === Maintain separate SDK trees for: * Legacy Android Studio versions. * Modern Android Studio versions. This prevents accidental upgrades. === Archive Known-Good Components === Google&#039;s historical packages can be difficult to locate years later. Maintaining an archive of known-good versions simplifies future environment rebuilds. == Related Topics == * [[Android Studio Legacy Environment Preservation]] * [[Android SDK Version Compatibility]] * [[Intel HAXM Configuration]] * [[Android Emulator Troubleshooting]] * [[Gradle Dependency Resolution]] * [[Software Archaeology]] * [[Development Environment Reconstruction]] == Conclusion == The Android Virtual Device Manager issue was ultimately resolved by reconstructing a period-correct Android Studio 3.0 SDK environment, aligning Java, SDK Tools, Platform Tools, Build Tools, Emulator, and HAXM versions to the same era. Once the toolchain was made historically consistent, Android Studio successfully restored full AVD functionality and was able to create and run a Pixel Oreo (API 26) emulator. The remaining issues, relating to Gradle dependency resolution, became isolated and significantly easier to troubleshoot once the underlying SDK compatibility issues had been eliminated.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Restoring_Android_Studio_3_AVD_Manager&amp;diff=472</id>
		<title>Restoring Android Studio 3 AVD Manager</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Restoring_Android_Studio_3_AVD_Manager&amp;diff=472"/>
		<updated>2026-08-17T08:59:32Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Android Studio 3.0 was designed around a 2017-era Android SDK. Attempting to use Android Studio 3.0 with modern SDK components can result in missing AVD Manager functionality, Gradle synchronization failures, emulator incompatibilities, and a generally unstable development environment. This article documents the investigation, diagnosis, reconstruction, and validation of a fully functional Android Studio 3.0 environment capable of running Android 8.0 Oreo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039; Android Studio 3.0 was designed around a 2017-era Android SDK. Attempting to use Android Studio 3.0 with modern SDK components can result in missing AVD Manager functionality, Gradle synchronization failures, emulator incompatibilities, and a generally unstable development environment. This article documents the investigation, diagnosis, reconstruction, and validation of a fully functional Android Studio 3.0 environment capable of running Android 8.0 Oreo (API 26) virtual devices. == Symptoms == * Android Virtual Device (AVD) Manager missing or unavailable. * Android-specific tooling partially disabled. * Emulator installed but not fully integrated into Android Studio. * Gradle project synchronization failures. * Dependency resolution failures. * Modern SDK components installed alongside Android Studio 3.0. == Environment == === IDE === &amp;lt;pre&amp;gt; Android Studio 3.0.0 Build 171.4408382 &amp;lt;/pre&amp;gt; === Operating System === &amp;lt;pre&amp;gt; Windows 10 &amp;lt;/pre&amp;gt; === SDK Location === &amp;lt;pre&amp;gt; S:\Android\Sdk &amp;lt;/pre&amp;gt; == Initial Observations == Although Android Studio appeared to function, the installed Android SDK contained components from wildly different generations. == Root Cause == The underlying issue was a version mismatch. Android Studio 3.0 expects components contemporary with its release period: &amp;lt;pre&amp;gt; 2017 &amp;lt;/pre&amp;gt; The SDK, however, had accumulated components from approximately: &amp;lt;pre&amp;gt; 2017 - 2026 &amp;lt;/pre&amp;gt; == Reconstructing a Period-Correct SDK == === Android Studio === &amp;lt;pre&amp;gt; Android Studio 3.0.0 &amp;lt;/pre&amp;gt; === Java === &amp;lt;pre&amp;gt; OpenJDK 1.8.0_152 &amp;lt;/pre&amp;gt; === SDK Tools === &amp;lt;pre&amp;gt; 26.1.1 &amp;lt;/pre&amp;gt; === Platform Tools === &amp;lt;pre&amp;gt; 26.0.0 &amp;lt;/pre&amp;gt; Direct download: &amp;lt;pre&amp;gt; https://dl.google.com/android/repository/platform-tools_r26.0.0-windows.zip &amp;lt;/pre&amp;gt; === Build Tools === &amp;lt;pre&amp;gt; 26.0.2 &amp;lt;/pre&amp;gt; === Android Platform === &amp;lt;pre&amp;gt; Android 8.0 (API 26) &amp;lt;/pre&amp;gt; === Emulator === Recommended: &amp;lt;pre&amp;gt; Android Emulator 27.2.9.0 Build ID 4773671 &amp;lt;/pre&amp;gt; === HAXM === &amp;lt;pre&amp;gt; Intel HAXM 7.8.0 &amp;lt;/pre&amp;gt; == Verifying SDK Functionality == === List Targets === &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager.bat list target &amp;lt;/syntaxhighlight&amp;gt; === List Devices === &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager.bat list device &amp;lt;/syntaxhighlight&amp;gt; == Creating a Test Device == &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; avdmanager create avd ^ -n Test26 ^ -k &amp;quot;system-images;android-26;default;x86&amp;quot; &amp;lt;/syntaxhighlight&amp;gt; == Launching the Emulator == &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; emulator.exe -avd Test26 &amp;lt;/syntaxhighlight&amp;gt; == Verifying ADB Connectivity == &amp;lt;syntaxhighlight lang=&amp;quot;dos&amp;quot;&amp;gt; adb devices &amp;lt;/syntaxhighlight&amp;gt; Expected: &amp;lt;pre&amp;gt; emulator-5554 device &amp;lt;/pre&amp;gt; == Restoring AVD Manager == After rebuilding the SDK using period-correct components and configuring Java correctly, Android Studio regained full AVD functionality. == Final Working Configuration == &amp;lt;pre&amp;gt; Android Studio 3.0.0 Java 1.8.0_152 SDK Tools 26.1.1 Platform Tools 26.0.0 Build Tools 26.0.2 Platform Android API 26 System Images Oreo x86 / x86_64 Emulator 27.2.9.0 HAXM 7.8.0 &amp;lt;/pre&amp;gt; == Lessons Learned == * Validate components individually. * Avoid mixing SDK generations. * Keep legacy SDKs isolated. * Archive known-good components. == Related Topics == * Android Studio Legacy Environment Preservation * Android SDK Version Compatibility * Intel HAXM Configuration * Android Emulator Troubleshooting * Gradle Dependency Resolution * Software Archaeology and Environment Reconstruction&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=A_Taxonomy_of_Applications&amp;diff=471</id>
		<title>A Taxonomy of Applications</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=A_Taxonomy_of_Applications&amp;diff=471"/>
		<updated>2026-08-13T09:09:12Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; The term &amp;#039;&amp;#039;application&amp;#039;&amp;#039; encompasses a wide variety of software delivery models, execution environments, architectures, and deployment mechanisms.  Over the decades, the software industry has introduced numerous application technologies, including desktop applications, web applications, browser plugins, widgets, mobile applications, progressive web applications, hybrid applications, and runtime-hosted solutions.  This article provides a structured taxonomy...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
The term &#039;&#039;application&#039;&#039; encompasses a wide variety of software delivery models, execution environments, architectures, and deployment mechanisms.&lt;br /&gt;
&lt;br /&gt;
Over the decades, the software industry has introduced numerous application technologies, including desktop applications, web applications, browser plugins, widgets, mobile applications, progressive web applications, hybrid applications, and runtime-hosted solutions.&lt;br /&gt;
&lt;br /&gt;
This article provides a structured taxonomy of application types, explaining how they relate to each other and identifying the common architectural patterns that exist beneath the terminology.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Many discussions about software architecture become confusing because different classifications are mixed together.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
* A Progressive Web App is often compared to a Native App.&lt;br /&gt;
* A Single Page Application is often compared to Electron.&lt;br /&gt;
* A Widget is often compared to an Application.&lt;br /&gt;
* A SaaS Platform is often discussed as though it were an application technology.&lt;br /&gt;
&lt;br /&gt;
In reality, these concepts frequently describe different aspects of the application ecosystem.&lt;br /&gt;
&lt;br /&gt;
A useful taxonomy helps clarify these relationships.&lt;br /&gt;
&lt;br /&gt;
== What Is A Taxonomy? ==&lt;br /&gt;
&lt;br /&gt;
A taxonomy is a system used to classify and organise related concepts.&lt;br /&gt;
&lt;br /&gt;
Rather than treating every application technology as a unique category, a taxonomy identifies shared characteristics and groups technologies accordingly.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Animal&lt;br /&gt;
 ├── Mammal&lt;br /&gt;
 ├── Bird&lt;br /&gt;
 └── Reptile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
 ├── Native&lt;br /&gt;
 ├── Web&lt;br /&gt;
 ├── Hybrid&lt;br /&gt;
 └── Runtime Hosted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The objective is not to determine which approach is superior, but to understand how each approach relates to the others.&lt;br /&gt;
&lt;br /&gt;
== The Application Family Tree ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Applications&lt;br /&gt;
│&lt;br /&gt;
├── Native Applications&lt;br /&gt;
│&lt;br /&gt;
├── Web Applications&lt;br /&gt;
│&lt;br /&gt;
├── Hybrid Applications&lt;br /&gt;
│&lt;br /&gt;
├── Runtime Hosted Applications&lt;br /&gt;
│&lt;br /&gt;
├── Component Applications&lt;br /&gt;
│&lt;br /&gt;
└── Cloud Delivered Applications&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each branch contains further subcategories.&lt;br /&gt;
&lt;br /&gt;
== Native Applications ==&lt;br /&gt;
&lt;br /&gt;
Native applications execute directly against a platform&#039;s operating system APIs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Operating System&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Hardware&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
* Windows Applications&lt;br /&gt;
* Linux Applications&lt;br /&gt;
* macOS Applications&lt;br /&gt;
* Android Applications&lt;br /&gt;
* iOS Applications&lt;br /&gt;
&lt;br /&gt;
=== Characteristics ===&lt;br /&gt;
&lt;br /&gt;
* Platform specific&lt;br /&gt;
* Direct operating system integration&lt;br /&gt;
* High performance&lt;br /&gt;
* Full device access&lt;br /&gt;
&lt;br /&gt;
=== Typical Technologies ===&lt;br /&gt;
&lt;br /&gt;
* Win32&lt;br /&gt;
* WinUI&lt;br /&gt;
* Cocoa&lt;br /&gt;
* Swift&lt;br /&gt;
* Kotlin&lt;br /&gt;
* GTK&lt;br /&gt;
* Qt&lt;br /&gt;
&lt;br /&gt;
== Web Applications ==&lt;br /&gt;
&lt;br /&gt;
Web applications execute within a web browser.&lt;br /&gt;
&lt;br /&gt;
The browser acts as a runtime environment and abstracts operating system differences.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Browser&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Traditional Web Applications ===&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Content Management Systems&lt;br /&gt;
* Webmail&lt;br /&gt;
* Intranets&lt;br /&gt;
* E-Commerce Platforms&lt;br /&gt;
&lt;br /&gt;
Architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Browser&lt;br /&gt;
    │&lt;br /&gt;
Server&lt;br /&gt;
    │&lt;br /&gt;
Database&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Single Page Applications (SPA) ===&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* React&lt;br /&gt;
* Angular&lt;br /&gt;
* Vue&lt;br /&gt;
&lt;br /&gt;
Architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Browser&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 API Services&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Progressive Web Applications (PWA) ===&lt;br /&gt;
&lt;br /&gt;
PWAs are a specialised form of web application.&lt;br /&gt;
&lt;br /&gt;
They add:&lt;br /&gt;
&lt;br /&gt;
* Service Workers&lt;br /&gt;
* Offline Support&lt;br /&gt;
* Push Notifications&lt;br /&gt;
* Installability&lt;br /&gt;
&lt;br /&gt;
A PWA is therefore:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Web Application&lt;br /&gt;
       +&lt;br /&gt;
Extended Browser Capabilities&lt;br /&gt;
       =&lt;br /&gt;
PWA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hybrid Applications ==&lt;br /&gt;
&lt;br /&gt;
Hybrid applications combine technologies from multiple categories.&lt;br /&gt;
&lt;br /&gt;
They typically use web technologies while maintaining access to native capabilities.&lt;br /&gt;
&lt;br /&gt;
=== Electron ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Chromium&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Node.js&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Visual Studio Code&lt;br /&gt;
* Discord&lt;br /&gt;
* Slack&lt;br /&gt;
&lt;br /&gt;
=== Cordova ===&lt;br /&gt;
&lt;br /&gt;
Packages a web application into a native mobile application.&lt;br /&gt;
&lt;br /&gt;
=== Capacitor ===&lt;br /&gt;
&lt;br /&gt;
A modern evolution of Cordova with improved platform integration.&lt;br /&gt;
&lt;br /&gt;
=== MAUI Hybrid ===&lt;br /&gt;
&lt;br /&gt;
Combines native application components with web-based user interfaces.&lt;br /&gt;
&lt;br /&gt;
=== Common Characteristics ===&lt;br /&gt;
&lt;br /&gt;
* Shared codebases&lt;br /&gt;
* Multi-platform deployment&lt;br /&gt;
* Access to native functionality&lt;br /&gt;
* Additional runtime layers&lt;br /&gt;
&lt;br /&gt;
== Runtime Hosted Applications ==&lt;br /&gt;
&lt;br /&gt;
Runtime-hosted applications target an intermediary runtime rather than a platform directly.&lt;br /&gt;
&lt;br /&gt;
This category includes many technologies that are often incorrectly grouped elsewhere.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Runtime&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Platform&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
* Java Applications&lt;br /&gt;
* .NET Applications&lt;br /&gt;
* Electron Applications&lt;br /&gt;
* Browser Applications&lt;br /&gt;
* AIR Applications&lt;br /&gt;
* Web Runtime Environment Applications&lt;br /&gt;
&lt;br /&gt;
The runtime provides:&lt;br /&gt;
&lt;br /&gt;
* Storage&lt;br /&gt;
* Networking&lt;br /&gt;
* Security&lt;br /&gt;
* Rendering&lt;br /&gt;
* Platform abstraction&lt;br /&gt;
&lt;br /&gt;
=== Characteristics ===&lt;br /&gt;
&lt;br /&gt;
* Platform independence&lt;br /&gt;
* Consistent APIs&lt;br /&gt;
* Simplified portability&lt;br /&gt;
* Runtime dependency&lt;br /&gt;
&lt;br /&gt;
== Component Applications ==&lt;br /&gt;
&lt;br /&gt;
Some software is not intended to function as a complete standalone application.&lt;br /&gt;
&lt;br /&gt;
Instead, it provides functionality within another application.&lt;br /&gt;
&lt;br /&gt;
=== Widgets ===&lt;br /&gt;
&lt;br /&gt;
Widgets are small applications designed to perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Weather Widgets&lt;br /&gt;
* Stock Tickers&lt;br /&gt;
* Calendar Widgets&lt;br /&gt;
* System Monitors&lt;br /&gt;
&lt;br /&gt;
=== Web Parts ===&lt;br /&gt;
&lt;br /&gt;
Web Parts provide reusable functionality within larger platforms.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* SharePoint Web Parts&lt;br /&gt;
* Dashboard Components&lt;br /&gt;
* Enterprise Portal Modules&lt;br /&gt;
&lt;br /&gt;
=== Browser Extensions ===&lt;br /&gt;
&lt;br /&gt;
Extensions add capabilities to an existing application.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Password Managers&lt;br /&gt;
* SEO Toolbars&lt;br /&gt;
* Developer Tools Extensions&lt;br /&gt;
&lt;br /&gt;
=== Modern Components ===&lt;br /&gt;
&lt;br /&gt;
Many modern systems use:&lt;br /&gt;
&lt;br /&gt;
* React Components&lt;br /&gt;
* Vue Components&lt;br /&gt;
* Web Components&lt;br /&gt;
* Widgets&lt;br /&gt;
&lt;br /&gt;
Although implemented differently, the concept remains similar.&lt;br /&gt;
&lt;br /&gt;
== Cloud Delivered Applications ==&lt;br /&gt;
&lt;br /&gt;
Cloud delivery describes how software is provided rather than how it is built.&lt;br /&gt;
&lt;br /&gt;
=== Software as a Service (SaaS) ===&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Microsoft 365&lt;br /&gt;
* Salesforce&lt;br /&gt;
* ServiceNow&lt;br /&gt;
* Google Workspace&lt;br /&gt;
&lt;br /&gt;
A SaaS solution may internally use:&lt;br /&gt;
&lt;br /&gt;
* Native Applications&lt;br /&gt;
* Web Applications&lt;br /&gt;
* PWAs&lt;br /&gt;
* Mobile Applications&lt;br /&gt;
* Hybrid Applications&lt;br /&gt;
&lt;br /&gt;
It is therefore best viewed as a delivery model rather than an application type.&lt;br /&gt;
&lt;br /&gt;
== Historical Branches ==&lt;br /&gt;
&lt;br /&gt;
Several technologies occupy important positions in application history.&lt;br /&gt;
&lt;br /&gt;
=== HTML Applications (HTA) ===&lt;br /&gt;
&lt;br /&gt;
HTAs combined:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTML&lt;br /&gt;
+&lt;br /&gt;
Scripting&lt;br /&gt;
+&lt;br /&gt;
Desktop Trust&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
They can be viewed as an early hybrid application technology.&lt;br /&gt;
&lt;br /&gt;
=== Java Applets ===&lt;br /&gt;
&lt;br /&gt;
Applets were runtime-hosted applications delivered through browsers.&lt;br /&gt;
&lt;br /&gt;
=== Adobe AIR ===&lt;br /&gt;
&lt;br /&gt;
AIR brought web technologies onto the desktop by supplying a runtime environment.&lt;br /&gt;
&lt;br /&gt;
=== Silverlight ===&lt;br /&gt;
&lt;br /&gt;
Silverlight combined browser hosting with runtime-based execution.&lt;br /&gt;
&lt;br /&gt;
=== Flash Applications ===&lt;br /&gt;
&lt;br /&gt;
Flash was both:&lt;br /&gt;
&lt;br /&gt;
* A runtime platform&lt;br /&gt;
* An application delivery mechanism&lt;br /&gt;
&lt;br /&gt;
Its influence can still be seen in modern web application development.&lt;br /&gt;
&lt;br /&gt;
== Another Way To Classify Applications ==&lt;br /&gt;
&lt;br /&gt;
Applications can also be classified according to where execution occurs.&lt;br /&gt;
&lt;br /&gt;
=== Local Execution ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 User Device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Native Applications&lt;br /&gt;
* Mobile Apps&lt;br /&gt;
* Desktop Applications&lt;br /&gt;
&lt;br /&gt;
=== Browser Execution ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Browser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Web Applications&lt;br /&gt;
* SPAs&lt;br /&gt;
* PWAs&lt;br /&gt;
&lt;br /&gt;
=== Runtime Execution ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Runtime Environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Java Applications&lt;br /&gt;
* Electron Applications&lt;br /&gt;
* AIR Applications&lt;br /&gt;
&lt;br /&gt;
=== Distributed Execution ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client&lt;br /&gt;
   │&lt;br /&gt;
   ▼&lt;br /&gt;
Services&lt;br /&gt;
   │&lt;br /&gt;
   ▼&lt;br /&gt;
Infrastructure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* SaaS Platforms&lt;br /&gt;
* Cloud Applications&lt;br /&gt;
* Enterprise Systems&lt;br /&gt;
&lt;br /&gt;
== Common Architectural Patterns ==&lt;br /&gt;
&lt;br /&gt;
Most application technologies share one of a small number of execution models.&lt;br /&gt;
&lt;br /&gt;
=== Direct Execution ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hosted Execution ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Host Environment&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Distributed Execution ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Services&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Data Sources&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These patterns appear repeatedly throughout computing history.&lt;br /&gt;
&lt;br /&gt;
== Why Taxonomy Matters ==&lt;br /&gt;
&lt;br /&gt;
A structured taxonomy helps developers and architects:&lt;br /&gt;
&lt;br /&gt;
* Compare technologies fairly&lt;br /&gt;
* Select appropriate architectures&lt;br /&gt;
* Understand trade-offs&lt;br /&gt;
* Identify shared concepts&lt;br /&gt;
* Avoid terminology confusion&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
* A PWA is not a competitor to SaaS.&lt;br /&gt;
* A Widget is not a competitor to Electron.&lt;br /&gt;
* A Runtime is not an Application.&lt;br /&gt;
* A Browser is not merely a renderer.&lt;br /&gt;
&lt;br /&gt;
Each occupies a different position within the overall ecosystem.&lt;br /&gt;
&lt;br /&gt;
== Key Takeaways ==&lt;br /&gt;
&lt;br /&gt;
* Applications can be classified according to architecture, runtime, hosting model, or delivery mechanism.&lt;br /&gt;
* Many technologies overlap across multiple categories.&lt;br /&gt;
* Web applications, native applications, hybrid applications, and runtime-hosted applications solve similar problems using different approaches.&lt;br /&gt;
* SaaS is a delivery model rather than an application technology.&lt;br /&gt;
* Widgets, components, extensions, and Web Parts are specialised application forms.&lt;br /&gt;
* Most modern application platforms are evolutionary refinements of concepts explored over many decades.&lt;br /&gt;
* Understanding the taxonomy of applications provides a clearer foundation for architecture and design discussions.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Applications Demystified]]&lt;br /&gt;
* [[The Evolution of Application Delivery]]&lt;br /&gt;
* [[Application Design for Multiple Platforms]]&lt;br /&gt;
* [[Runtime Environments]]&lt;br /&gt;
* [[Progressive Web Applications]]&lt;br /&gt;
* [[Hybrid Applications]]&lt;br /&gt;
* [[Software as a Service]]&lt;br /&gt;
* [[Web Runtime Environments]]&lt;br /&gt;
* [[Application Architecture]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Application_Design_for_Multiple_Platforms&amp;diff=470</id>
		<title>Application Design for Multiple Platforms</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Application_Design_for_Multiple_Platforms&amp;diff=470"/>
		<updated>2026-08-13T09:02:41Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Modern software is expected to run on an increasing number of platforms. Users may access the same application from desktop computers, laptops, tablets, mobile devices, kiosk systems, web browsers, and cloud-hosted environments.  Historically, organisations developed separate applications for each platform. While this approach provides maximum control, it can significantly increase development and maintenance costs.  This article explores the two primary a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Modern software is expected to run on an increasing number of platforms. Users may access the same application from desktop computers, laptops, tablets, mobile devices, kiosk systems, web browsers, and cloud-hosted environments.&lt;br /&gt;
&lt;br /&gt;
Historically, organisations developed separate applications for each platform. While this approach provides maximum control, it can significantly increase development and maintenance costs.&lt;br /&gt;
&lt;br /&gt;
This article explores the two primary approaches to multi-platform application design: platform-specific development and portable application design. It examines the strengths, weaknesses, and architectural considerations of each approach and provides guidance on choosing the most appropriate strategy.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
The challenge of supporting multiple platforms is almost as old as software development itself.&lt;br /&gt;
&lt;br /&gt;
An application may need to support:&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
* macOS&lt;br /&gt;
* Linux&lt;br /&gt;
* Android&lt;br /&gt;
* iOS&lt;br /&gt;
* Browser-based environments&lt;br /&gt;
* Embedded systems&lt;br /&gt;
* Virtual desktop environments&lt;br /&gt;
&lt;br /&gt;
The fundamental question becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Should the application target the platform directly, or should it target an abstraction that hides platform differences?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How this question is answered shapes the entire architecture of the solution.&lt;br /&gt;
&lt;br /&gt;
== Platform-Specific Design ==&lt;br /&gt;
&lt;br /&gt;
Platform-specific design creates separate applications for each supported platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Windows Application&lt;br /&gt;
        │&lt;br /&gt;
        ▼&lt;br /&gt;
     Windows&lt;br /&gt;
&lt;br /&gt;
Android Application&lt;br /&gt;
        │&lt;br /&gt;
        ▼&lt;br /&gt;
     Android&lt;br /&gt;
&lt;br /&gt;
iOS Application&lt;br /&gt;
        │&lt;br /&gt;
        ▼&lt;br /&gt;
       iOS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each application is developed using technologies native to that platform.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Platform&lt;br /&gt;
! Typical Technologies&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| Win32, WinForms, WPF, WinUI, .NET&lt;br /&gt;
|-&lt;br /&gt;
| Android&lt;br /&gt;
| Kotlin, Java&lt;br /&gt;
|-&lt;br /&gt;
| iOS&lt;br /&gt;
| Swift, Objective-C&lt;br /&gt;
|-&lt;br /&gt;
| macOS&lt;br /&gt;
| Swift, Cocoa&lt;br /&gt;
|-&lt;br /&gt;
| Linux&lt;br /&gt;
| GTK, Qt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Advantages ===&lt;br /&gt;
&lt;br /&gt;
* Maximum performance&lt;br /&gt;
* Deep platform integration&lt;br /&gt;
* Direct access to operating system features&lt;br /&gt;
* Native user experience&lt;br /&gt;
* Immediate access to new platform capabilities&lt;br /&gt;
&lt;br /&gt;
=== Disadvantages ===&lt;br /&gt;
&lt;br /&gt;
* Multiple codebases&lt;br /&gt;
* Increased development effort&lt;br /&gt;
* Increased maintenance costs&lt;br /&gt;
* Feature parity challenges&lt;br /&gt;
* Larger development teams&lt;br /&gt;
&lt;br /&gt;
=== Typical Use Cases ===&lt;br /&gt;
&lt;br /&gt;
Platform-specific design remains appropriate when:&lt;br /&gt;
&lt;br /&gt;
* Maximum performance is essential&lt;br /&gt;
* Hardware integration is required&lt;br /&gt;
* Platform-specific user experiences are important&lt;br /&gt;
* Operating system features are heavily utilised&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Professional video editing software&lt;br /&gt;
* CAD applications&lt;br /&gt;
* Games&lt;br /&gt;
* Device drivers&lt;br /&gt;
* Operating system utilities&lt;br /&gt;
&lt;br /&gt;
== Portable Application Design ==&lt;br /&gt;
&lt;br /&gt;
Portable application design takes a different approach.&lt;br /&gt;
&lt;br /&gt;
Instead of targeting individual operating systems, the application targets a shared runtime or abstraction layer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
   Runtime&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
   Platform&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The runtime is responsible for adapting platform-specific behaviour.&lt;br /&gt;
&lt;br /&gt;
From the application&#039;s perspective:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application Logic&lt;br /&gt;
       │&lt;br /&gt;
       ├── Windows&lt;br /&gt;
       ├── Android&lt;br /&gt;
       ├── iOS&lt;br /&gt;
       ├── macOS&lt;br /&gt;
       └── Linux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application Logic&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
     Runtime&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
 Supported Platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This significantly reduces duplicated development effort.&lt;br /&gt;
&lt;br /&gt;
== The Role of the Runtime ==&lt;br /&gt;
&lt;br /&gt;
A runtime acts as an intermediary between the application and the platform.&lt;br /&gt;
&lt;br /&gt;
Responsibilities may include:&lt;br /&gt;
&lt;br /&gt;
* File access&lt;br /&gt;
* Storage&lt;br /&gt;
* Networking&lt;br /&gt;
* Notifications&lt;br /&gt;
* Device integration&lt;br /&gt;
* Security&lt;br /&gt;
* Window management&lt;br /&gt;
* Rendering&lt;br /&gt;
&lt;br /&gt;
Conceptually:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Platform-Neutral APIs&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Runtime Environment&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Platform-Specific APIs&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The application primarily interacts with the runtime rather than the operating system directly.&lt;br /&gt;
&lt;br /&gt;
== Common Portable Architectures ==&lt;br /&gt;
&lt;br /&gt;
=== Browser-Based Applications ===&lt;br /&gt;
&lt;br /&gt;
The browser is one of the most successful runtime environments ever created.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Browser APIs&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Browser&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The browser abstracts significant platform differences.&lt;br /&gt;
&lt;br /&gt;
As a result, a properly designed web application can operate on many operating systems with minimal modification.&lt;br /&gt;
&lt;br /&gt;
=== Progressive Web Applications ===&lt;br /&gt;
&lt;br /&gt;
Progressive Web Applications extend traditional web application capabilities.&lt;br /&gt;
&lt;br /&gt;
Additional features include:&lt;br /&gt;
&lt;br /&gt;
* Offline operation&lt;br /&gt;
* Background processing&lt;br /&gt;
* Local storage&lt;br /&gt;
* Notifications&lt;br /&gt;
* Installation support&lt;br /&gt;
&lt;br /&gt;
A PWA remains fundamentally a web application but gains application-like behaviour.&lt;br /&gt;
&lt;br /&gt;
=== Electron Applications ===&lt;br /&gt;
&lt;br /&gt;
Electron uses a bundled browser runtime.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Chromium&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Node.js&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Developers can create desktop applications using web technologies while maintaining a relatively portable codebase.&lt;br /&gt;
&lt;br /&gt;
=== Cross Platform Frameworks ===&lt;br /&gt;
&lt;br /&gt;
Modern frameworks provide platform abstraction while still producing native deployments.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Flutter&lt;br /&gt;
* React Native&lt;br /&gt;
* Avalonia&lt;br /&gt;
* Uno Platform&lt;br /&gt;
* .NET MAUI&lt;br /&gt;
&lt;br /&gt;
These frameworks seek to provide a balance between portability and native capability.&lt;br /&gt;
&lt;br /&gt;
== Designing Around Abstractions ==&lt;br /&gt;
&lt;br /&gt;
One of the most important architectural decisions is identifying which layer owns platform-specific behaviour.&lt;br /&gt;
&lt;br /&gt;
=== Poor Separation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
 ├── Windows Logic&lt;br /&gt;
 ├── Android Logic&lt;br /&gt;
 ├── iOS Logic&lt;br /&gt;
 └── Linux Logic&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Over time, this approach often becomes difficult to maintain.&lt;br /&gt;
&lt;br /&gt;
Every new feature may require changes across multiple sections of the codebase.&lt;br /&gt;
&lt;br /&gt;
=== Better Separation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Service Layer&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Platform Adapter&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The application remains largely platform agnostic while platform-specific concerns are isolated.&lt;br /&gt;
&lt;br /&gt;
This approach improves:&lt;br /&gt;
&lt;br /&gt;
* Maintainability&lt;br /&gt;
* Testability&lt;br /&gt;
* Portability&lt;br /&gt;
* Long-term scalability&lt;br /&gt;
&lt;br /&gt;
== User Interface Considerations ==&lt;br /&gt;
&lt;br /&gt;
The user interface is often the most visible challenge in multi-platform design.&lt;br /&gt;
&lt;br /&gt;
Different platforms have different conventions.&lt;br /&gt;
&lt;br /&gt;
=== Native Experience ===&lt;br /&gt;
&lt;br /&gt;
Users generally expect applications to behave similarly to other applications on their chosen platform.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Menu placement&lt;br /&gt;
* Navigation patterns&lt;br /&gt;
* Input behaviours&lt;br /&gt;
* Accessibility features&lt;br /&gt;
&lt;br /&gt;
Ignoring platform conventions may create a poor user experience.&lt;br /&gt;
&lt;br /&gt;
=== Consistent Experience ===&lt;br /&gt;
&lt;br /&gt;
Some organisations prioritise consistency instead.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Office&lt;br /&gt;
* Adobe Creative Cloud&lt;br /&gt;
* Browser-based enterprise applications&lt;br /&gt;
&lt;br /&gt;
Users encounter similar interfaces regardless of platform.&lt;br /&gt;
&lt;br /&gt;
Both approaches are valid depending on business requirements.&lt;br /&gt;
&lt;br /&gt;
== Offline-First Design ==&lt;br /&gt;
&lt;br /&gt;
Modern multi-platform applications increasingly adopt an offline-first model.&lt;br /&gt;
&lt;br /&gt;
Traditional architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
    Server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Offline-first architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Local Data Store&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Synchronisation Layer&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
     Server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The application interacts primarily with local data.&lt;br /&gt;
&lt;br /&gt;
Synchronisation occurs separately.&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Improved responsiveness&lt;br /&gt;
* Better reliability&lt;br /&gt;
* Reduced network dependency&lt;br /&gt;
* Enhanced mobile support&lt;br /&gt;
&lt;br /&gt;
This design is increasingly common in mobile, cloud, and distributed applications.&lt;br /&gt;
&lt;br /&gt;
== Web Runtime Environments ==&lt;br /&gt;
&lt;br /&gt;
An emerging architectural pattern involves hosting applications within a dedicated runtime environment that implements or extends standard Web APIs.&lt;br /&gt;
&lt;br /&gt;
Conceptually:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Standard Web APIs&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Web Runtime Environment&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this model:&lt;br /&gt;
&lt;br /&gt;
* Applications target standard browser capabilities.&lt;br /&gt;
* Platform differences are handled by the runtime.&lt;br /&gt;
* Platform-specific implementations are hidden behind a consistent API surface.&lt;br /&gt;
* Applications remain largely unaware of the underlying operating system.&lt;br /&gt;
&lt;br /&gt;
This approach builds upon concepts previously explored by browsers, HTAs, AIR, Electron, mobile runtimes, and progressive web technologies.&lt;br /&gt;
&lt;br /&gt;
== Choosing The Right Approach ==&lt;br /&gt;
&lt;br /&gt;
There is no universally correct solution.&lt;br /&gt;
&lt;br /&gt;
The best architecture depends upon:&lt;br /&gt;
&lt;br /&gt;
* Target audience&lt;br /&gt;
* Supported platforms&lt;br /&gt;
* Performance requirements&lt;br /&gt;
* Security requirements&lt;br /&gt;
* Offline requirements&lt;br /&gt;
* Team expertise&lt;br /&gt;
* Budget constraints&lt;br /&gt;
* Long-term maintenance goals&lt;br /&gt;
&lt;br /&gt;
A useful guideline is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Target the highest level of abstraction that still allows the application to meet its requirements.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This often produces the best balance between portability, flexibility, and maintainability.&lt;br /&gt;
&lt;br /&gt;
== Common Misconceptions ==&lt;br /&gt;
&lt;br /&gt;
=== Portable Means Less Powerful ===&lt;br /&gt;
&lt;br /&gt;
Portable applications can often provide capabilities comparable to native applications.&lt;br /&gt;
&lt;br /&gt;
The difference usually lies in the abstraction layer rather than the application&#039;s functionality.&lt;br /&gt;
&lt;br /&gt;
=== One Codebase Solves Everything ===&lt;br /&gt;
&lt;br /&gt;
A single codebase may reduce duplication, but architectural complexity still exists.&lt;br /&gt;
&lt;br /&gt;
Platform differences do not disappear simply because they are hidden behind a framework.&lt;br /&gt;
&lt;br /&gt;
=== Native Is Always Better ===&lt;br /&gt;
&lt;br /&gt;
Native applications provide advantages in some scenarios.&lt;br /&gt;
&lt;br /&gt;
However, portability, maintainability, deployment simplicity, and development speed may be more important than maximum performance.&lt;br /&gt;
&lt;br /&gt;
== Key Takeaways ==&lt;br /&gt;
&lt;br /&gt;
* Multi-platform application design requires balancing portability and platform integration.&lt;br /&gt;
* Platform-specific applications provide maximum control but increase complexity.&lt;br /&gt;
* Portable architectures reduce duplication through abstraction layers and runtimes.&lt;br /&gt;
* Browsers are among the most successful runtime environments ever developed.&lt;br /&gt;
* Modern frameworks continue the long-standing industry goal of write-once, run-anywhere software.&lt;br /&gt;
* Offline-first design is increasingly important in modern application architectures.&lt;br /&gt;
* Successful architectures separate application logic from platform-specific implementation details.&lt;br /&gt;
* The best solution is usually the simplest architecture that satisfies the application&#039;s requirements.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Applications Demystified]]&lt;br /&gt;
* [[The Evolution of Application Delivery]]&lt;br /&gt;
* [[Progressive Web Applications]]&lt;br /&gt;
* [[Cross Platform Development]]&lt;br /&gt;
* [[Runtime Environments]]&lt;br /&gt;
* [[Offline First Design]]&lt;br /&gt;
* [[Application Architecture]]&lt;br /&gt;
* [[Web Runtime Environments]]&lt;br /&gt;
* [[Software Portability]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=The_Evolution_of_Application_Delivery&amp;diff=469</id>
		<title>The Evolution of Application Delivery</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=The_Evolution_of_Application_Delivery&amp;diff=469"/>
		<updated>2026-08-13T08:59:37Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; The history of software development is, in many ways, the history of application delivery. For decades, developers have searched for the ideal balance between performance, portability, usability, security, maintainability, and deployment simplicity.  Each generation of application technology emerged to solve the limitations of the one before it. Some technologies disappeared, some evolved, and some continue to influence modern application design. Understan...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
The history of software development is, in many ways, the history of application delivery. For decades, developers have searched for the ideal balance between performance, portability, usability, security, maintainability, and deployment simplicity.&lt;br /&gt;
&lt;br /&gt;
Each generation of application technology emerged to solve the limitations of the one before it. Some technologies disappeared, some evolved, and some continue to influence modern application design. Understanding this evolution provides valuable insight into why modern application architectures look the way they do today.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Although technology changes rapidly, the challenges faced by software developers remain surprisingly consistent:&lt;br /&gt;
&lt;br /&gt;
* How do users obtain the application?&lt;br /&gt;
* How is the application updated?&lt;br /&gt;
* How portable is it?&lt;br /&gt;
* How much access does it need to the underlying system?&lt;br /&gt;
* How can development effort be reduced?&lt;br /&gt;
&lt;br /&gt;
Many &amp;quot;new&amp;quot; technologies are simply different answers to these same questions.&lt;br /&gt;
&lt;br /&gt;
== A Timeline of Application Delivery ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1990s&lt;br /&gt;
├── Native Desktop Apps&lt;br /&gt;
├── Browser Websites&lt;br /&gt;
└── HTAs&lt;br /&gt;
&lt;br /&gt;
2000s&lt;br /&gt;
├── Java Applets&lt;br /&gt;
├── Flash&lt;br /&gt;
├── AIR&lt;br /&gt;
├── Widgets&lt;br /&gt;
└── Silverlight&lt;br /&gt;
&lt;br /&gt;
2010s&lt;br /&gt;
├── Mobile Apps&lt;br /&gt;
├── SPAs&lt;br /&gt;
├── Electron&lt;br /&gt;
└── PWAs&lt;br /&gt;
&lt;br /&gt;
2020s&lt;br /&gt;
├── Cross Platform Frameworks&lt;br /&gt;
├── Web Runtime Environments&lt;br /&gt;
├── MAUI&lt;br /&gt;
└── Browser-hosted Applications&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each generation attempted to improve upon the strengths and weaknesses of its predecessors.&lt;br /&gt;
&lt;br /&gt;
== The 1990s: The Age of the Desktop ==&lt;br /&gt;
&lt;br /&gt;
=== Native Desktop Applications ===&lt;br /&gt;
&lt;br /&gt;
During the 1990s, native desktop applications dominated personal computing.&lt;br /&gt;
&lt;br /&gt;
Examples included:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Office&lt;br /&gt;
* Lotus Notes&lt;br /&gt;
* CorelDRAW&lt;br /&gt;
* Adobe Photoshop&lt;br /&gt;
&lt;br /&gt;
Applications were typically installed from:&lt;br /&gt;
&lt;br /&gt;
* Floppy disks&lt;br /&gt;
* CD-ROMs&lt;br /&gt;
* Corporate network shares&lt;br /&gt;
&lt;br /&gt;
Typical architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
     │&lt;br /&gt;
     ▼&lt;br /&gt;
Operating System&lt;br /&gt;
     │&lt;br /&gt;
     ▼&lt;br /&gt;
Hardware&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strengths ===&lt;br /&gt;
&lt;br /&gt;
* Excellent performance&lt;br /&gt;
* Rich user interfaces&lt;br /&gt;
* Deep hardware access&lt;br /&gt;
* Extensive operating system integration&lt;br /&gt;
&lt;br /&gt;
=== Challenges ===&lt;br /&gt;
&lt;br /&gt;
* Manual installation&lt;br /&gt;
* Difficult updates&lt;br /&gt;
* Platform dependency&lt;br /&gt;
* Software distribution costs&lt;br /&gt;
&lt;br /&gt;
=== Browser Websites ===&lt;br /&gt;
&lt;br /&gt;
As Internet access became widespread, websites evolved beyond static documents.&lt;br /&gt;
&lt;br /&gt;
Developers began building systems that accepted user input and generated dynamic content.&lt;br /&gt;
&lt;br /&gt;
Examples included:&lt;br /&gt;
&lt;br /&gt;
* Early webmail systems&lt;br /&gt;
* Online shopping platforms&lt;br /&gt;
* Corporate intranets&lt;br /&gt;
&lt;br /&gt;
This introduced a new concept:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
The application lives on the server rather than the user&#039;s computer.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This dramatically simplified deployment.&lt;br /&gt;
&lt;br /&gt;
=== HTML Applications (HTA) ===&lt;br /&gt;
&lt;br /&gt;
Microsoft recognised that many developers wanted the flexibility of web technologies with the power of desktop applications.&lt;br /&gt;
&lt;br /&gt;
HTAs attempted to bridge this gap.&lt;br /&gt;
&lt;br /&gt;
An HTA provided:&lt;br /&gt;
&lt;br /&gt;
* HTML user interfaces&lt;br /&gt;
* JavaScript and VBScript&lt;br /&gt;
* Desktop integration&lt;br /&gt;
* Reduced browser security restrictions&lt;br /&gt;
&lt;br /&gt;
Conceptually:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Web Technologies&lt;br /&gt;
        +&lt;br /&gt;
Desktop Trust&lt;br /&gt;
        =&lt;br /&gt;
HTA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many ideas later found in hybrid applications can be traced back to HTAs.&lt;br /&gt;
&lt;br /&gt;
== The 2000s: Rich Internet Applications ==&lt;br /&gt;
&lt;br /&gt;
As internet connectivity improved, developers sought to deliver richer experiences through the browser.&lt;br /&gt;
&lt;br /&gt;
This era became known as the age of the Rich Internet Application (RIA).&lt;br /&gt;
&lt;br /&gt;
=== Java Applets ===&lt;br /&gt;
&lt;br /&gt;
Java Applets promised:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Write Once&lt;br /&gt;
Run Anywhere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Applications executed within the browser using the Java Runtime Environment.&lt;br /&gt;
&lt;br /&gt;
Developers could create:&lt;br /&gt;
&lt;br /&gt;
* Interactive interfaces&lt;br /&gt;
* Games&lt;br /&gt;
* Business applications&lt;br /&gt;
&lt;br /&gt;
However, browser compatibility, performance issues, and security concerns eventually reduced adoption.&lt;br /&gt;
&lt;br /&gt;
=== Flash ===&lt;br /&gt;
&lt;br /&gt;
Adobe Flash became one of the most influential technologies of the era.&lt;br /&gt;
&lt;br /&gt;
Flash enabled:&lt;br /&gt;
&lt;br /&gt;
* Animation&lt;br /&gt;
* Video&lt;br /&gt;
* Interactive applications&lt;br /&gt;
* Browser games&lt;br /&gt;
&lt;br /&gt;
For many years, Flash offered capabilities that standard web technologies could not.&lt;br /&gt;
&lt;br /&gt;
Entire websites were sometimes built exclusively in Flash.&lt;br /&gt;
&lt;br /&gt;
=== Adobe AIR ===&lt;br /&gt;
&lt;br /&gt;
Adobe AIR extended Flash beyond the browser.&lt;br /&gt;
&lt;br /&gt;
Developers could create:&lt;br /&gt;
&lt;br /&gt;
* Desktop applications&lt;br /&gt;
* Media tools&lt;br /&gt;
* Business systems&lt;br /&gt;
&lt;br /&gt;
using familiar web technologies.&lt;br /&gt;
&lt;br /&gt;
Architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Adobe AIR&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AIR demonstrated that web technologies could be used for desktop application development.&lt;br /&gt;
&lt;br /&gt;
=== Widgets ===&lt;br /&gt;
&lt;br /&gt;
Widgets represented a different approach.&lt;br /&gt;
&lt;br /&gt;
Instead of building large applications, developers created small, focused applications designed to perform a specific function.&lt;br /&gt;
&lt;br /&gt;
Examples included:&lt;br /&gt;
&lt;br /&gt;
* Weather widgets&lt;br /&gt;
* RSS readers&lt;br /&gt;
* Clocks&lt;br /&gt;
* System monitors&lt;br /&gt;
&lt;br /&gt;
Platforms included:&lt;br /&gt;
&lt;br /&gt;
* Opera Widgets&lt;br /&gt;
* Yahoo Widgets&lt;br /&gt;
* Apple Dashboard Widgets&lt;br /&gt;
* W3C Widget specifications&lt;br /&gt;
&lt;br /&gt;
Many widget concepts later influenced modern component-based application design.&lt;br /&gt;
&lt;br /&gt;
=== Silverlight ===&lt;br /&gt;
&lt;br /&gt;
Microsoft Silverlight attempted to provide a .NET-based alternative to Flash.&lt;br /&gt;
&lt;br /&gt;
Features included:&lt;br /&gt;
&lt;br /&gt;
* Rich interfaces&lt;br /&gt;
* Multimedia support&lt;br /&gt;
* C# development&lt;br /&gt;
* Browser integration&lt;br /&gt;
&lt;br /&gt;
Silverlight gained significant enterprise adoption before HTML5 ultimately reduced the need for browser plugins.&lt;br /&gt;
&lt;br /&gt;
== The 2010s: Mobile and the Return of the Application ==&lt;br /&gt;
&lt;br /&gt;
The introduction of smartphones fundamentally changed software delivery.&lt;br /&gt;
&lt;br /&gt;
=== Mobile Applications ===&lt;br /&gt;
&lt;br /&gt;
Apple&#039;s App Store and Google&#039;s Play Store transformed application distribution.&lt;br /&gt;
&lt;br /&gt;
Advantages included:&lt;br /&gt;
&lt;br /&gt;
* Easy installation&lt;br /&gt;
* Automatic updates&lt;br /&gt;
* Device integration&lt;br /&gt;
* App monetisation&lt;br /&gt;
&lt;br /&gt;
This period saw a return to native application development.&lt;br /&gt;
&lt;br /&gt;
Developers often maintained separate:&lt;br /&gt;
&lt;br /&gt;
* iOS applications&lt;br /&gt;
* Android applications&lt;br /&gt;
* Web applications&lt;br /&gt;
&lt;br /&gt;
This increased development costs considerably.&lt;br /&gt;
&lt;br /&gt;
=== Single Page Applications (SPAs) ===&lt;br /&gt;
&lt;br /&gt;
Meanwhile, web applications continued to evolve.&lt;br /&gt;
&lt;br /&gt;
SPAs moved much of the application logic into the browser.&lt;br /&gt;
&lt;br /&gt;
Popular frameworks included:&lt;br /&gt;
&lt;br /&gt;
* Angular&lt;br /&gt;
* React&lt;br /&gt;
* Vue&lt;br /&gt;
&lt;br /&gt;
This produced experiences that felt increasingly similar to desktop applications.&lt;br /&gt;
&lt;br /&gt;
Architecture shifted from:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Page → Request → Page&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application → API → Data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Electron ===&lt;br /&gt;
&lt;br /&gt;
Developers soon realised that modern web applications looked and behaved remarkably like desktop software.&lt;br /&gt;
&lt;br /&gt;
Electron formalised this idea.&lt;br /&gt;
&lt;br /&gt;
By combining:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Web Application&lt;br /&gt;
      +&lt;br /&gt;
Chromium&lt;br /&gt;
      +&lt;br /&gt;
Node.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
developers could deploy desktop applications using web technologies.&lt;br /&gt;
&lt;br /&gt;
Electron became popular because organisations could reuse existing web development skills.&lt;br /&gt;
&lt;br /&gt;
=== Progressive Web Applications ===&lt;br /&gt;
&lt;br /&gt;
PWAs represented a different response to the same challenge.&lt;br /&gt;
&lt;br /&gt;
Instead of bringing browsers to the desktop, they brought desktop-like capabilities to web applications.&lt;br /&gt;
&lt;br /&gt;
Features included:&lt;br /&gt;
&lt;br /&gt;
* Offline support&lt;br /&gt;
* Push notifications&lt;br /&gt;
* Home screen installation&lt;br /&gt;
* Background synchronisation&lt;br /&gt;
&lt;br /&gt;
A PWA remained fundamentally a web application while behaving more like a traditional app.&lt;br /&gt;
&lt;br /&gt;
== The 2020s: Convergence ==&lt;br /&gt;
&lt;br /&gt;
Modern application development is increasingly focused on platform convergence.&lt;br /&gt;
&lt;br /&gt;
The distinction between native, web, and hybrid applications continues to blur.&lt;br /&gt;
&lt;br /&gt;
=== Cross Platform Frameworks ===&lt;br /&gt;
&lt;br /&gt;
Modern frameworks attempt to reduce duplicated effort.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Flutter&lt;br /&gt;
* React Native&lt;br /&gt;
* Uno Platform&lt;br /&gt;
* Avalonia&lt;br /&gt;
&lt;br /&gt;
The objective remains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
One codebase, multiple platforms.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Web Runtime Environments ===&lt;br /&gt;
&lt;br /&gt;
A growing trend is the use of runtime environments that host applications and abstract platform differences.&lt;br /&gt;
&lt;br /&gt;
In this model:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Web APIs&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
 Runtime Environment&lt;br /&gt;
      │&lt;br /&gt;
      ▼&lt;br /&gt;
Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The application primarily targets a consistent API surface rather than individual operating systems.&lt;br /&gt;
&lt;br /&gt;
This approach continues the ideas explored by browsers, HTAs, AIR, Electron, and hybrid frameworks.&lt;br /&gt;
&lt;br /&gt;
=== .NET MAUI ===&lt;br /&gt;
&lt;br /&gt;
.NET MAUI represents Microsoft&#039;s current approach to unified application development.&lt;br /&gt;
&lt;br /&gt;
Applications can target:&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
* Android&lt;br /&gt;
* iOS&lt;br /&gt;
* macOS&lt;br /&gt;
&lt;br /&gt;
from a shared codebase.&lt;br /&gt;
&lt;br /&gt;
MAUI reflects the industry&#039;s continuing pursuit of platform-independent development.&lt;br /&gt;
&lt;br /&gt;
=== Browser-Hosted Applications ===&lt;br /&gt;
&lt;br /&gt;
Browsers have evolved into highly capable application platforms.&lt;br /&gt;
&lt;br /&gt;
Modern browsers provide:&lt;br /&gt;
&lt;br /&gt;
* Local storage&lt;br /&gt;
* Offline caching&lt;br /&gt;
* Device integration&lt;br /&gt;
* Notifications&lt;br /&gt;
* Hardware acceleration&lt;br /&gt;
&lt;br /&gt;
As a result, many applications that once required native deployment can now execute entirely within a browser.&lt;br /&gt;
&lt;br /&gt;
== Recurring Themes Throughout History ==&lt;br /&gt;
&lt;br /&gt;
Several patterns repeatedly appear throughout the evolution of application delivery.&lt;br /&gt;
&lt;br /&gt;
=== Reduce Deployment Friction ===&lt;br /&gt;
&lt;br /&gt;
Every generation attempts to make deployment easier:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Floppy Disk&lt;br /&gt;
    ↓&lt;br /&gt;
CD-ROM&lt;br /&gt;
    ↓&lt;br /&gt;
Download&lt;br /&gt;
    ↓&lt;br /&gt;
Browser&lt;br /&gt;
    ↓&lt;br /&gt;
App Store&lt;br /&gt;
    ↓&lt;br /&gt;
Cloud Service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Increase Portability ===&lt;br /&gt;
&lt;br /&gt;
Technology continually moves toward platform independence.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Platform Specific&lt;br /&gt;
        ↓&lt;br /&gt;
Cross Platform&lt;br /&gt;
        ↓&lt;br /&gt;
Platform Agnostic&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Balance Power and Security ===&lt;br /&gt;
&lt;br /&gt;
Every application model must balance:&lt;br /&gt;
&lt;br /&gt;
* User convenience&lt;br /&gt;
* System access&lt;br /&gt;
* Security&lt;br /&gt;
&lt;br /&gt;
Many technologies declined because they became difficult to secure.&lt;br /&gt;
&lt;br /&gt;
=== Reuse Existing Skills ===&lt;br /&gt;
&lt;br /&gt;
A recurring industry goal is reducing the need to maintain multiple codebases and specialist teams.&lt;br /&gt;
&lt;br /&gt;
Many modern frameworks exist primarily to maximise code reuse across platforms.&lt;br /&gt;
&lt;br /&gt;
== Have We Solved The Problem? ==&lt;br /&gt;
&lt;br /&gt;
Not entirely.&lt;br /&gt;
&lt;br /&gt;
The software industry continues to search for the ideal balance between:&lt;br /&gt;
&lt;br /&gt;
* Native performance&lt;br /&gt;
* Web portability&lt;br /&gt;
* Development efficiency&lt;br /&gt;
* Security&lt;br /&gt;
* User experience&lt;br /&gt;
&lt;br /&gt;
Every generation offers improvements, but no approach completely eliminates trade-offs.&lt;br /&gt;
&lt;br /&gt;
Consequently, application delivery continues to evolve.&lt;br /&gt;
&lt;br /&gt;
== Key Takeaways ==&lt;br /&gt;
&lt;br /&gt;
* Most application technologies emerged in response to specific limitations of previous generations.&lt;br /&gt;
* The industry frequently alternates between local execution and browser-hosted execution models.&lt;br /&gt;
* Many modern technologies revisit ideas first explored decades earlier.&lt;br /&gt;
* Cross-platform development remains a consistent objective throughout computing history.&lt;br /&gt;
* Application delivery mechanisms change, but the underlying challenges remain remarkably similar.&lt;br /&gt;
* Understanding historical solutions helps architects avoid repeating past mistakes and identify genuinely new innovations.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Applications Demystified]]&lt;br /&gt;
* [[Progressive Web Applications]]&lt;br /&gt;
* [[Single Page Applications]]&lt;br /&gt;
* [[Cross Platform Development]]&lt;br /&gt;
* [[Runtime Environments]]&lt;br /&gt;
* [[Hybrid Applications]]&lt;br /&gt;
* [[Software Architecture]]&lt;br /&gt;
* [[Web Runtime Environments]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Applications_Demistified&amp;diff=468</id>
		<title>Applications Demistified</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Applications_Demistified&amp;diff=468"/>
		<updated>2026-08-13T08:57:23Z</updated>

		<summary type="html">&lt;p&gt;Dex: /* Applications Demystified */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Applications have existed for as long as computers have been capable of running software, yet the term &#039;&#039;application&#039;&#039; has become increasingly ambiguous. Today an application may be a traditional executable, a web site that behaves like a desktop program, a mobile app installed from a store, a Progressive Web App (PWA), or a hybrid solution combining several technologies.&lt;br /&gt;
&lt;br /&gt;
This article explores the major application delivery mechanisms, explains how they differ, and demonstrates that most solutions ultimately consist of the same building blocks: code, a user interface, a runtime environment, and a method of delivery.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
The software industry often introduces new terminology to describe evolving approaches to application delivery.&lt;br /&gt;
&lt;br /&gt;
Terms such as:&lt;br /&gt;
&lt;br /&gt;
* Native Application&lt;br /&gt;
* Web Application&lt;br /&gt;
* Single Page Application (SPA)&lt;br /&gt;
* Progressive Web App (PWA)&lt;br /&gt;
* Hybrid Application&lt;br /&gt;
* Widget&lt;br /&gt;
* Cloud Application&lt;br /&gt;
* Software as a Service (SaaS)&lt;br /&gt;
&lt;br /&gt;
are frequently used interchangeably despite referring to very different concepts.&lt;br /&gt;
&lt;br /&gt;
In reality, most application technologies attempt to solve the same challenge:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
How do we deliver software functionality to users in a way that is efficient, maintainable, portable, and user-friendly?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Understanding the evolution of application delivery helps architects and developers make informed design decisions rather than simply following current trends.&lt;br /&gt;
&lt;br /&gt;
== What Is An Application? ==&lt;br /&gt;
&lt;br /&gt;
At its simplest, an application consists of four elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
│&lt;br /&gt;
├── User Interface&lt;br /&gt;
├── Business Logic&lt;br /&gt;
├── Data&lt;br /&gt;
└── Runtime Environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The runtime environment provides the services the application requires to operate.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
* Linux&lt;br /&gt;
* macOS&lt;br /&gt;
* Android&lt;br /&gt;
* iOS&lt;br /&gt;
* Java Runtime Environment (JRE)&lt;br /&gt;
* .NET Runtime&lt;br /&gt;
* Web Browser&lt;br /&gt;
&lt;br /&gt;
Different application technologies primarily differ in the runtime they target.&lt;br /&gt;
&lt;br /&gt;
== A Taxonomy of Applications ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Applications&lt;br /&gt;
│&lt;br /&gt;
├── Native Applications&lt;br /&gt;
│   ├── Windows&lt;br /&gt;
│   ├── macOS&lt;br /&gt;
│   ├── Linux&lt;br /&gt;
│   ├── Android&lt;br /&gt;
│   └── iOS&lt;br /&gt;
│&lt;br /&gt;
├── Web-Based Applications&lt;br /&gt;
│   ├── Traditional Web Apps&lt;br /&gt;
│   ├── SPAs&lt;br /&gt;
│   ├── PWAs&lt;br /&gt;
│   └── SaaS Platforms&lt;br /&gt;
│&lt;br /&gt;
├── Hybrid Applications&lt;br /&gt;
│   ├── Electron&lt;br /&gt;
│   ├── Cordova&lt;br /&gt;
│   ├── Capacitor&lt;br /&gt;
│   └── MAUI Hybrid&lt;br /&gt;
│&lt;br /&gt;
└── Historical Technologies&lt;br /&gt;
    ├── HTA&lt;br /&gt;
    ├── Java Applets&lt;br /&gt;
    ├── Widgets&lt;br /&gt;
    ├── AIR&lt;br /&gt;
    └── Silverlight&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Native Applications ==&lt;br /&gt;
&lt;br /&gt;
A native application is compiled specifically for a particular operating system and executes directly against that platform&#039;s APIs.&lt;br /&gt;
&lt;br /&gt;
=== Characteristics ===&lt;br /&gt;
&lt;br /&gt;
* Direct access to operating system functionality&lt;br /&gt;
* High performance&lt;br /&gt;
* Deep platform integration&lt;br /&gt;
* Platform-specific development tools&lt;br /&gt;
* Platform-specific deployment mechanisms&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Platform&lt;br /&gt;
! Typical Technologies&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| Win32, MFC, .NET, WinUI&lt;br /&gt;
|-&lt;br /&gt;
| macOS&lt;br /&gt;
| Cocoa, Swift&lt;br /&gt;
|-&lt;br /&gt;
| Linux&lt;br /&gt;
| GTK, Qt&lt;br /&gt;
|-&lt;br /&gt;
| Android&lt;br /&gt;
| Kotlin, Java&lt;br /&gt;
|-&lt;br /&gt;
| iOS&lt;br /&gt;
| Swift, Objective-C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Advantages ===&lt;br /&gt;
&lt;br /&gt;
* Excellent performance&lt;br /&gt;
* Rich operating system integration&lt;br /&gt;
* Full access to device capabilities&lt;br /&gt;
&lt;br /&gt;
=== Disadvantages ===&lt;br /&gt;
&lt;br /&gt;
* Multiple codebases may be required&lt;br /&gt;
* Higher development and maintenance costs&lt;br /&gt;
* Platform-specific expertise required&lt;br /&gt;
&lt;br /&gt;
== Web-Based Applications ==&lt;br /&gt;
&lt;br /&gt;
Web applications execute within a web browser rather than directly on the operating system.&lt;br /&gt;
&lt;br /&gt;
Historically, a web application was little more than a website capable of processing user input. Modern web applications can be remarkably sophisticated and often rival desktop applications in functionality.&lt;br /&gt;
&lt;br /&gt;
=== Traditional Web Applications ===&lt;br /&gt;
&lt;br /&gt;
Traditional web applications generate pages on a server and return fully rendered responses to the browser.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Early SharePoint sites&lt;br /&gt;
* Webmail systems&lt;br /&gt;
* Content Management Systems&lt;br /&gt;
* E-commerce platforms&lt;br /&gt;
&lt;br /&gt;
Typical architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Browser&lt;br /&gt;
   │&lt;br /&gt;
HTTP&lt;br /&gt;
   │&lt;br /&gt;
Web Server&lt;br /&gt;
   │&lt;br /&gt;
Database&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Single Page Applications (SPA) ===&lt;br /&gt;
&lt;br /&gt;
Single Page Applications move much of the application logic into the browser.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* React applications&lt;br /&gt;
* Angular applications&lt;br /&gt;
* Vue applications&lt;br /&gt;
&lt;br /&gt;
Typical architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Browser&lt;br /&gt;
│&lt;br /&gt;
├── User Interface&lt;br /&gt;
├── Business Logic&lt;br /&gt;
└── API Calls&lt;br /&gt;
        │&lt;br /&gt;
        ▼&lt;br /&gt;
      Backend&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This model often provides a more responsive user experience by reducing page reloads.&lt;br /&gt;
&lt;br /&gt;
=== Progressive Web Applications (PWA) ===&lt;br /&gt;
&lt;br /&gt;
A Progressive Web Application is a web application enhanced with browser technologies that allow it to behave more like an installed application.&lt;br /&gt;
&lt;br /&gt;
Common features include:&lt;br /&gt;
&lt;br /&gt;
* Offline support&lt;br /&gt;
* Service Workers&lt;br /&gt;
* Push Notifications&lt;br /&gt;
* Installation from the browser&lt;br /&gt;
* Home Screen integration&lt;br /&gt;
&lt;br /&gt;
A PWA remains fundamentally a web application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Web Application&lt;br /&gt;
      +&lt;br /&gt;
Manifest&lt;br /&gt;
      +&lt;br /&gt;
Service Worker&lt;br /&gt;
      =&lt;br /&gt;
Progressive Web App&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Software as a Service (SaaS) ===&lt;br /&gt;
&lt;br /&gt;
SaaS describes a delivery model rather than a specific technology.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft 365&lt;br /&gt;
* Salesforce&lt;br /&gt;
* ServiceNow&lt;br /&gt;
* Google Workspace&lt;br /&gt;
&lt;br /&gt;
A SaaS platform may internally use:&lt;br /&gt;
&lt;br /&gt;
* Traditional web applications&lt;br /&gt;
* SPAs&lt;br /&gt;
* PWAs&lt;br /&gt;
* Hybrid technologies&lt;br /&gt;
&lt;br /&gt;
The defining characteristic is that the software is consumed as a service.&lt;br /&gt;
&lt;br /&gt;
== Hybrid Applications ==&lt;br /&gt;
&lt;br /&gt;
Hybrid applications attempt to bridge the gap between web technologies and native platforms.&lt;br /&gt;
&lt;br /&gt;
The objective is usually:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Write once, deploy everywhere.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Electron ===&lt;br /&gt;
&lt;br /&gt;
Electron combines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
+&lt;br /&gt;
Chromium&lt;br /&gt;
+&lt;br /&gt;
Node.js&lt;br /&gt;
=&lt;br /&gt;
Desktop Application&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Visual Studio Code&lt;br /&gt;
* Discord&lt;br /&gt;
* Slack&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Cross-platform&lt;br /&gt;
* Familiar web technologies&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Large deployment size&lt;br /&gt;
* Significant memory usage&lt;br /&gt;
&lt;br /&gt;
=== Apache Cordova ===&lt;br /&gt;
&lt;br /&gt;
Cordova packages web applications inside a native mobile container.&lt;br /&gt;
&lt;br /&gt;
This allows:&lt;br /&gt;
&lt;br /&gt;
* HTML&lt;br /&gt;
* CSS&lt;br /&gt;
* JavaScript&lt;br /&gt;
&lt;br /&gt;
to access selected device capabilities.&lt;br /&gt;
&lt;br /&gt;
=== Capacitor ===&lt;br /&gt;
&lt;br /&gt;
Capacitor evolved from the Cordova model and provides modern native integration for web applications.&lt;br /&gt;
&lt;br /&gt;
It is commonly used with:&lt;br /&gt;
&lt;br /&gt;
* Angular&lt;br /&gt;
* React&lt;br /&gt;
* Vue&lt;br /&gt;
&lt;br /&gt;
=== .NET MAUI Hybrid ===&lt;br /&gt;
&lt;br /&gt;
.NET MAUI Hybrid combines native desktop or mobile interfaces with embedded web technologies.&lt;br /&gt;
&lt;br /&gt;
This approach permits organisations with existing web development experience to leverage their skills while still producing native deployments.&lt;br /&gt;
&lt;br /&gt;
== Historical Technologies ==&lt;br /&gt;
&lt;br /&gt;
Many modern application platforms are built upon ideas first explored decades ago.&lt;br /&gt;
&lt;br /&gt;
=== HTML Applications (HTA) ===&lt;br /&gt;
&lt;br /&gt;
HTAs were introduced by Microsoft as trusted desktop applications based on Internet Explorer technologies.&lt;br /&gt;
&lt;br /&gt;
Characteristics included:&lt;br /&gt;
&lt;br /&gt;
* HTML user interfaces&lt;br /&gt;
* JavaScript and VBScript support&lt;br /&gt;
* Windows integration&lt;br /&gt;
* Reduced browser security restrictions&lt;br /&gt;
&lt;br /&gt;
An HTA can be viewed as a web application running with desktop-level trust.&lt;br /&gt;
&lt;br /&gt;
=== Java Applets ===&lt;br /&gt;
&lt;br /&gt;
Java Applets allowed Java applications to execute within web browsers.&lt;br /&gt;
&lt;br /&gt;
Their promise was:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Write Once&lt;br /&gt;
Run Anywhere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Despite early popularity, browser support gradually disappeared due to security, performance, and usability concerns.&lt;br /&gt;
&lt;br /&gt;
=== Opera Widgets and W3C Widgets ===&lt;br /&gt;
&lt;br /&gt;
Widgets attempted to provide small, focused applications that could be installed independently or embedded into larger environments.&lt;br /&gt;
&lt;br /&gt;
Examples included:&lt;br /&gt;
&lt;br /&gt;
* Desktop widgets&lt;br /&gt;
* Dashboard widgets&lt;br /&gt;
* Mobile widgets&lt;br /&gt;
&lt;br /&gt;
Many widget concepts later influenced modern application component architectures.&lt;br /&gt;
&lt;br /&gt;
=== Adobe AIR ===&lt;br /&gt;
&lt;br /&gt;
Adobe AIR combined:&lt;br /&gt;
&lt;br /&gt;
* Flash&lt;br /&gt;
* HTML&lt;br /&gt;
* JavaScript&lt;br /&gt;
&lt;br /&gt;
with desktop deployment capabilities.&lt;br /&gt;
&lt;br /&gt;
AIR was particularly popular for media-rich applications before the decline of Flash technologies.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Silverlight ===&lt;br /&gt;
&lt;br /&gt;
Silverlight was Microsoft&#039;s browser-hosted application framework.&lt;br /&gt;
&lt;br /&gt;
It provided:&lt;br /&gt;
&lt;br /&gt;
* Rich user interfaces&lt;br /&gt;
* .NET programming&lt;br /&gt;
* Multimedia capabilities&lt;br /&gt;
&lt;br /&gt;
Silverlight was eventually superseded by modern web standards and HTML5 technologies.&lt;br /&gt;
&lt;br /&gt;
== Common Themes ==&lt;br /&gt;
&lt;br /&gt;
Although application technologies vary greatly, most share a common structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
     │&lt;br /&gt;
     ▼&lt;br /&gt;
Runtime&lt;br /&gt;
     │&lt;br /&gt;
     ▼&lt;br /&gt;
Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The primary differences are:&lt;br /&gt;
&lt;br /&gt;
* Where the runtime exists&lt;br /&gt;
* Which APIs are exposed&lt;br /&gt;
* How the application is delivered&lt;br /&gt;
* How the application is updated&lt;br /&gt;
&lt;br /&gt;
The business logic itself is often remarkably similar.&lt;br /&gt;
&lt;br /&gt;
== Choosing the Right Approach ==&lt;br /&gt;
&lt;br /&gt;
No application technology is universally superior.&lt;br /&gt;
&lt;br /&gt;
Considerations include:&lt;br /&gt;
&lt;br /&gt;
* Performance requirements&lt;br /&gt;
* Platform targets&lt;br /&gt;
* Offline requirements&lt;br /&gt;
* Security constraints&lt;br /&gt;
* Development cost&lt;br /&gt;
* Existing team skills&lt;br /&gt;
* Long-term maintainability&lt;br /&gt;
&lt;br /&gt;
The best solution is often the one that balances business requirements with technical constraints rather than the newest or most fashionable technology.&lt;br /&gt;
&lt;br /&gt;
== Key Takeaways ==&lt;br /&gt;
&lt;br /&gt;
* An application consists of code, data, a user interface, and a runtime environment.&lt;br /&gt;
* Native applications execute directly against operating system APIs.&lt;br /&gt;
* Web applications execute within a browser.&lt;br /&gt;
* PWAs are enhanced web applications rather than a separate application type.&lt;br /&gt;
* Hybrid technologies attempt to combine the benefits of native and web approaches.&lt;br /&gt;
* Many modern solutions are evolutionary improvements upon ideas explored decades earlier.&lt;br /&gt;
* Understanding application delivery mechanisms helps architects make informed design decisions and avoid reinventing previous mistakes.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Progressive Web Applications]]&lt;br /&gt;
* [[Single Page Applications]]&lt;br /&gt;
* [[Software as a Service]]&lt;br /&gt;
* [[Runtime Environments]]&lt;br /&gt;
* [[Application Architecture]]&lt;br /&gt;
* [[Offline First Design]]&lt;br /&gt;
* [[Opera Widgets]]&lt;br /&gt;
* [[Microsoft HTA]]&lt;br /&gt;
* [[Cross Platform Development]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Applications_Demistified&amp;diff=467</id>
		<title>Applications Demistified</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Applications_Demistified&amp;diff=467"/>
		<updated>2026-08-13T08:57:04Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;= Applications Demystified =  &amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Applications have existed for as long as computers have been capable of running software, yet the term &amp;#039;&amp;#039;application&amp;#039;&amp;#039; has become increasingly ambiguous. Today an application may be a traditional executable, a web site that behaves like a desktop program, a mobile app installed from a store, a Progressive Web App (PWA), or a hybrid solution combining several technologies.  This article explores the major application delivery m...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Applications Demystified =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Applications have existed for as long as computers have been capable of running software, yet the term &#039;&#039;application&#039;&#039; has become increasingly ambiguous. Today an application may be a traditional executable, a web site that behaves like a desktop program, a mobile app installed from a store, a Progressive Web App (PWA), or a hybrid solution combining several technologies.&lt;br /&gt;
&lt;br /&gt;
This article explores the major application delivery mechanisms, explains how they differ, and demonstrates that most solutions ultimately consist of the same building blocks: code, a user interface, a runtime environment, and a method of delivery.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
The software industry often introduces new terminology to describe evolving approaches to application delivery.&lt;br /&gt;
&lt;br /&gt;
Terms such as:&lt;br /&gt;
&lt;br /&gt;
* Native Application&lt;br /&gt;
* Web Application&lt;br /&gt;
* Single Page Application (SPA)&lt;br /&gt;
* Progressive Web App (PWA)&lt;br /&gt;
* Hybrid Application&lt;br /&gt;
* Widget&lt;br /&gt;
* Cloud Application&lt;br /&gt;
* Software as a Service (SaaS)&lt;br /&gt;
&lt;br /&gt;
are frequently used interchangeably despite referring to very different concepts.&lt;br /&gt;
&lt;br /&gt;
In reality, most application technologies attempt to solve the same challenge:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
How do we deliver software functionality to users in a way that is efficient, maintainable, portable, and user-friendly?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Understanding the evolution of application delivery helps architects and developers make informed design decisions rather than simply following current trends.&lt;br /&gt;
&lt;br /&gt;
== What Is An Application? ==&lt;br /&gt;
&lt;br /&gt;
At its simplest, an application consists of four elements:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
│&lt;br /&gt;
├── User Interface&lt;br /&gt;
├── Business Logic&lt;br /&gt;
├── Data&lt;br /&gt;
└── Runtime Environment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The runtime environment provides the services the application requires to operate.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Windows&lt;br /&gt;
* Linux&lt;br /&gt;
* macOS&lt;br /&gt;
* Android&lt;br /&gt;
* iOS&lt;br /&gt;
* Java Runtime Environment (JRE)&lt;br /&gt;
* .NET Runtime&lt;br /&gt;
* Web Browser&lt;br /&gt;
&lt;br /&gt;
Different application technologies primarily differ in the runtime they target.&lt;br /&gt;
&lt;br /&gt;
== A Taxonomy of Applications ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Applications&lt;br /&gt;
│&lt;br /&gt;
├── Native Applications&lt;br /&gt;
│   ├── Windows&lt;br /&gt;
│   ├── macOS&lt;br /&gt;
│   ├── Linux&lt;br /&gt;
│   ├── Android&lt;br /&gt;
│   └── iOS&lt;br /&gt;
│&lt;br /&gt;
├── Web-Based Applications&lt;br /&gt;
│   ├── Traditional Web Apps&lt;br /&gt;
│   ├── SPAs&lt;br /&gt;
│   ├── PWAs&lt;br /&gt;
│   └── SaaS Platforms&lt;br /&gt;
│&lt;br /&gt;
├── Hybrid Applications&lt;br /&gt;
│   ├── Electron&lt;br /&gt;
│   ├── Cordova&lt;br /&gt;
│   ├── Capacitor&lt;br /&gt;
│   └── MAUI Hybrid&lt;br /&gt;
│&lt;br /&gt;
└── Historical Technologies&lt;br /&gt;
    ├── HTA&lt;br /&gt;
    ├── Java Applets&lt;br /&gt;
    ├── Widgets&lt;br /&gt;
    ├── AIR&lt;br /&gt;
    └── Silverlight&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Native Applications ==&lt;br /&gt;
&lt;br /&gt;
A native application is compiled specifically for a particular operating system and executes directly against that platform&#039;s APIs.&lt;br /&gt;
&lt;br /&gt;
=== Characteristics ===&lt;br /&gt;
&lt;br /&gt;
* Direct access to operating system functionality&lt;br /&gt;
* High performance&lt;br /&gt;
* Deep platform integration&lt;br /&gt;
* Platform-specific development tools&lt;br /&gt;
* Platform-specific deployment mechanisms&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Platform&lt;br /&gt;
! Typical Technologies&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| Win32, MFC, .NET, WinUI&lt;br /&gt;
|-&lt;br /&gt;
| macOS&lt;br /&gt;
| Cocoa, Swift&lt;br /&gt;
|-&lt;br /&gt;
| Linux&lt;br /&gt;
| GTK, Qt&lt;br /&gt;
|-&lt;br /&gt;
| Android&lt;br /&gt;
| Kotlin, Java&lt;br /&gt;
|-&lt;br /&gt;
| iOS&lt;br /&gt;
| Swift, Objective-C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Advantages ===&lt;br /&gt;
&lt;br /&gt;
* Excellent performance&lt;br /&gt;
* Rich operating system integration&lt;br /&gt;
* Full access to device capabilities&lt;br /&gt;
&lt;br /&gt;
=== Disadvantages ===&lt;br /&gt;
&lt;br /&gt;
* Multiple codebases may be required&lt;br /&gt;
* Higher development and maintenance costs&lt;br /&gt;
* Platform-specific expertise required&lt;br /&gt;
&lt;br /&gt;
== Web-Based Applications ==&lt;br /&gt;
&lt;br /&gt;
Web applications execute within a web browser rather than directly on the operating system.&lt;br /&gt;
&lt;br /&gt;
Historically, a web application was little more than a website capable of processing user input. Modern web applications can be remarkably sophisticated and often rival desktop applications in functionality.&lt;br /&gt;
&lt;br /&gt;
=== Traditional Web Applications ===&lt;br /&gt;
&lt;br /&gt;
Traditional web applications generate pages on a server and return fully rendered responses to the browser.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Early SharePoint sites&lt;br /&gt;
* Webmail systems&lt;br /&gt;
* Content Management Systems&lt;br /&gt;
* E-commerce platforms&lt;br /&gt;
&lt;br /&gt;
Typical architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Browser&lt;br /&gt;
   │&lt;br /&gt;
HTTP&lt;br /&gt;
   │&lt;br /&gt;
Web Server&lt;br /&gt;
   │&lt;br /&gt;
Database&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Single Page Applications (SPA) ===&lt;br /&gt;
&lt;br /&gt;
Single Page Applications move much of the application logic into the browser.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* React applications&lt;br /&gt;
* Angular applications&lt;br /&gt;
* Vue applications&lt;br /&gt;
&lt;br /&gt;
Typical architecture:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Browser&lt;br /&gt;
│&lt;br /&gt;
├── User Interface&lt;br /&gt;
├── Business Logic&lt;br /&gt;
└── API Calls&lt;br /&gt;
        │&lt;br /&gt;
        ▼&lt;br /&gt;
      Backend&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This model often provides a more responsive user experience by reducing page reloads.&lt;br /&gt;
&lt;br /&gt;
=== Progressive Web Applications (PWA) ===&lt;br /&gt;
&lt;br /&gt;
A Progressive Web Application is a web application enhanced with browser technologies that allow it to behave more like an installed application.&lt;br /&gt;
&lt;br /&gt;
Common features include:&lt;br /&gt;
&lt;br /&gt;
* Offline support&lt;br /&gt;
* Service Workers&lt;br /&gt;
* Push Notifications&lt;br /&gt;
* Installation from the browser&lt;br /&gt;
* Home Screen integration&lt;br /&gt;
&lt;br /&gt;
A PWA remains fundamentally a web application.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Web Application&lt;br /&gt;
      +&lt;br /&gt;
Manifest&lt;br /&gt;
      +&lt;br /&gt;
Service Worker&lt;br /&gt;
      =&lt;br /&gt;
Progressive Web App&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Software as a Service (SaaS) ===&lt;br /&gt;
&lt;br /&gt;
SaaS describes a delivery model rather than a specific technology.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft 365&lt;br /&gt;
* Salesforce&lt;br /&gt;
* ServiceNow&lt;br /&gt;
* Google Workspace&lt;br /&gt;
&lt;br /&gt;
A SaaS platform may internally use:&lt;br /&gt;
&lt;br /&gt;
* Traditional web applications&lt;br /&gt;
* SPAs&lt;br /&gt;
* PWAs&lt;br /&gt;
* Hybrid technologies&lt;br /&gt;
&lt;br /&gt;
The defining characteristic is that the software is consumed as a service.&lt;br /&gt;
&lt;br /&gt;
== Hybrid Applications ==&lt;br /&gt;
&lt;br /&gt;
Hybrid applications attempt to bridge the gap between web technologies and native platforms.&lt;br /&gt;
&lt;br /&gt;
The objective is usually:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Write once, deploy everywhere.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Electron ===&lt;br /&gt;
&lt;br /&gt;
Electron combines:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
+&lt;br /&gt;
Chromium&lt;br /&gt;
+&lt;br /&gt;
Node.js&lt;br /&gt;
=&lt;br /&gt;
Desktop Application&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Visual Studio Code&lt;br /&gt;
* Discord&lt;br /&gt;
* Slack&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Cross-platform&lt;br /&gt;
* Familiar web technologies&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Large deployment size&lt;br /&gt;
* Significant memory usage&lt;br /&gt;
&lt;br /&gt;
=== Apache Cordova ===&lt;br /&gt;
&lt;br /&gt;
Cordova packages web applications inside a native mobile container.&lt;br /&gt;
&lt;br /&gt;
This allows:&lt;br /&gt;
&lt;br /&gt;
* HTML&lt;br /&gt;
* CSS&lt;br /&gt;
* JavaScript&lt;br /&gt;
&lt;br /&gt;
to access selected device capabilities.&lt;br /&gt;
&lt;br /&gt;
=== Capacitor ===&lt;br /&gt;
&lt;br /&gt;
Capacitor evolved from the Cordova model and provides modern native integration for web applications.&lt;br /&gt;
&lt;br /&gt;
It is commonly used with:&lt;br /&gt;
&lt;br /&gt;
* Angular&lt;br /&gt;
* React&lt;br /&gt;
* Vue&lt;br /&gt;
&lt;br /&gt;
=== .NET MAUI Hybrid ===&lt;br /&gt;
&lt;br /&gt;
.NET MAUI Hybrid combines native desktop or mobile interfaces with embedded web technologies.&lt;br /&gt;
&lt;br /&gt;
This approach permits organisations with existing web development experience to leverage their skills while still producing native deployments.&lt;br /&gt;
&lt;br /&gt;
== Historical Technologies ==&lt;br /&gt;
&lt;br /&gt;
Many modern application platforms are built upon ideas first explored decades ago.&lt;br /&gt;
&lt;br /&gt;
=== HTML Applications (HTA) ===&lt;br /&gt;
&lt;br /&gt;
HTAs were introduced by Microsoft as trusted desktop applications based on Internet Explorer technologies.&lt;br /&gt;
&lt;br /&gt;
Characteristics included:&lt;br /&gt;
&lt;br /&gt;
* HTML user interfaces&lt;br /&gt;
* JavaScript and VBScript support&lt;br /&gt;
* Windows integration&lt;br /&gt;
* Reduced browser security restrictions&lt;br /&gt;
&lt;br /&gt;
An HTA can be viewed as a web application running with desktop-level trust.&lt;br /&gt;
&lt;br /&gt;
=== Java Applets ===&lt;br /&gt;
&lt;br /&gt;
Java Applets allowed Java applications to execute within web browsers.&lt;br /&gt;
&lt;br /&gt;
Their promise was:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Write Once&lt;br /&gt;
Run Anywhere&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Despite early popularity, browser support gradually disappeared due to security, performance, and usability concerns.&lt;br /&gt;
&lt;br /&gt;
=== Opera Widgets and W3C Widgets ===&lt;br /&gt;
&lt;br /&gt;
Widgets attempted to provide small, focused applications that could be installed independently or embedded into larger environments.&lt;br /&gt;
&lt;br /&gt;
Examples included:&lt;br /&gt;
&lt;br /&gt;
* Desktop widgets&lt;br /&gt;
* Dashboard widgets&lt;br /&gt;
* Mobile widgets&lt;br /&gt;
&lt;br /&gt;
Many widget concepts later influenced modern application component architectures.&lt;br /&gt;
&lt;br /&gt;
=== Adobe AIR ===&lt;br /&gt;
&lt;br /&gt;
Adobe AIR combined:&lt;br /&gt;
&lt;br /&gt;
* Flash&lt;br /&gt;
* HTML&lt;br /&gt;
* JavaScript&lt;br /&gt;
&lt;br /&gt;
with desktop deployment capabilities.&lt;br /&gt;
&lt;br /&gt;
AIR was particularly popular for media-rich applications before the decline of Flash technologies.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Silverlight ===&lt;br /&gt;
&lt;br /&gt;
Silverlight was Microsoft&#039;s browser-hosted application framework.&lt;br /&gt;
&lt;br /&gt;
It provided:&lt;br /&gt;
&lt;br /&gt;
* Rich user interfaces&lt;br /&gt;
* .NET programming&lt;br /&gt;
* Multimedia capabilities&lt;br /&gt;
&lt;br /&gt;
Silverlight was eventually superseded by modern web standards and HTML5 technologies.&lt;br /&gt;
&lt;br /&gt;
== Common Themes ==&lt;br /&gt;
&lt;br /&gt;
Although application technologies vary greatly, most share a common structure:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
     │&lt;br /&gt;
     ▼&lt;br /&gt;
Runtime&lt;br /&gt;
     │&lt;br /&gt;
     ▼&lt;br /&gt;
Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The primary differences are:&lt;br /&gt;
&lt;br /&gt;
* Where the runtime exists&lt;br /&gt;
* Which APIs are exposed&lt;br /&gt;
* How the application is delivered&lt;br /&gt;
* How the application is updated&lt;br /&gt;
&lt;br /&gt;
The business logic itself is often remarkably similar.&lt;br /&gt;
&lt;br /&gt;
== Choosing the Right Approach ==&lt;br /&gt;
&lt;br /&gt;
No application technology is universally superior.&lt;br /&gt;
&lt;br /&gt;
Considerations include:&lt;br /&gt;
&lt;br /&gt;
* Performance requirements&lt;br /&gt;
* Platform targets&lt;br /&gt;
* Offline requirements&lt;br /&gt;
* Security constraints&lt;br /&gt;
* Development cost&lt;br /&gt;
* Existing team skills&lt;br /&gt;
* Long-term maintainability&lt;br /&gt;
&lt;br /&gt;
The best solution is often the one that balances business requirements with technical constraints rather than the newest or most fashionable technology.&lt;br /&gt;
&lt;br /&gt;
== Key Takeaways ==&lt;br /&gt;
&lt;br /&gt;
* An application consists of code, data, a user interface, and a runtime environment.&lt;br /&gt;
* Native applications execute directly against operating system APIs.&lt;br /&gt;
* Web applications execute within a browser.&lt;br /&gt;
* PWAs are enhanced web applications rather than a separate application type.&lt;br /&gt;
* Hybrid technologies attempt to combine the benefits of native and web approaches.&lt;br /&gt;
* Many modern solutions are evolutionary improvements upon ideas explored decades earlier.&lt;br /&gt;
* Understanding application delivery mechanisms helps architects make informed design decisions and avoid reinventing previous mistakes.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Progressive Web Applications]]&lt;br /&gt;
* [[Single Page Applications]]&lt;br /&gt;
* [[Software as a Service]]&lt;br /&gt;
* [[Runtime Environments]]&lt;br /&gt;
* [[Application Architecture]]&lt;br /&gt;
* [[Offline First Design]]&lt;br /&gt;
* [[Opera Widgets]]&lt;br /&gt;
* [[Microsoft HTA]]&lt;br /&gt;
* [[Cross Platform Development]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Bundling_Routes:_Why_We_Do_It,_How_It_Works,_and_the_Role_of_the_Route_Register_%26_Route_Trie&amp;diff=466</id>
		<title>Bundling Routes: Why We Do It, How It Works, and the Role of the Route Register &amp; Route Trie</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Bundling_Routes:_Why_We_Do_It,_How_It_Works,_and_the_Role_of_the_Route_Register_%26_Route_Trie&amp;diff=466"/>
		<updated>2026-07-13T11:05:34Z</updated>

		<summary type="html">&lt;p&gt;Dex: /* Related Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Route Bundling is the process of taking an API description (such as WADL or OpenAPI) and converting it into efficient data structures that enable fast, predictable request routing.&lt;br /&gt;
This involves two complementary outputs:&lt;br /&gt;
&lt;br /&gt;
a Route Register — a complete catalogue of all available routes&lt;br /&gt;
a Route Trie — a hierarchical structure used for real‑time URL matching&lt;br /&gt;
&lt;br /&gt;
These work together to provide performance, consistency, and reliability in any modern API platform.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
When an API grows, its list of routes becomes complex:&lt;br /&gt;
&lt;br /&gt;
endpoints multiply&lt;br /&gt;
parameters become inconsistent&lt;br /&gt;
documentation and implementation may drift&lt;br /&gt;
performance can degrade if routing is handled naïvely&lt;br /&gt;
&lt;br /&gt;
To manage this complexity, many platforms adopt declarative route definitions (WADL, OpenAPI, etc.) and then compile them into efficient runtime structures.&lt;br /&gt;
This compilation process is what we call Route Bundling.&lt;br /&gt;
Bundling ensures:&lt;br /&gt;
&lt;br /&gt;
the routing system is consistent with its documentation&lt;br /&gt;
every route is validated and conflict‑checked&lt;br /&gt;
routing decisions are deterministic&lt;br /&gt;
performance is predictable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
=== What Is a Route? ===&lt;br /&gt;
A Route is a formal definition of:&lt;br /&gt;
&lt;br /&gt;
the path pattern (including variables)&lt;br /&gt;
the HTTP method&lt;br /&gt;
the accepted and returned media types&lt;br /&gt;
any required or optional parameters&lt;br /&gt;
where the route came from (the source API definition)&lt;br /&gt;
&lt;br /&gt;
Each entry in the final bundle corresponds to a single API operation.&lt;br /&gt;
&lt;br /&gt;
=== What Is Route Bundling? ===&lt;br /&gt;
Route Bundling transforms descriptive API specifications into practical, executable routing structures.&lt;br /&gt;
Typical steps include:&lt;br /&gt;
&lt;br /&gt;
Parsing the API description (WADL, OpenAPI, etc.)&lt;br /&gt;
Resolving inheritance, references, and parameter sets&lt;br /&gt;
Normalising paths, methods, and media types&lt;br /&gt;
Validating for duplicates, ambiguities, and shadowed routes&lt;br /&gt;
Compiling the results into two structures:&lt;br /&gt;
&lt;br /&gt;
a Route Register&lt;br /&gt;
a Route Trie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Optionally caching the compiled output for fast loading&lt;br /&gt;
&lt;br /&gt;
The result is a complete, reliable routing picture of the API.&lt;br /&gt;
&lt;br /&gt;
== The Route Register ==&lt;br /&gt;
=== What It Is ===&lt;br /&gt;
The Route Register is a flat, authoritative list of all routes.&lt;br /&gt;
It is the canonical record of an API after parsing and combining all route information.&lt;br /&gt;
Each entry typically includes:&lt;br /&gt;
&lt;br /&gt;
the HTTP method&lt;br /&gt;
the full path pattern&lt;br /&gt;
how the path is segmented (static/template/wildcard)&lt;br /&gt;
all parameter rules (path, query, header, matrix)&lt;br /&gt;
accepted and produced media types&lt;br /&gt;
source/provenance information&lt;br /&gt;
&lt;br /&gt;
=== What It’s For ===&lt;br /&gt;
The Route Register is ideal for:&lt;br /&gt;
&lt;br /&gt;
documentation&lt;br /&gt;
static analysis&lt;br /&gt;
code generation&lt;br /&gt;
editor tooling&lt;br /&gt;
validation&lt;br /&gt;
debugging&lt;br /&gt;
&lt;br /&gt;
It is not designed for real‑time routing, but it is the truth source that all runtime structures derive from.&lt;br /&gt;
&lt;br /&gt;
== The Route Trie ==&lt;br /&gt;
=== What It Is ===&lt;br /&gt;
The Route Trie (sometimes called a “Routing Trie” or “Path Trie”) is a hierarchical tree where each node represents one segment of a URL path.&lt;br /&gt;
Nodes may represent:&lt;br /&gt;
&lt;br /&gt;
static segments&lt;br /&gt;
template parameters (e.g., {id})&lt;br /&gt;
wildcard segments&lt;br /&gt;
&lt;br /&gt;
Each node can hold:&lt;br /&gt;
&lt;br /&gt;
allowed HTTP methods&lt;br /&gt;
content types&lt;br /&gt;
parameter constraints&lt;br /&gt;
&lt;br /&gt;
This structure enables fast, deterministic routing.&lt;br /&gt;
=== Why a Trie Is Used ===&lt;br /&gt;
A straightforward list of routes would require checking each route one‑by‑one — slow, especially as a platform grows.&lt;br /&gt;
A Trie:&lt;br /&gt;
&lt;br /&gt;
resolves URLs in O(depth), regardless of route count&lt;br /&gt;
honours segment precedence (static &amp;gt; template &amp;gt; wildcard)&lt;br /&gt;
supports efficient extraction of path variables&lt;br /&gt;
ensures consistent routing behaviour&lt;br /&gt;
&lt;br /&gt;
In short: it is the ideal structure for runtime dispatch.&lt;br /&gt;
&lt;br /&gt;
== How WADL, OpenAPI, and Other Specs Fit In ==&lt;br /&gt;
Although the internal formats differ, both WADL and OpenAPI provide:&lt;br /&gt;
&lt;br /&gt;
paths&lt;br /&gt;
operations (methods)&lt;br /&gt;
parameters&lt;br /&gt;
media types&lt;br /&gt;
documentation&lt;br /&gt;
extensions/metadata&lt;br /&gt;
&lt;br /&gt;
A parser turns these declarative definitions into the Route Register, which is then compiled into the Route Trie.&lt;br /&gt;
This separation allows any future API description format to be integrated without changing how routing works internally.&lt;br /&gt;
&lt;br /&gt;
== Caching and Runtime Bundles ==&lt;br /&gt;
=== Why Cache the Bundle? ===&lt;br /&gt;
Once the Register and Trie are built, the platform may cache them in a pre‑compiled bundle.&lt;br /&gt;
Common motivations:&lt;br /&gt;
&lt;br /&gt;
Fast startup: load a ready‑made routing table&lt;br /&gt;
Consistency: ensure each instance runs the same routing map&lt;br /&gt;
Atomic updates: swap in new routing definitions instantly&lt;br /&gt;
Rollback: revert to previous API definitions quickly&lt;br /&gt;
Validation: guarantee that the loaded cache matches the intended source&lt;br /&gt;
&lt;br /&gt;
This makes caching an essential part of a robust API platform.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
Some issues Bundling helps eliminate:&lt;br /&gt;
&lt;br /&gt;
Duplicate routes&lt;br /&gt;
Conflicting parameter definitions&lt;br /&gt;
Ambiguous template/wildcard patterns&lt;br /&gt;
Slow route matching&lt;br /&gt;
Out‑of‑date documentation&lt;br /&gt;
Divergence between spec and implementation&lt;br /&gt;
&lt;br /&gt;
These problems are hard to detect manually — Bundling makes them explicit.&lt;br /&gt;
&lt;br /&gt;
== Design Considerations ==&lt;br /&gt;
Performance&lt;br /&gt;
Tries provide predictable performance even at scale.&lt;br /&gt;
Cached bundles dramatically reduce runtime overhead.&lt;br /&gt;
Maintainability&lt;br /&gt;
A clear separation between:&lt;br /&gt;
&lt;br /&gt;
the route specification,&lt;br /&gt;
the Route Register,&lt;br /&gt;
and the runtime Trie&lt;br /&gt;
&lt;br /&gt;
allows teams to work confidently across documentation, development, and operations.&lt;br /&gt;
Safety&lt;br /&gt;
Validation ensures:&lt;br /&gt;
&lt;br /&gt;
no overlapping routes&lt;br /&gt;
consistent parameter rules&lt;br /&gt;
stable runtime behaviour&lt;br /&gt;
&lt;br /&gt;
These features are essential to any reliable public API.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Diagnostics ==&lt;br /&gt;
Effective Bundlers typically produce detailed diagnostics such as:&lt;br /&gt;
&lt;br /&gt;
duplicate or ambiguous routes&lt;br /&gt;
shadowed paths&lt;br /&gt;
provenance (source file + path)&lt;br /&gt;
parameter conflicts&lt;br /&gt;
media-type inconsistencies&lt;br /&gt;
&lt;br /&gt;
These diagnostics help maintain API health and trace issues quickly.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
[[Routing Algorithms]]&lt;br /&gt;
[[URL Pattern Matching]]&lt;br /&gt;
[[API Specification Formats (WADL, OpenAPI)]]&lt;br /&gt;
[[Trie Data Structures]]&lt;br /&gt;
[[Content Negotiation]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
Internal technical notes on Route Bundling, Registers, Tries, caching, and diagnostics.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Accessibility,_ARIA,_and_Semantic_HTML&amp;diff=465</id>
		<title>Accessibility, ARIA, and Semantic HTML</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Accessibility,_ARIA,_and_Semantic_HTML&amp;diff=465"/>
		<updated>2026-07-13T11:01:59Z</updated>

		<summary type="html">&lt;p&gt;Dex: /* Related Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Accessibility is not a feature, a checklist, or an optional enhancement.  &lt;br /&gt;
It is the discipline of ensuring that meaning, structure, and behaviour remain usable when visual presentation is removed.  &lt;br /&gt;
This article explains how semantic HTML, ARIA, and backward‑compatible design work together — and why misuse of ARIA often makes accessibility worse, not better.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Accessibility is frequently misunderstood as a niche concern or a regulatory burden.  &lt;br /&gt;
In reality, it is fundamental to how the web works.&lt;br /&gt;
&lt;br /&gt;
Blind users browse the internet every day — independently, professionally, and at speed — using assistive technologies such as screen readers. These tools do not “look” at a page. They interrogate structure, roles, relationships, and behaviour exposed through the browser’s accessibility APIs.&lt;br /&gt;
&lt;br /&gt;
If that structure is missing, misleading, or inconsistent, the experience breaks — regardless of how visually polished the interface may be.&lt;br /&gt;
&lt;br /&gt;
The web was never visual‑first.  &lt;br /&gt;
It was structured first.&lt;br /&gt;
&lt;br /&gt;
== Accessibility and Machine‑Readability: The Purpose ==&lt;br /&gt;
&lt;br /&gt;
Accessibility and machine‑readability are often framed as separate concerns:&lt;br /&gt;
* accessibility as a human accommodation&lt;br /&gt;
* machine‑readability as an SEO or automation problem&lt;br /&gt;
&lt;br /&gt;
This separation is artificial.&lt;br /&gt;
&lt;br /&gt;
Assistive technologies *are machines acting on behalf of humans*.  &lt;br /&gt;
They rely on predictable, unambiguous structure to translate content into speech, braille, or alternative navigation models.&lt;br /&gt;
&lt;br /&gt;
Machine‑readability exists so that:&lt;br /&gt;
* meaning survives translation&lt;br /&gt;
* intent is communicated without sight&lt;br /&gt;
* interaction remains predictable&lt;br /&gt;
* users retain autonomy&lt;br /&gt;
&lt;br /&gt;
If an interface only works when seen, it is incomplete.&lt;br /&gt;
&lt;br /&gt;
== Yes — Blind People Browse the Web ==&lt;br /&gt;
&lt;br /&gt;
This should not be surprising, yet it often is.&lt;br /&gt;
&lt;br /&gt;
Blind users do not consume pages linearly. They:&lt;br /&gt;
* jump between headings&lt;br /&gt;
* navigate by landmarks&lt;br /&gt;
* list links or form controls&lt;br /&gt;
* skim structure rather than content&lt;br /&gt;
* rely on predictable keyboard behaviour&lt;br /&gt;
&lt;br /&gt;
Screen readers query the accessibility tree generated from:&lt;br /&gt;
* native HTML semantics&lt;br /&gt;
* ARIA roles, states, and properties&lt;br /&gt;
* actual browser behaviour&lt;br /&gt;
&lt;br /&gt;
When those signals are wrong, users are forced to guess.  &lt;br /&gt;
For sighted users, this is inconvenient.  &lt;br /&gt;
For blind users, it can be a hard stop.&lt;br /&gt;
&lt;br /&gt;
== What Semantic HTML Really Means ==&lt;br /&gt;
&lt;br /&gt;
Semantic HTML is not about fashionable tags or modern syntax.&lt;br /&gt;
&lt;br /&gt;
It is about meaning.&lt;br /&gt;
&lt;br /&gt;
Long before HTML5 introduced new element names:&lt;br /&gt;
* headings conveyed hierarchy&lt;br /&gt;
* lists conveyed grouping&lt;br /&gt;
* links conveyed navigation&lt;br /&gt;
* forms conveyed interaction&lt;br /&gt;
* tables conveyed data relationships&lt;br /&gt;
&lt;br /&gt;
Assistive technologies were built around these concepts — and still rely on them.&lt;br /&gt;
&lt;br /&gt;
Semantics live in:&lt;br /&gt;
* structure&lt;br /&gt;
* relationships&lt;br /&gt;
* behaviour&lt;br /&gt;
&lt;br /&gt;
Not in tag names alone.&lt;br /&gt;
&lt;br /&gt;
A correctly structured document using traditional elements is often more accessible than a visually modern layout with broken or overridden semantics.&lt;br /&gt;
&lt;br /&gt;
== A Deliberate Strategy: Backward‑Compatible Semantic HTML with ARIA ==&lt;br /&gt;
&lt;br /&gt;
A highly effective accessibility strategy is to:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Use a strict, well‑understood subset of HTML4/XHTML features, apply clear semantic structure, and layer ARIA roles only where behaviour genuinely requires it.&#039;&#039;&#039;&lt;br /&gt;
		&lt;br /&gt;
This approach prioritises:&lt;br /&gt;
* predictable browser behaviour&lt;br /&gt;
* stable accessibility API mappings&lt;br /&gt;
* broad assistive technology support&lt;br /&gt;
* graceful degradation across user agents&lt;br /&gt;
&lt;br /&gt;
Accessibility improves through consistency, not novelty.&lt;br /&gt;
&lt;br /&gt;
Backward compatibility is not a technical compromise — it is an accessibility feature.&lt;br /&gt;
&lt;br /&gt;
Users do not choose:&lt;br /&gt;
* their devices&lt;br /&gt;
* their operating systems&lt;br /&gt;
* their assistive technologies&lt;br /&gt;
* their upgrade timelines&lt;br /&gt;
&lt;br /&gt;
Designing for older capabilities is not supporting the past.  &lt;br /&gt;
It is refusing to exclude users in the present.&lt;br /&gt;
&lt;br /&gt;
== ARIA: Purpose, Not Decoration ==&lt;br /&gt;
&lt;br /&gt;
ARIA exists to solve a specific problem:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How do we expose meaning, role, and state when native HTML semantics are insufficient or unavailable?&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It was designed for:&lt;br /&gt;
* complex widgets (trees, grids, tabsets)&lt;br /&gt;
* dynamic state changes&lt;br /&gt;
* rich client interfaces where no native element exists&lt;br /&gt;
&lt;br /&gt;
ARIA was not designed to:&lt;br /&gt;
* replace semantic HTML&lt;br /&gt;
* fix poor structure&lt;br /&gt;
* override native behaviour&lt;br /&gt;
* decorate generic containers&lt;br /&gt;
&lt;br /&gt;
ARIA describes intent — it does not create it.&lt;br /&gt;
&lt;br /&gt;
== The First Rule of ARIA ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If you can use a native HTML element, do not use ARIA.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Native elements provide:&lt;br /&gt;
* built‑in keyboard interaction&lt;br /&gt;
* correct focus management&lt;br /&gt;
* reliable accessibility API mappings&lt;br /&gt;
* consistent behaviour across platforms&lt;br /&gt;
&lt;br /&gt;
Once a native element is replaced with a generic container and a role, the developer becomes responsible for reproducing *all* of that behaviour.&lt;br /&gt;
&lt;br /&gt;
Most implementations do not.&lt;br /&gt;
&lt;br /&gt;
== Common ARIA Misuse Patterns ==&lt;br /&gt;
&lt;br /&gt;
=== Div Soup with Roles ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div role=&amp;quot;button&amp;quot;&amp;gt;Save&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This announces as a button, but lacks:&lt;br /&gt;
* keyboard activation&lt;br /&gt;
* focus handling&lt;br /&gt;
* disabled states&lt;br /&gt;
* expected interaction cues&lt;br /&gt;
&lt;br /&gt;
It sounds correct — but behaves incorrectly.&lt;br /&gt;
&lt;br /&gt;
=== Overriding Native Semantics ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;button role=&amp;quot;link&amp;quot;&amp;gt;Read more&amp;lt;/button&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Overriding native semantics:&lt;br /&gt;
* confuses assistive technologies&lt;br /&gt;
* introduces inconsistent behaviour&lt;br /&gt;
* provides no functional benefit&lt;br /&gt;
&lt;br /&gt;
If it behaves like a link, use a link.  &lt;br /&gt;
If it behaves like a button, use a button.&lt;br /&gt;
&lt;br /&gt;
=== Partial ARIA Implementations ===&lt;br /&gt;
&lt;br /&gt;
ARIA roles are contracts, not labels.&lt;br /&gt;
&lt;br /&gt;
For example, `role=&amp;quot;tab&amp;quot;` implies:&lt;br /&gt;
* keyboard navigation rules&lt;br /&gt;
* selection states&lt;br /&gt;
* relationships to a tablist and panels&lt;br /&gt;
&lt;br /&gt;
Applying the role without the full interaction model breaks user expectations.&lt;br /&gt;
&lt;br /&gt;
=== ARIA as Decoration ===&lt;br /&gt;
&lt;br /&gt;
Adding ARIA “just in case” introduces noise:&lt;br /&gt;
* redundant labels&lt;br /&gt;
* duplicated roles&lt;br /&gt;
* misleading announcements&lt;br /&gt;
&lt;br /&gt;
Missing information is better than incorrect information.&lt;br /&gt;
&lt;br /&gt;
== Why ARIA Misuse Is Worse Than No ARIA ==&lt;br /&gt;
&lt;br /&gt;
ARIA creates expectations.&lt;br /&gt;
&lt;br /&gt;
When those expectations are broken:&lt;br /&gt;
* navigation becomes unpredictable&lt;br /&gt;
* trust is lost&lt;br /&gt;
* users must relearn every interface&lt;br /&gt;
&lt;br /&gt;
Misleading accessibility signals are more harmful than absent ones.&lt;br /&gt;
&lt;br /&gt;
ARIA that lies about behaviour actively damages usability.&lt;br /&gt;
&lt;br /&gt;
== ARIA Is Descriptive, Not Corrective ==&lt;br /&gt;
&lt;br /&gt;
This is the critical mental model:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARIA describes what is already true — it does not make it true.&#039;&#039;&#039;&lt;br /&gt;
		&lt;br /&gt;
If an element:&lt;br /&gt;
* is not keyboard accessible&lt;br /&gt;
* does not manage focus&lt;br /&gt;
* does not behave correctly&lt;br /&gt;
&lt;br /&gt;
Then adding an ARIA role does not fix it.&lt;br /&gt;
&lt;br /&gt;
It misrepresents it.&lt;br /&gt;
&lt;br /&gt;
== Progressive Enhancement and Predictable Behaviour ==&lt;br /&gt;
&lt;br /&gt;
Progressive enhancement is an accessibility strategy.&lt;br /&gt;
&lt;br /&gt;
By:&lt;br /&gt;
* starting with reliable structure&lt;br /&gt;
* layering behaviour carefully&lt;br /&gt;
* avoiding assumptions about capability&lt;br /&gt;
&lt;br /&gt;
Interfaces remain usable across:&lt;br /&gt;
* modern and legacy browsers&lt;br /&gt;
* diverse assistive technologies&lt;br /&gt;
* constrained environments&lt;br /&gt;
&lt;br /&gt;
Predictability is more important than cleverness.&lt;br /&gt;
&lt;br /&gt;
== Design and Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
Good accessibility emerges from early design decisions:&lt;br /&gt;
* semantic structure first&lt;br /&gt;
* behaviour before appearance&lt;br /&gt;
* consistency over novelty&lt;br /&gt;
&lt;br /&gt;
Component libraries, frameworks, and abstractions should:&lt;br /&gt;
* honour native behaviour&lt;br /&gt;
* avoid unnecessary role overrides&lt;br /&gt;
* make accessibility the default, not an add‑on&lt;br /&gt;
&lt;br /&gt;
Accessibility debt compounds quickly — and is expensive to unwind.&lt;br /&gt;
&lt;br /&gt;
== Practical Guidance ==&lt;br /&gt;
&lt;br /&gt;
* Use native HTML elements wherever possible&lt;br /&gt;
* Let the browser expose semantics for you&lt;br /&gt;
* Introduce ARIA only when:&lt;br /&gt;
  * no native element exists&lt;br /&gt;
  * behaviour is fully implemented&lt;br /&gt;
  * the interaction pattern is well understood&lt;br /&gt;
* Test with a keyboard and a screen reader&lt;br /&gt;
* Prefer boring, predictable solutions&lt;br /&gt;
&lt;br /&gt;
== The Quiet Truth ==&lt;br /&gt;
&lt;br /&gt;
Most accessibility failures are not caused by lack of ARIA.&lt;br /&gt;
&lt;br /&gt;
They are caused by:&lt;br /&gt;
* ignoring structure&lt;br /&gt;
* fighting the browser&lt;br /&gt;
* prioritising visuals over interaction models&lt;br /&gt;
&lt;br /&gt;
ARIA does not fix that.&lt;br /&gt;
&lt;br /&gt;
Good engineering does.&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
&lt;br /&gt;
* Progressive Enhancement&lt;br /&gt;
* Structured Data&lt;br /&gt;
* UI Controls and Widgets&lt;br /&gt;
* Machine‑Readable HTML Technologies&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Access_Based_Enumeration_(ABE)&amp;diff=464</id>
		<title>Access Based Enumeration (ABE)</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Access_Based_Enumeration_(ABE)&amp;diff=464"/>
		<updated>2026-07-13T10:59:35Z</updated>

		<summary type="html">&lt;p&gt;Dex: /* Related Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Access Based Enumeration (ABE) is a security and usability feature that hides files, folders, libraries, sites, and other resources from users who do not have permission to access them. Rather than presenting resources and generating &#039;&#039;Access Denied&#039;&#039; messages when users attempt to open them, ABE ensures that users only see resources they are authorised to access.&lt;br /&gt;
&lt;br /&gt;
ABE is commonly used in Windows File Services, SharePoint environments, and enterprise content management systems to improve navigation, reduce information disclosure, and support least-privilege security models.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
=== Why Access Based Enumeration Exists ===&lt;br /&gt;
&lt;br /&gt;
In traditional file systems and content repositories, users may be able to see the names of resources even when they cannot access their contents. While permissions prevent unauthorised access, the visibility of resource names can still reveal useful information about departments, projects, customers, suppliers, or business activities.&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration addresses this issue by aligning resource visibility with resource permissions.&lt;br /&gt;
&lt;br /&gt;
Instead of showing every available resource, the system evaluates the user&#039;s permissions and displays only the items they are authorised to access.&lt;br /&gt;
&lt;br /&gt;
=== Security vs Visibility ===&lt;br /&gt;
&lt;br /&gt;
A common misconception is that Access Based Enumeration provides security.&lt;br /&gt;
&lt;br /&gt;
It does not.&lt;br /&gt;
&lt;br /&gt;
Permissions provide security.&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration provides visibility control.&lt;br /&gt;
&lt;br /&gt;
A resource protected by correctly configured permissions remains secure regardless of whether Access Based Enumeration is enabled. ABE simply removes inaccessible resources from view.&lt;br /&gt;
&lt;br /&gt;
=== Common Misconceptions ===&lt;br /&gt;
&lt;br /&gt;
* ABE is not a replacement for permissions.&lt;br /&gt;
* ABE does not encrypt data.&lt;br /&gt;
* ABE does not grant or remove access rights.&lt;br /&gt;
* ABE does not prevent administrators from seeing resources.&lt;br /&gt;
* ABE improves the user experience but should not be relied upon as a security boundary.&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Visibility Is Not Security ===&lt;br /&gt;
&lt;br /&gt;
Consider a locked office door.&lt;br /&gt;
&lt;br /&gt;
A person may be able to see the door, the room number, and the department name, but they cannot enter without a key.&lt;br /&gt;
&lt;br /&gt;
The lock provides security.&lt;br /&gt;
&lt;br /&gt;
Removing the department name from the door reduces information disclosure.&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration operates in a similar way.&lt;br /&gt;
&lt;br /&gt;
Permissions determine whether access is allowed.&lt;br /&gt;
&lt;br /&gt;
ABE determines whether the resource is visible.&lt;br /&gt;
&lt;br /&gt;
=== Permissions Drive Enumeration ===&lt;br /&gt;
&lt;br /&gt;
When a user views a folder, share, library, or site, the platform evaluates the permissions assigned to that user.&lt;br /&gt;
&lt;br /&gt;
Resources that the user can access are displayed.&lt;br /&gt;
&lt;br /&gt;
Resources that the user cannot access are hidden.&lt;br /&gt;
&lt;br /&gt;
The resulting view differs between users depending upon their access rights.&lt;br /&gt;
&lt;br /&gt;
=== Administrator View vs User View ===&lt;br /&gt;
&lt;br /&gt;
Administrators frequently see more resources than standard users because administrative permissions allow broader access.&lt;br /&gt;
&lt;br /&gt;
This often leads to troubleshooting conversations where an administrator can see a folder while an end user cannot.&lt;br /&gt;
&lt;br /&gt;
Understanding that ABE produces different views for different users is essential when diagnosing visibility issues.&lt;br /&gt;
&lt;br /&gt;
== How Access Based Enumeration Works ==&lt;br /&gt;
&lt;br /&gt;
=== Traditional Resource Enumeration ===&lt;br /&gt;
&lt;br /&gt;
Without Access Based Enumeration:&lt;br /&gt;
&lt;br /&gt;
* The system returns all resource names.&lt;br /&gt;
* Users can browse the entire structure.&lt;br /&gt;
* Clicking inaccessible resources produces access denied errors.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Departments&lt;br /&gt;
├── Finance&lt;br /&gt;
├── Human Resources&lt;br /&gt;
├── IT&lt;br /&gt;
└── Sales&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Every user may see all departmental folders even though they only have access to one of them.&lt;br /&gt;
&lt;br /&gt;
=== Enumerated Resource Lists ===&lt;br /&gt;
&lt;br /&gt;
With Access Based Enumeration enabled, the system filters the list before presenting it to the user.&lt;br /&gt;
&lt;br /&gt;
A Sales user may see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Departments&lt;br /&gt;
└── Sales&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An HR user may see:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Departments&lt;br /&gt;
└── Human Resources&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The underlying structure remains unchanged.&lt;br /&gt;
&lt;br /&gt;
Only the visible representation differs.&lt;br /&gt;
&lt;br /&gt;
=== Permission Evaluation Process ===&lt;br /&gt;
&lt;br /&gt;
The process typically follows these steps:&lt;br /&gt;
&lt;br /&gt;
# User requests a resource listing.&lt;br /&gt;
# The system identifies the user&#039;s security context.&lt;br /&gt;
# Permissions are evaluated against each resource.&lt;br /&gt;
# Accessible resources are returned.&lt;br /&gt;
# Inaccessible resources are omitted.&lt;br /&gt;
&lt;br /&gt;
This evaluation occurs each time content is enumerated.&lt;br /&gt;
&lt;br /&gt;
=== Performance Considerations ===&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration introduces additional permission checks during enumeration.&lt;br /&gt;
&lt;br /&gt;
In most modern environments the impact is negligible.&lt;br /&gt;
&lt;br /&gt;
However, large environments containing millions of objects or complex permission structures may experience increased processing overhead during content enumeration.&lt;br /&gt;
&lt;br /&gt;
== Access Based Enumeration in Windows File Services ==&lt;br /&gt;
&lt;br /&gt;
=== SMB Shares ===&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration is commonly used on Windows file servers hosting departmental shares.&lt;br /&gt;
&lt;br /&gt;
Without ABE, users may see folders belonging to every department.&lt;br /&gt;
&lt;br /&gt;
With ABE enabled, users only see the departments they are authorised to access.&lt;br /&gt;
&lt;br /&gt;
=== Departmental Shares ===&lt;br /&gt;
&lt;br /&gt;
A common implementation is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
\\FILESERVER\Departments&lt;br /&gt;
&lt;br /&gt;
├── Finance&lt;br /&gt;
├── HR&lt;br /&gt;
├── IT&lt;br /&gt;
├── Marketing&lt;br /&gt;
└── Sales&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ABE allows a single share structure while presenting different views to different groups.&lt;br /&gt;
&lt;br /&gt;
This simplifies administration while reducing user confusion.&lt;br /&gt;
&lt;br /&gt;
=== Operational Benefits ===&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Cleaner navigation experience&lt;br /&gt;
* Reduced accidental browsing&lt;br /&gt;
* Lower helpdesk call volumes&lt;br /&gt;
* Reduced information disclosure&lt;br /&gt;
* Improved departmental segregation&lt;br /&gt;
&lt;br /&gt;
== Access Based Enumeration in SharePoint ==&lt;br /&gt;
&lt;br /&gt;
=== SharePoint Sites ===&lt;br /&gt;
&lt;br /&gt;
SharePoint applies similar principles through security trimming.&lt;br /&gt;
&lt;br /&gt;
Users typically see sites, libraries, pages, and content that they are authorised to access.&lt;br /&gt;
&lt;br /&gt;
Resources outside their permission scope are hidden from navigation and search results.&lt;br /&gt;
&lt;br /&gt;
=== Document Libraries ===&lt;br /&gt;
&lt;br /&gt;
Document libraries can be configured with unique permissions.&lt;br /&gt;
&lt;br /&gt;
When combined with security trimming, users only see information relevant to their role.&lt;br /&gt;
&lt;br /&gt;
This is particularly useful within:&lt;br /&gt;
&lt;br /&gt;
* Project portals&lt;br /&gt;
* Department sites&lt;br /&gt;
* Human Resources systems&lt;br /&gt;
* Customer extranets&lt;br /&gt;
&lt;br /&gt;
=== List Content ===&lt;br /&gt;
&lt;br /&gt;
Permissions can also be applied at item level.&lt;br /&gt;
&lt;br /&gt;
As permissions become more granular, users may see entirely different views of the same list.&lt;br /&gt;
&lt;br /&gt;
Care should be taken to avoid excessive complexity when implementing item-level security.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft 365 Considerations ===&lt;br /&gt;
&lt;br /&gt;
Modern Microsoft 365 deployments increasingly rely on security trimming, group membership, and role-based access models.&lt;br /&gt;
&lt;br /&gt;
Although users may not encounter the term &amp;quot;Access Based Enumeration&amp;quot; directly, the underlying visibility principles remain the same.&lt;br /&gt;
&lt;br /&gt;
== Practical Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Department-Based Information Segregation ===&lt;br /&gt;
&lt;br /&gt;
Large organisations frequently organise data around departments.&lt;br /&gt;
&lt;br /&gt;
ABE allows a single logical structure while presenting appropriate content to each department.&lt;br /&gt;
&lt;br /&gt;
=== Project Portals ===&lt;br /&gt;
&lt;br /&gt;
Project teams often require isolated workspaces.&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration prevents project teams from being distracted by unrelated projects while protecting sensitive information.&lt;br /&gt;
&lt;br /&gt;
=== Human Resources Systems ===&lt;br /&gt;
&lt;br /&gt;
HR systems commonly contain confidential employee data.&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration helps ensure that sensitive content remains visible only to authorised personnel.&lt;br /&gt;
&lt;br /&gt;
=== Multi-Tenant Knowledgebases ===&lt;br /&gt;
&lt;br /&gt;
Service providers and consultants may host content for multiple customers within a single environment.&lt;br /&gt;
&lt;br /&gt;
ABE helps maintain separation between tenants while simplifying the underlying infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Security Implications ==&lt;br /&gt;
&lt;br /&gt;
=== Reducing Information Disclosure ===&lt;br /&gt;
&lt;br /&gt;
Even folder names can disclose sensitive information.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Confidential projects&lt;br /&gt;
* Acquisition activities&lt;br /&gt;
* Legal matters&lt;br /&gt;
* Customer names&lt;br /&gt;
* Planned initiatives&lt;br /&gt;
&lt;br /&gt;
ABE reduces this form of exposure.&lt;br /&gt;
&lt;br /&gt;
=== Supporting Least Privilege ===&lt;br /&gt;
&lt;br /&gt;
Organisations implementing least-privilege principles seek to provide users with only the access necessary to perform their duties.&lt;br /&gt;
&lt;br /&gt;
ABE complements this approach by ensuring that users also see only what is relevant to them.&lt;br /&gt;
&lt;br /&gt;
=== Regulatory and Compliance Benefits ===&lt;br /&gt;
&lt;br /&gt;
Many compliance frameworks require appropriate control of information visibility and access.&lt;br /&gt;
&lt;br /&gt;
While ABE alone does not satisfy compliance requirements, it can support broader governance and information security objectives.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Permission Sprawl ===&lt;br /&gt;
&lt;br /&gt;
Frequent permission exceptions can create environments that are difficult to understand and maintain.&lt;br /&gt;
&lt;br /&gt;
Over time this may result in unexpected visibility behaviour.&lt;br /&gt;
&lt;br /&gt;
=== Broken Inheritance Confusion ===&lt;br /&gt;
&lt;br /&gt;
In SharePoint environments, broken permission inheritance can lead to situations where content unexpectedly appears or disappears.&lt;br /&gt;
&lt;br /&gt;
Permission design should be documented and reviewed regularly.&lt;br /&gt;
&lt;br /&gt;
=== Users Believe Data Has Been Deleted ===&lt;br /&gt;
&lt;br /&gt;
A common support call occurs when users lose access to a resource and assume it has been deleted.&lt;br /&gt;
&lt;br /&gt;
In reality, permission changes may simply have removed the resource from view.&lt;br /&gt;
&lt;br /&gt;
=== Over-Reliance on ABE ===&lt;br /&gt;
&lt;br /&gt;
ABE should never be considered a substitute for proper security design.&lt;br /&gt;
&lt;br /&gt;
Resources must remain protected by appropriate permissions regardless of whether ABE is enabled.&lt;br /&gt;
&lt;br /&gt;
== Design and Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Flat vs Deep Structures ===&lt;br /&gt;
&lt;br /&gt;
Deep folder hierarchies can become difficult to manage and troubleshoot.&lt;br /&gt;
&lt;br /&gt;
Where possible, structures should remain logical and predictable.&lt;br /&gt;
&lt;br /&gt;
=== Group-Based Security Models ===&lt;br /&gt;
&lt;br /&gt;
Permissions should generally be assigned to security groups rather than individual users.&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Easier administration&lt;br /&gt;
* Improved scalability&lt;br /&gt;
* Consistent access control&lt;br /&gt;
* Simplified auditing&lt;br /&gt;
&lt;br /&gt;
=== Role-Based Access Control ===&lt;br /&gt;
&lt;br /&gt;
Role-Based Access Control (RBAC) works particularly well with ABE.&lt;br /&gt;
&lt;br /&gt;
Users receive access based on organisational roles rather than manual assignments.&lt;br /&gt;
&lt;br /&gt;
This simplifies both provisioning and maintenance.&lt;br /&gt;
&lt;br /&gt;
=== Maintainability at Scale ===&lt;br /&gt;
&lt;br /&gt;
As environments grow, visibility models become increasingly important.&lt;br /&gt;
&lt;br /&gt;
Architectures designed around groups, roles, and inheritance are typically easier to support than architectures built around numerous individual exceptions.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting and Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
=== Resource Missing From View ===&lt;br /&gt;
&lt;br /&gt;
When a user reports that a file, folder, or site is missing:&lt;br /&gt;
&lt;br /&gt;
# Confirm the user&#039;s identity.&lt;br /&gt;
# Verify group membership.&lt;br /&gt;
# Review inherited permissions.&lt;br /&gt;
# Check unique permissions.&lt;br /&gt;
# Validate visibility from the user&#039;s perspective.&lt;br /&gt;
&lt;br /&gt;
=== Permission Verification Process ===&lt;br /&gt;
&lt;br /&gt;
Administrators should always verify effective permissions before assuming a fault exists.&lt;br /&gt;
&lt;br /&gt;
In many cases the visibility behaviour is operating exactly as designed.&lt;br /&gt;
&lt;br /&gt;
=== Effective Permissions Analysis ===&lt;br /&gt;
&lt;br /&gt;
Questions to investigate include:&lt;br /&gt;
&lt;br /&gt;
* What groups is the user a member of?&lt;br /&gt;
* What permissions are assigned to those groups?&lt;br /&gt;
* Are permissions inherited or unique?&lt;br /&gt;
* Has membership recently changed?&lt;br /&gt;
&lt;br /&gt;
=== Auditing Visibility Issues ===&lt;br /&gt;
&lt;br /&gt;
Visibility problems often originate from:&lt;br /&gt;
&lt;br /&gt;
* Security group configuration&lt;br /&gt;
* Membership changes&lt;br /&gt;
* Permission inheritance breaks&lt;br /&gt;
* Administrative modifications&lt;br /&gt;
&lt;br /&gt;
Auditing these areas usually identifies the root cause.&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
=== Use Security Groups Rather Than Individuals ===&lt;br /&gt;
&lt;br /&gt;
Avoid assigning permissions directly to users wherever possible.&lt;br /&gt;
&lt;br /&gt;
Group-based administration scales significantly better.&lt;br /&gt;
&lt;br /&gt;
=== Document Permission Models ===&lt;br /&gt;
&lt;br /&gt;
Document:&lt;br /&gt;
&lt;br /&gt;
* Permission structures&lt;br /&gt;
* Group ownership&lt;br /&gt;
* Inheritance boundaries&lt;br /&gt;
* Exception processes&lt;br /&gt;
&lt;br /&gt;
Good documentation reduces future confusion.&lt;br /&gt;
&lt;br /&gt;
=== Conduct Regular Reviews ===&lt;br /&gt;
&lt;br /&gt;
Permissions should be reviewed periodically to ensure they continue to reflect business requirements.&lt;br /&gt;
&lt;br /&gt;
=== Keep Structures Logical ===&lt;br /&gt;
&lt;br /&gt;
Users should be able to predict where information belongs.&lt;br /&gt;
&lt;br /&gt;
Simple structures are easier to understand, govern, and troubleshoot.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration is best understood as a visibility management feature rather than a security feature.&lt;br /&gt;
&lt;br /&gt;
Permissions determine who can access a resource.&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration determines who can see it.&lt;br /&gt;
&lt;br /&gt;
When combined with well-designed permission structures, role-based access controls, and least-privilege principles, ABE improves user experience, reduces information disclosure, simplifies navigation, and supports scalable enterprise information architectures.&lt;br /&gt;
&lt;br /&gt;
A useful rule of thumb is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Permissions control access.&lt;br /&gt;
&lt;br /&gt;
Access Based Enumeration controls visibility.&lt;br /&gt;
&lt;br /&gt;
Security comes first.&lt;br /&gt;
&lt;br /&gt;
Enumeration merely reflects it.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
&lt;br /&gt;
* [[Role Based Access Control]]&lt;br /&gt;
* [[Principle of Least Privilege]]&lt;br /&gt;
* [[SharePoint Permissions]]&lt;br /&gt;
* [[NTFS Permissions]]&lt;br /&gt;
* [[Security Group Design]]&lt;br /&gt;
* [[Information Governance]]&lt;br /&gt;
* [[Microsoft 365 Security]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* Microsoft Access-Based Enumeration Documentation&lt;br /&gt;
* Microsoft SharePoint Security Documentation&lt;br /&gt;
* Microsoft SMB File Services Documentation&lt;br /&gt;
* Principle of Least Privilege Security Guidance&lt;br /&gt;
* Organisational Access Control Frameworks&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=ATOM:_A_Clean,_Durable_Model_for_Feeds,_Items,_and_API_Surfaces&amp;diff=463</id>
		<title>ATOM: A Clean, Durable Model for Feeds, Items, and API Surfaces</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=ATOM:_A_Clean,_Durable_Model_for_Feeds,_Items,_and_API_Surfaces&amp;diff=463"/>
		<updated>2026-07-13T10:57:36Z</updated>

		<summary type="html">&lt;p&gt;Dex: /* Related Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ATOM is widely known as a syndication format, but its real strength lies in how elegantly it models collections, items, relationships, and discoverability. Far from being a relic of early web publishing, ATOM continues to provide a clear, machine-readable framework for APIs, content systems, and platforms — especially where structure, stability, and long-term maintainability matter. Combined with AtomPub, Workspaces, and hAtom, ATOM forms a complete ecosystem for exposing lists, entries, and capabilities using well‑understood web standards.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
ATOM was created to solve practical problems: ambiguity, inconsistent schemas, and incompatible interpretations across syndication formats. Instead of inventing a niche, ATOM refined a universal pattern:&lt;br /&gt;
* Feeds contain entries.&lt;br /&gt;
* Entries describe resources.&lt;br /&gt;
* Links describe relationships.&lt;br /&gt;
* Metadata travels with the content.&lt;br /&gt;
&lt;br /&gt;
This foundation makes ATOM valuable far beyond blog feeds. It provides:&lt;br /&gt;
* A stable representation of collections&lt;br /&gt;
* A predictable update model&lt;br /&gt;
* A hypermedia-aware set of link relations&lt;br /&gt;
* A compatible extension story&lt;br /&gt;
&lt;br /&gt;
Systems like SharePoint, workflow engines, content platforms, and custom APIs map naturally onto ATOM’s structure.&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
=== Feeds as Collections ===&lt;br /&gt;
In ATOM, a **feed** is a structured collection endpoint. A feed:&lt;br /&gt;
* Identifies the collection&lt;br /&gt;
* Carries metadata about it&lt;br /&gt;
* Contains a list of entries&lt;br /&gt;
* Provides timestamps and identifiers&lt;br /&gt;
* Establishes update order&lt;br /&gt;
&lt;br /&gt;
A feed behaves exactly like a:&lt;br /&gt;
* List endpoint&lt;br /&gt;
* Queryable dataset&lt;br /&gt;
* Collection surface&lt;br /&gt;
&lt;br /&gt;
=== Entries as Items ===&lt;br /&gt;
An **entry** represents a single resource or item. Each entry includes:&lt;br /&gt;
* A unique, stable ID&lt;br /&gt;
* A title and summary&lt;br /&gt;
* A last updated timestamp&lt;br /&gt;
* Links to related representations&lt;br /&gt;
* Optional embedded content&lt;br /&gt;
&lt;br /&gt;
=== Links as First‑Class Relationships ===&lt;br /&gt;
ATOM uses typed links (`rel`) to describe behaviour and relationships. Common link types include:&lt;br /&gt;
* self&lt;br /&gt;
* edit&lt;br /&gt;
* alternate&lt;br /&gt;
* related&lt;br /&gt;
* via&lt;br /&gt;
&lt;br /&gt;
== ATOM as an API Description Model ==&lt;br /&gt;
From a single feed, a client can infer:&lt;br /&gt;
* What the collection contains&lt;br /&gt;
* How entries are identified&lt;br /&gt;
* When items change&lt;br /&gt;
* How to update them&lt;br /&gt;
* Where related resources live&lt;br /&gt;
&lt;br /&gt;
== AtomPub and Stateful API Behaviour ==&lt;br /&gt;
AtomPub extends ATOM into a complete create/edit/delete model, suitable for CMS platforms, workflow engines, collaboration systems, and job/message queues.&lt;br /&gt;
&lt;br /&gt;
== The Underused ATOM Workspace ==&lt;br /&gt;
A Workspace sits above feeds and describes a **domain of capability**. It provides:&lt;br /&gt;
* A human-readable index of collections&lt;br /&gt;
* A list of exposed feeds&lt;br /&gt;
* A clear capability boundary&lt;br /&gt;
* A discoverable API root&lt;br /&gt;
&lt;br /&gt;
=== Workspace as a Capability Map ===&lt;br /&gt;
A Workspace answers:&lt;br /&gt;
* What collections exist?&lt;br /&gt;
* What categories do they fall into?&lt;br /&gt;
* Which feeds are writable?&lt;br /&gt;
* What capabilities are available?&lt;br /&gt;
&lt;br /&gt;
== ATOM and Natural Update Detection ==&lt;br /&gt;
Because ATOM includes timestamps and stable IDs, clients can detect updates simply by polling the feed—no webhooks, delta tokens, or custom eventing required.&lt;br /&gt;
&lt;br /&gt;
== hAtom and (X)HTML Integration ==&lt;br /&gt;
hAtom allows ATOM concepts to be embedded directly into HTML or XHTML. Benefits include:&lt;br /&gt;
* The page is the API&lt;br /&gt;
* No parallel JSON/XML representation required&lt;br /&gt;
* Great for progressive enhancement and accessibility&lt;br /&gt;
&lt;br /&gt;
== ATOM Workspace Structure (ASCII Diagram) ==&lt;br /&gt;
```&lt;br /&gt;
+----------------------+&lt;br /&gt;
|     Workspace        |&lt;br /&gt;
|  (Capability Root)   |&lt;br /&gt;
+----------+-----------+&lt;br /&gt;
           |&lt;br /&gt;
           v&lt;br /&gt;
   +-------+--------+        +----------------+&lt;br /&gt;
   |      Feed      | -----&amp;gt; |     Feed       |&lt;br /&gt;
   | (Collection A) |        | (Collection B) |&lt;br /&gt;
   +-------+--------+        +--------+-------+&lt;br /&gt;
           |                          |&lt;br /&gt;
           v                          v&lt;br /&gt;
   +-------+--------+        +--------+-------+&lt;br /&gt;
   |      Entry     |        |      Entry     |&lt;br /&gt;
   |   (Item 1)     |        |   (Item 1)     |&lt;br /&gt;
   +----------------+        +----------------+&lt;br /&gt;
           |&lt;br /&gt;
           v&lt;br /&gt;
   +----------------+&lt;br /&gt;
   |      Entry     |&lt;br /&gt;
   |   (Item 2)     |&lt;br /&gt;
   +----------------+&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
== Platform Thinking with ATOM ==&lt;br /&gt;
ATOM’s minimalism provides a durable pattern:&lt;br /&gt;
* Workspace — What exists&lt;br /&gt;
* Feed — What the collection contains&lt;br /&gt;
* Entry — What the item is or what changed&lt;br /&gt;
* Link — What you can do next&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
* Treating ATOM as “just RSS”&lt;br /&gt;
* Hard-coding endpoints instead of using Workspaces&lt;br /&gt;
* Ignoring link relations&lt;br /&gt;
* Assuming the API must be JSON-only&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
When designing with ATOM:&lt;br /&gt;
* Keep feeds stable and well-defined&lt;br /&gt;
* Use Workspaces for capability discovery&lt;br /&gt;
* Let links describe behaviour&lt;br /&gt;
* Use timestamps for natural synchronisation&lt;br /&gt;
&lt;br /&gt;
== Related Articles ==&lt;br /&gt;
* REST and Hypermedia APIs&lt;br /&gt;
* Machine-Readable HTML&lt;br /&gt;
* Progressive Enhancement and APIs&lt;br /&gt;
* SharePoint API Design Patterns&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* RFC 4287 — Atom Syndication Format&lt;br /&gt;
* RFC 5023 — Atom Publishing Protocol&lt;br /&gt;
* Microformats Wiki — hAtom&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Sitemap_Generation_in_MediaWiki&amp;diff=462</id>
		<title>Sitemap Generation in MediaWiki</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Sitemap_Generation_in_MediaWiki&amp;diff=462"/>
		<updated>2026-07-13T10:35:57Z</updated>

		<summary type="html">&lt;p&gt;Dex: /* robots.txt Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Sitemaps help search engines discover, understand, and prioritise content within a website. MediaWiki provides several methods for generating XML sitemaps, ranging from automatic generation during page edits to scheduled generation for large-scale installations. This article examines the available options, their advantages and disadvantages, and provides guidance on selecting an appropriate sitemap strategy for a MediaWiki-based Knowledgebase.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
=== What is a Sitemap? ===&lt;br /&gt;
&lt;br /&gt;
A sitemap is a structured XML document that provides search engines with a list of URLs available within a website.&lt;br /&gt;
&lt;br /&gt;
The sitemap protocol allows website owners to communicate page locations, modification dates, update frequency, and relative importance. While search engines can discover content by following links, a sitemap provides a direct inventory of available content and can improve crawl efficiency.&lt;br /&gt;
&lt;br /&gt;
=== Why Search Engines Use Sitemaps ===&lt;br /&gt;
&lt;br /&gt;
Search engines continuously crawl the Internet looking for new and updated content.&lt;br /&gt;
&lt;br /&gt;
Although modern search engines are highly effective at discovering content through hyperlinks, a sitemap offers several advantages:&lt;br /&gt;
&lt;br /&gt;
* Faster discovery of newly published articles&lt;br /&gt;
* Faster identification of updated content&lt;br /&gt;
* Improved visibility of deeply nested pages&lt;br /&gt;
* Better crawl coverage for large websites&lt;br /&gt;
* Reduced reliance on link discovery alone&lt;br /&gt;
&lt;br /&gt;
Sitemaps do not guarantee indexing, but they increase the likelihood that content will be discovered promptly.&lt;br /&gt;
&lt;br /&gt;
=== Why Knowledgebases Benefit from Sitemaps ===&lt;br /&gt;
&lt;br /&gt;
Knowledgebases often contain large volumes of technical content organised into categories, namespaces and hierarchies.&lt;br /&gt;
&lt;br /&gt;
Without a sitemap, search engines may take significantly longer to discover articles that are newly created, infrequently linked, or buried deep within the site&#039;s navigation structure.&lt;br /&gt;
&lt;br /&gt;
A regularly maintained sitemap helps ensure that:&lt;br /&gt;
&lt;br /&gt;
* New articles are discovered quickly&lt;br /&gt;
* Updated articles are re-crawled efficiently&lt;br /&gt;
* Search engine coverage remains comprehensive&lt;br /&gt;
* Organic search traffic can grow more consistently&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
&lt;br /&gt;
=== The sitemap.xml Standard ===&lt;br /&gt;
&lt;br /&gt;
The standard sitemap format is an XML document containing one or more URL entries.&lt;br /&gt;
&lt;br /&gt;
A typical entry may include:&lt;br /&gt;
&lt;br /&gt;
* URL location&lt;br /&gt;
* Last modification date&lt;br /&gt;
* Suggested update frequency&lt;br /&gt;
* Relative priority&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;url&amp;gt;&lt;br /&gt;
    &amp;lt;loc&amp;gt;https://kb.example.com/wiki/OSI_Model&amp;lt;/loc&amp;gt;&lt;br /&gt;
    &amp;lt;lastmod&amp;gt;2026-07-13&amp;lt;/lastmod&amp;gt;&lt;br /&gt;
    &amp;lt;changefreq&amp;gt;weekly&amp;lt;/changefreq&amp;gt;&lt;br /&gt;
    &amp;lt;priority&amp;gt;0.8&amp;lt;/priority&amp;gt;&lt;br /&gt;
&amp;lt;/url&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== URL Discovery vs XML Discovery ===&lt;br /&gt;
&lt;br /&gt;
Search engines discover pages through two primary mechanisms:&lt;br /&gt;
&lt;br /&gt;
* Link crawling&lt;br /&gt;
* XML sitemap submission&lt;br /&gt;
&lt;br /&gt;
Link crawling remains the primary discovery mechanism.&lt;br /&gt;
&lt;br /&gt;
Sitemaps should be viewed as a supplementary discovery aid rather than a replacement for good site navigation.&lt;br /&gt;
&lt;br /&gt;
Well-designed internal linking remains essential.&lt;br /&gt;
&lt;br /&gt;
=== robots.txt Integration ===&lt;br /&gt;
&lt;br /&gt;
Search engines should be informed of a sitemap&#039;s location through the site&#039;s robots.txt file.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
&lt;br /&gt;
Allow: /&lt;br /&gt;
&lt;br /&gt;
Sitemap: https://www.pirho.net/sitemap.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows supporting search engines to locate the sitemap immediately during crawl operations.&lt;br /&gt;
&lt;br /&gt;
== Sitemap Generation Options in MediaWiki ==&lt;br /&gt;
&lt;br /&gt;
MediaWiki supports multiple approaches to sitemap generation.&lt;br /&gt;
&lt;br /&gt;
Each approach has advantages depending on the size and update frequency of the wiki.&lt;br /&gt;
&lt;br /&gt;
=== Option 1: AutoSitemap Extension ===&lt;br /&gt;
&lt;br /&gt;
The AutoSitemap extension automatically rebuilds the sitemap whenever page content changes.&lt;br /&gt;
&lt;br /&gt;
Events typically triggering regeneration include:&lt;br /&gt;
&lt;br /&gt;
* Article creation&lt;br /&gt;
* Article modification&lt;br /&gt;
* Article deletion&lt;br /&gt;
* Page moves&lt;br /&gt;
* File uploads&lt;br /&gt;
* Page restoration&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Automatic operation&lt;br /&gt;
* No scheduler required&lt;br /&gt;
* Near real-time updates&lt;br /&gt;
* Simple installation&lt;br /&gt;
* Minimal administration&lt;br /&gt;
&lt;br /&gt;
==== Disadvantages ====&lt;br /&gt;
&lt;br /&gt;
* Rebuilds occur frequently&lt;br /&gt;
* Resource usage increases with site size&lt;br /&gt;
* May become inefficient for large installations&lt;br /&gt;
&lt;br /&gt;
==== Suitable Use Cases ====&lt;br /&gt;
&lt;br /&gt;
* Small knowledgebases&lt;br /&gt;
* Documentation portals&lt;br /&gt;
* Internal wikis&lt;br /&gt;
* Sites with fewer than approximately 10,000 pages&lt;br /&gt;
&lt;br /&gt;
=== Option 2: generateSitemap.php ===&lt;br /&gt;
&lt;br /&gt;
MediaWiki includes maintenance scripts capable of generating sitemap files on demand.&lt;br /&gt;
&lt;br /&gt;
Rather than regenerating whenever content changes, administrators execute the script through:&lt;br /&gt;
&lt;br /&gt;
* Scheduled tasks&lt;br /&gt;
* Cron jobs&lt;br /&gt;
* Automation platforms&lt;br /&gt;
* Orchestration systems&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Highly scalable&lt;br /&gt;
* Predictable resource usage&lt;br /&gt;
* Supports very large wikis&lt;br /&gt;
* Suitable for enterprise deployments&lt;br /&gt;
&lt;br /&gt;
==== Disadvantages ====&lt;br /&gt;
&lt;br /&gt;
* Requires task scheduling&lt;br /&gt;
* Changes are not reflected immediately&lt;br /&gt;
* Additional administration effort&lt;br /&gt;
&lt;br /&gt;
==== Suitable Use Cases ====&lt;br /&gt;
&lt;br /&gt;
* Large public knowledgebases&lt;br /&gt;
* Documentation platforms&lt;br /&gt;
* Enterprise MediaWiki deployments&lt;br /&gt;
* Sites exceeding tens of thousands of pages&lt;br /&gt;
&lt;br /&gt;
=== Option 3: MediaWiki Sitemap REST API ===&lt;br /&gt;
&lt;br /&gt;
Recent MediaWiki releases include sitemap generation through a REST API endpoint.&lt;br /&gt;
&lt;br /&gt;
Rather than storing a static sitemap file, MediaWiki can generate sitemap content dynamically when requested.&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Built into modern MediaWiki releases&lt;br /&gt;
* No external extension required&lt;br /&gt;
* Centralised platform support&lt;br /&gt;
&lt;br /&gt;
==== Disadvantages ====&lt;br /&gt;
&lt;br /&gt;
* Dynamic generation may increase server load&lt;br /&gt;
* Requires appropriate configuration&lt;br /&gt;
* May attract frequent crawler requests&lt;br /&gt;
&lt;br /&gt;
==== Suitable Use Cases ====&lt;br /&gt;
&lt;br /&gt;
* Modern MediaWiki environments&lt;br /&gt;
* API-centric deployments&lt;br /&gt;
* Administrators wishing to minimise third-party extensions&lt;br /&gt;
&lt;br /&gt;
== Practical Application ==&lt;br /&gt;
&lt;br /&gt;
=== Small Knowledgebases (Under 10,000 Articles) ===&lt;br /&gt;
&lt;br /&gt;
For smaller installations, automatic generation is often the simplest and most effective option.&lt;br /&gt;
&lt;br /&gt;
The administrative overhead is minimal and sitemap updates occur immediately after content changes.&lt;br /&gt;
&lt;br /&gt;
In practice, many smaller knowledgebases benefit from the simplicity of this approach.&lt;br /&gt;
&lt;br /&gt;
=== Medium Knowledgebases ===&lt;br /&gt;
&lt;br /&gt;
As article counts increase, regeneration costs become more noticeable.&lt;br /&gt;
&lt;br /&gt;
At this stage, administrators should consider:&lt;br /&gt;
&lt;br /&gt;
* Regeneration rate limiting&lt;br /&gt;
* Namespace exclusions&lt;br /&gt;
* Reduced generation frequency&lt;br /&gt;
&lt;br /&gt;
This balances freshness against system performance.&lt;br /&gt;
&lt;br /&gt;
=== Large Knowledgebases ===&lt;br /&gt;
&lt;br /&gt;
Large installations should generally avoid rebuilding entire sitemaps on every page modification.&lt;br /&gt;
&lt;br /&gt;
Scheduled generation is typically preferred because it:&lt;br /&gt;
&lt;br /&gt;
* Reduces server load&lt;br /&gt;
* Improves predictability&lt;br /&gt;
* Scales more effectively&lt;br /&gt;
* Supports sitemap indexes&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Regeneration on Every Edit ===&lt;br /&gt;
&lt;br /&gt;
Automatic regeneration provides the freshest sitemap possible.&lt;br /&gt;
&lt;br /&gt;
However, this convenience comes at the cost of increased server activity.&lt;br /&gt;
&lt;br /&gt;
As content volume increases, the administrative simplicity may no longer justify the resource consumption.&lt;br /&gt;
&lt;br /&gt;
=== Scheduled Generation ===&lt;br /&gt;
&lt;br /&gt;
Scheduled generation introduces a small delay between content publication and sitemap updates.&lt;br /&gt;
&lt;br /&gt;
For most knowledgebases, this delay is insignificant.&lt;br /&gt;
&lt;br /&gt;
Search engines typically do not require second-by-second awareness of content updates.&lt;br /&gt;
&lt;br /&gt;
=== Namespace Filtering ===&lt;br /&gt;
&lt;br /&gt;
Not every namespace should appear within a public sitemap.&lt;br /&gt;
&lt;br /&gt;
Common exclusions include:&lt;br /&gt;
&lt;br /&gt;
* User pages&lt;br /&gt;
* Talk pages&lt;br /&gt;
* Template pages&lt;br /&gt;
* MediaWiki system pages&lt;br /&gt;
* Administrative content&lt;br /&gt;
&lt;br /&gt;
A sitemap should focus on content that delivers value to visitors.&lt;br /&gt;
&lt;br /&gt;
=== Category-Based Sitemap Strategies ===&lt;br /&gt;
&lt;br /&gt;
Large knowledgebases can benefit from dividing content into logical sitemap groups.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
* Tutorials&lt;br /&gt;
* Deep Dives&lt;br /&gt;
* Reference Material&lt;br /&gt;
* API Documentation&lt;br /&gt;
&lt;br /&gt;
This approach improves management and can assist search engines in understanding site structure.&lt;br /&gt;
&lt;br /&gt;
=== Search Engine Crawl Budget ===&lt;br /&gt;
&lt;br /&gt;
Search engines allocate finite resources when crawling websites.&lt;br /&gt;
&lt;br /&gt;
Poorly configured sitemaps can waste crawl budget by presenting:&lt;br /&gt;
&lt;br /&gt;
* Duplicate content&lt;br /&gt;
* Administrative pages&lt;br /&gt;
* Low-value content&lt;br /&gt;
* Redirect pages&lt;br /&gt;
&lt;br /&gt;
Effective sitemaps help search engines focus on important material.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Including Administrative Namespaces ===&lt;br /&gt;
&lt;br /&gt;
Publishing internal administrative content can dilute sitemap quality and waste crawl resources.&lt;br /&gt;
&lt;br /&gt;
Always review namespace inclusion policies.&lt;br /&gt;
&lt;br /&gt;
=== Broken Canonical URLs ===&lt;br /&gt;
&lt;br /&gt;
Incorrect server configuration may result in:&lt;br /&gt;
&lt;br /&gt;
* Mixed protocols&lt;br /&gt;
* Internal hostnames&lt;br /&gt;
* Duplicate domains&lt;br /&gt;
&lt;br /&gt;
Search engines should only receive canonical URLs.&lt;br /&gt;
&lt;br /&gt;
=== Stale Sitemaps ===&lt;br /&gt;
&lt;br /&gt;
A sitemap is only useful if it reflects current site content.&lt;br /&gt;
&lt;br /&gt;
Regular validation should form part of routine maintenance procedures.&lt;br /&gt;
&lt;br /&gt;
=== Oversized Sitemap Files ===&lt;br /&gt;
&lt;br /&gt;
Very large knowledgebases may exceed practical sitemap limits.&lt;br /&gt;
&lt;br /&gt;
When this occurs, sitemap indexes and segmented sitemap structures should be adopted.&lt;br /&gt;
&lt;br /&gt;
== Recommended Approach ==&lt;br /&gt;
&lt;br /&gt;
=== SEO Knowledgebase Reference Architecture ===&lt;br /&gt;
&lt;br /&gt;
For most MediaWiki-based technical knowledgebases, the following approach provides an effective balance:&lt;br /&gt;
&lt;br /&gt;
* Use AutoSitemap for smaller installations&lt;br /&gt;
* Exclude administrative namespaces&lt;br /&gt;
* Publish sitemap location in robots.txt&lt;br /&gt;
* Submit the sitemap to major search engines&lt;br /&gt;
* Monitor indexing through search engine webmaster tools&lt;br /&gt;
* Migrate to scheduled generation as content volume grows&lt;br /&gt;
&lt;br /&gt;
This provides a straightforward upgrade path without introducing unnecessary complexity early in the project&#039;s lifecycle.&lt;br /&gt;
&lt;br /&gt;
== Decision Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Knowledgebase Size&lt;br /&gt;
! Recommended Approach&lt;br /&gt;
|-&lt;br /&gt;
| Under 10,000 Pages&lt;br /&gt;
| AutoSitemap&lt;br /&gt;
|-&lt;br /&gt;
| 10,000-50,000 Pages&lt;br /&gt;
| AutoSitemap with rate limiting&lt;br /&gt;
|-&lt;br /&gt;
| Over 50,000 Pages&lt;br /&gt;
| generateSitemap.php&lt;br /&gt;
|-&lt;br /&gt;
| Enterprise Deployments&lt;br /&gt;
| Scheduled sitemap indexes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Key Takeaways ==&lt;br /&gt;
&lt;br /&gt;
* Sitemaps improve content discovery but do not replace good navigation.&lt;br /&gt;
* Smaller MediaWiki installations benefit from automatic sitemap generation.&lt;br /&gt;
* Larger installations should favour scheduled generation.&lt;br /&gt;
* Administrative content should generally be excluded.&lt;br /&gt;
* Sitemap strategy should evolve alongside the growth of the Knowledgebase.&lt;br /&gt;
* A well-maintained sitemap is an important component of technical SEO.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[robots.txt]]&lt;br /&gt;
* [[MediaWiki SEO]]&lt;br /&gt;
* [[Structured Data]]&lt;br /&gt;
* [[Search Engine Crawling]]&lt;br /&gt;
* [[Search Engine Indexing]]&lt;br /&gt;
* [[Technical SEO]]&lt;br /&gt;
* [[Category Design]]&lt;br /&gt;
* [[Information Architecture]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* MediaWiki Manual: Sitemap&lt;br /&gt;
* MediaWiki Extension: AutoSitemap&lt;br /&gt;
* Sitemap Protocol Specification&lt;br /&gt;
* Google Search Central Documentation&lt;br /&gt;
* Bing Webmaster Guidelines&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Sitemap_Generation_in_MediaWiki&amp;diff=461</id>
		<title>Sitemap Generation in MediaWiki</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Sitemap_Generation_in_MediaWiki&amp;diff=461"/>
		<updated>2026-07-13T10:35:35Z</updated>

		<summary type="html">&lt;p&gt;Dex: /* robots.txt Integration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Sitemaps help search engines discover, understand, and prioritise content within a website. MediaWiki provides several methods for generating XML sitemaps, ranging from automatic generation during page edits to scheduled generation for large-scale installations. This article examines the available options, their advantages and disadvantages, and provides guidance on selecting an appropriate sitemap strategy for a MediaWiki-based Knowledgebase.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
=== What is a Sitemap? ===&lt;br /&gt;
&lt;br /&gt;
A sitemap is a structured XML document that provides search engines with a list of URLs available within a website.&lt;br /&gt;
&lt;br /&gt;
The sitemap protocol allows website owners to communicate page locations, modification dates, update frequency, and relative importance. While search engines can discover content by following links, a sitemap provides a direct inventory of available content and can improve crawl efficiency.&lt;br /&gt;
&lt;br /&gt;
=== Why Search Engines Use Sitemaps ===&lt;br /&gt;
&lt;br /&gt;
Search engines continuously crawl the Internet looking for new and updated content.&lt;br /&gt;
&lt;br /&gt;
Although modern search engines are highly effective at discovering content through hyperlinks, a sitemap offers several advantages:&lt;br /&gt;
&lt;br /&gt;
* Faster discovery of newly published articles&lt;br /&gt;
* Faster identification of updated content&lt;br /&gt;
* Improved visibility of deeply nested pages&lt;br /&gt;
* Better crawl coverage for large websites&lt;br /&gt;
* Reduced reliance on link discovery alone&lt;br /&gt;
&lt;br /&gt;
Sitemaps do not guarantee indexing, but they increase the likelihood that content will be discovered promptly.&lt;br /&gt;
&lt;br /&gt;
=== Why Knowledgebases Benefit from Sitemaps ===&lt;br /&gt;
&lt;br /&gt;
Knowledgebases often contain large volumes of technical content organised into categories, namespaces and hierarchies.&lt;br /&gt;
&lt;br /&gt;
Without a sitemap, search engines may take significantly longer to discover articles that are newly created, infrequently linked, or buried deep within the site&#039;s navigation structure.&lt;br /&gt;
&lt;br /&gt;
A regularly maintained sitemap helps ensure that:&lt;br /&gt;
&lt;br /&gt;
* New articles are discovered quickly&lt;br /&gt;
* Updated articles are re-crawled efficiently&lt;br /&gt;
* Search engine coverage remains comprehensive&lt;br /&gt;
* Organic search traffic can grow more consistently&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
&lt;br /&gt;
=== The sitemap.xml Standard ===&lt;br /&gt;
&lt;br /&gt;
The standard sitemap format is an XML document containing one or more URL entries.&lt;br /&gt;
&lt;br /&gt;
A typical entry may include:&lt;br /&gt;
&lt;br /&gt;
* URL location&lt;br /&gt;
* Last modification date&lt;br /&gt;
* Suggested update frequency&lt;br /&gt;
* Relative priority&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;url&amp;gt;&lt;br /&gt;
    &amp;lt;loc&amp;gt;https://kb.example.com/wiki/OSI_Model&amp;lt;/loc&amp;gt;&lt;br /&gt;
    &amp;lt;lastmod&amp;gt;2026-07-13&amp;lt;/lastmod&amp;gt;&lt;br /&gt;
    &amp;lt;changefreq&amp;gt;weekly&amp;lt;/changefreq&amp;gt;&lt;br /&gt;
    &amp;lt;priority&amp;gt;0.8&amp;lt;/priority&amp;gt;&lt;br /&gt;
&amp;lt;/url&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== URL Discovery vs XML Discovery ===&lt;br /&gt;
&lt;br /&gt;
Search engines discover pages through two primary mechanisms:&lt;br /&gt;
&lt;br /&gt;
* Link crawling&lt;br /&gt;
* XML sitemap submission&lt;br /&gt;
&lt;br /&gt;
Link crawling remains the primary discovery mechanism.&lt;br /&gt;
&lt;br /&gt;
Sitemaps should be viewed as a supplementary discovery aid rather than a replacement for good site navigation.&lt;br /&gt;
&lt;br /&gt;
Well-designed internal linking remains essential.&lt;br /&gt;
&lt;br /&gt;
=== robots.txt Integration ===&lt;br /&gt;
&lt;br /&gt;
Search engines should be informed of a sitemap&#039;s location through the site&#039;s robots.txt file.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
&lt;br /&gt;
Allow: /&lt;br /&gt;
&lt;br /&gt;
Sitemap: https://knowledgebase.pirho.net/sitemap.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows supporting search engines to locate the sitemap immediately during crawl operations.&lt;br /&gt;
&lt;br /&gt;
== Sitemap Generation Options in MediaWiki ==&lt;br /&gt;
&lt;br /&gt;
MediaWiki supports multiple approaches to sitemap generation.&lt;br /&gt;
&lt;br /&gt;
Each approach has advantages depending on the size and update frequency of the wiki.&lt;br /&gt;
&lt;br /&gt;
=== Option 1: AutoSitemap Extension ===&lt;br /&gt;
&lt;br /&gt;
The AutoSitemap extension automatically rebuilds the sitemap whenever page content changes.&lt;br /&gt;
&lt;br /&gt;
Events typically triggering regeneration include:&lt;br /&gt;
&lt;br /&gt;
* Article creation&lt;br /&gt;
* Article modification&lt;br /&gt;
* Article deletion&lt;br /&gt;
* Page moves&lt;br /&gt;
* File uploads&lt;br /&gt;
* Page restoration&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Automatic operation&lt;br /&gt;
* No scheduler required&lt;br /&gt;
* Near real-time updates&lt;br /&gt;
* Simple installation&lt;br /&gt;
* Minimal administration&lt;br /&gt;
&lt;br /&gt;
==== Disadvantages ====&lt;br /&gt;
&lt;br /&gt;
* Rebuilds occur frequently&lt;br /&gt;
* Resource usage increases with site size&lt;br /&gt;
* May become inefficient for large installations&lt;br /&gt;
&lt;br /&gt;
==== Suitable Use Cases ====&lt;br /&gt;
&lt;br /&gt;
* Small knowledgebases&lt;br /&gt;
* Documentation portals&lt;br /&gt;
* Internal wikis&lt;br /&gt;
* Sites with fewer than approximately 10,000 pages&lt;br /&gt;
&lt;br /&gt;
=== Option 2: generateSitemap.php ===&lt;br /&gt;
&lt;br /&gt;
MediaWiki includes maintenance scripts capable of generating sitemap files on demand.&lt;br /&gt;
&lt;br /&gt;
Rather than regenerating whenever content changes, administrators execute the script through:&lt;br /&gt;
&lt;br /&gt;
* Scheduled tasks&lt;br /&gt;
* Cron jobs&lt;br /&gt;
* Automation platforms&lt;br /&gt;
* Orchestration systems&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Highly scalable&lt;br /&gt;
* Predictable resource usage&lt;br /&gt;
* Supports very large wikis&lt;br /&gt;
* Suitable for enterprise deployments&lt;br /&gt;
&lt;br /&gt;
==== Disadvantages ====&lt;br /&gt;
&lt;br /&gt;
* Requires task scheduling&lt;br /&gt;
* Changes are not reflected immediately&lt;br /&gt;
* Additional administration effort&lt;br /&gt;
&lt;br /&gt;
==== Suitable Use Cases ====&lt;br /&gt;
&lt;br /&gt;
* Large public knowledgebases&lt;br /&gt;
* Documentation platforms&lt;br /&gt;
* Enterprise MediaWiki deployments&lt;br /&gt;
* Sites exceeding tens of thousands of pages&lt;br /&gt;
&lt;br /&gt;
=== Option 3: MediaWiki Sitemap REST API ===&lt;br /&gt;
&lt;br /&gt;
Recent MediaWiki releases include sitemap generation through a REST API endpoint.&lt;br /&gt;
&lt;br /&gt;
Rather than storing a static sitemap file, MediaWiki can generate sitemap content dynamically when requested.&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Built into modern MediaWiki releases&lt;br /&gt;
* No external extension required&lt;br /&gt;
* Centralised platform support&lt;br /&gt;
&lt;br /&gt;
==== Disadvantages ====&lt;br /&gt;
&lt;br /&gt;
* Dynamic generation may increase server load&lt;br /&gt;
* Requires appropriate configuration&lt;br /&gt;
* May attract frequent crawler requests&lt;br /&gt;
&lt;br /&gt;
==== Suitable Use Cases ====&lt;br /&gt;
&lt;br /&gt;
* Modern MediaWiki environments&lt;br /&gt;
* API-centric deployments&lt;br /&gt;
* Administrators wishing to minimise third-party extensions&lt;br /&gt;
&lt;br /&gt;
== Practical Application ==&lt;br /&gt;
&lt;br /&gt;
=== Small Knowledgebases (Under 10,000 Articles) ===&lt;br /&gt;
&lt;br /&gt;
For smaller installations, automatic generation is often the simplest and most effective option.&lt;br /&gt;
&lt;br /&gt;
The administrative overhead is minimal and sitemap updates occur immediately after content changes.&lt;br /&gt;
&lt;br /&gt;
In practice, many smaller knowledgebases benefit from the simplicity of this approach.&lt;br /&gt;
&lt;br /&gt;
=== Medium Knowledgebases ===&lt;br /&gt;
&lt;br /&gt;
As article counts increase, regeneration costs become more noticeable.&lt;br /&gt;
&lt;br /&gt;
At this stage, administrators should consider:&lt;br /&gt;
&lt;br /&gt;
* Regeneration rate limiting&lt;br /&gt;
* Namespace exclusions&lt;br /&gt;
* Reduced generation frequency&lt;br /&gt;
&lt;br /&gt;
This balances freshness against system performance.&lt;br /&gt;
&lt;br /&gt;
=== Large Knowledgebases ===&lt;br /&gt;
&lt;br /&gt;
Large installations should generally avoid rebuilding entire sitemaps on every page modification.&lt;br /&gt;
&lt;br /&gt;
Scheduled generation is typically preferred because it:&lt;br /&gt;
&lt;br /&gt;
* Reduces server load&lt;br /&gt;
* Improves predictability&lt;br /&gt;
* Scales more effectively&lt;br /&gt;
* Supports sitemap indexes&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Regeneration on Every Edit ===&lt;br /&gt;
&lt;br /&gt;
Automatic regeneration provides the freshest sitemap possible.&lt;br /&gt;
&lt;br /&gt;
However, this convenience comes at the cost of increased server activity.&lt;br /&gt;
&lt;br /&gt;
As content volume increases, the administrative simplicity may no longer justify the resource consumption.&lt;br /&gt;
&lt;br /&gt;
=== Scheduled Generation ===&lt;br /&gt;
&lt;br /&gt;
Scheduled generation introduces a small delay between content publication and sitemap updates.&lt;br /&gt;
&lt;br /&gt;
For most knowledgebases, this delay is insignificant.&lt;br /&gt;
&lt;br /&gt;
Search engines typically do not require second-by-second awareness of content updates.&lt;br /&gt;
&lt;br /&gt;
=== Namespace Filtering ===&lt;br /&gt;
&lt;br /&gt;
Not every namespace should appear within a public sitemap.&lt;br /&gt;
&lt;br /&gt;
Common exclusions include:&lt;br /&gt;
&lt;br /&gt;
* User pages&lt;br /&gt;
* Talk pages&lt;br /&gt;
* Template pages&lt;br /&gt;
* MediaWiki system pages&lt;br /&gt;
* Administrative content&lt;br /&gt;
&lt;br /&gt;
A sitemap should focus on content that delivers value to visitors.&lt;br /&gt;
&lt;br /&gt;
=== Category-Based Sitemap Strategies ===&lt;br /&gt;
&lt;br /&gt;
Large knowledgebases can benefit from dividing content into logical sitemap groups.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
* Tutorials&lt;br /&gt;
* Deep Dives&lt;br /&gt;
* Reference Material&lt;br /&gt;
* API Documentation&lt;br /&gt;
&lt;br /&gt;
This approach improves management and can assist search engines in understanding site structure.&lt;br /&gt;
&lt;br /&gt;
=== Search Engine Crawl Budget ===&lt;br /&gt;
&lt;br /&gt;
Search engines allocate finite resources when crawling websites.&lt;br /&gt;
&lt;br /&gt;
Poorly configured sitemaps can waste crawl budget by presenting:&lt;br /&gt;
&lt;br /&gt;
* Duplicate content&lt;br /&gt;
* Administrative pages&lt;br /&gt;
* Low-value content&lt;br /&gt;
* Redirect pages&lt;br /&gt;
&lt;br /&gt;
Effective sitemaps help search engines focus on important material.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Including Administrative Namespaces ===&lt;br /&gt;
&lt;br /&gt;
Publishing internal administrative content can dilute sitemap quality and waste crawl resources.&lt;br /&gt;
&lt;br /&gt;
Always review namespace inclusion policies.&lt;br /&gt;
&lt;br /&gt;
=== Broken Canonical URLs ===&lt;br /&gt;
&lt;br /&gt;
Incorrect server configuration may result in:&lt;br /&gt;
&lt;br /&gt;
* Mixed protocols&lt;br /&gt;
* Internal hostnames&lt;br /&gt;
* Duplicate domains&lt;br /&gt;
&lt;br /&gt;
Search engines should only receive canonical URLs.&lt;br /&gt;
&lt;br /&gt;
=== Stale Sitemaps ===&lt;br /&gt;
&lt;br /&gt;
A sitemap is only useful if it reflects current site content.&lt;br /&gt;
&lt;br /&gt;
Regular validation should form part of routine maintenance procedures.&lt;br /&gt;
&lt;br /&gt;
=== Oversized Sitemap Files ===&lt;br /&gt;
&lt;br /&gt;
Very large knowledgebases may exceed practical sitemap limits.&lt;br /&gt;
&lt;br /&gt;
When this occurs, sitemap indexes and segmented sitemap structures should be adopted.&lt;br /&gt;
&lt;br /&gt;
== Recommended Approach ==&lt;br /&gt;
&lt;br /&gt;
=== SEO Knowledgebase Reference Architecture ===&lt;br /&gt;
&lt;br /&gt;
For most MediaWiki-based technical knowledgebases, the following approach provides an effective balance:&lt;br /&gt;
&lt;br /&gt;
* Use AutoSitemap for smaller installations&lt;br /&gt;
* Exclude administrative namespaces&lt;br /&gt;
* Publish sitemap location in robots.txt&lt;br /&gt;
* Submit the sitemap to major search engines&lt;br /&gt;
* Monitor indexing through search engine webmaster tools&lt;br /&gt;
* Migrate to scheduled generation as content volume grows&lt;br /&gt;
&lt;br /&gt;
This provides a straightforward upgrade path without introducing unnecessary complexity early in the project&#039;s lifecycle.&lt;br /&gt;
&lt;br /&gt;
== Decision Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Knowledgebase Size&lt;br /&gt;
! Recommended Approach&lt;br /&gt;
|-&lt;br /&gt;
| Under 10,000 Pages&lt;br /&gt;
| AutoSitemap&lt;br /&gt;
|-&lt;br /&gt;
| 10,000-50,000 Pages&lt;br /&gt;
| AutoSitemap with rate limiting&lt;br /&gt;
|-&lt;br /&gt;
| Over 50,000 Pages&lt;br /&gt;
| generateSitemap.php&lt;br /&gt;
|-&lt;br /&gt;
| Enterprise Deployments&lt;br /&gt;
| Scheduled sitemap indexes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Key Takeaways ==&lt;br /&gt;
&lt;br /&gt;
* Sitemaps improve content discovery but do not replace good navigation.&lt;br /&gt;
* Smaller MediaWiki installations benefit from automatic sitemap generation.&lt;br /&gt;
* Larger installations should favour scheduled generation.&lt;br /&gt;
* Administrative content should generally be excluded.&lt;br /&gt;
* Sitemap strategy should evolve alongside the growth of the Knowledgebase.&lt;br /&gt;
* A well-maintained sitemap is an important component of technical SEO.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[robots.txt]]&lt;br /&gt;
* [[MediaWiki SEO]]&lt;br /&gt;
* [[Structured Data]]&lt;br /&gt;
* [[Search Engine Crawling]]&lt;br /&gt;
* [[Search Engine Indexing]]&lt;br /&gt;
* [[Technical SEO]]&lt;br /&gt;
* [[Category Design]]&lt;br /&gt;
* [[Information Architecture]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* MediaWiki Manual: Sitemap&lt;br /&gt;
* MediaWiki Extension: AutoSitemap&lt;br /&gt;
* Sitemap Protocol Specification&lt;br /&gt;
* Google Search Central Documentation&lt;br /&gt;
* Bing Webmaster Guidelines&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Sitemap_Generation_in_MediaWiki&amp;diff=460</id>
		<title>Sitemap Generation in MediaWiki</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Sitemap_Generation_in_MediaWiki&amp;diff=460"/>
		<updated>2026-07-13T10:33:09Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Sitemaps help search engines discover, understand, and prioritise content within a website. MediaWiki provides several methods for generating XML sitemaps, ranging from automatic generation during page edits to scheduled generation for large-scale installations. This article examines the available options, their advantages and disadvantages, and provides guidance on selecting an appropriate sitemap strategy for a MediaWiki-based Knowledgebase.  == Context...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Sitemaps help search engines discover, understand, and prioritise content within a website. MediaWiki provides several methods for generating XML sitemaps, ranging from automatic generation during page edits to scheduled generation for large-scale installations. This article examines the available options, their advantages and disadvantages, and provides guidance on selecting an appropriate sitemap strategy for a MediaWiki-based Knowledgebase.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
=== What is a Sitemap? ===&lt;br /&gt;
&lt;br /&gt;
A sitemap is a structured XML document that provides search engines with a list of URLs available within a website.&lt;br /&gt;
&lt;br /&gt;
The sitemap protocol allows website owners to communicate page locations, modification dates, update frequency, and relative importance. While search engines can discover content by following links, a sitemap provides a direct inventory of available content and can improve crawl efficiency.&lt;br /&gt;
&lt;br /&gt;
=== Why Search Engines Use Sitemaps ===&lt;br /&gt;
&lt;br /&gt;
Search engines continuously crawl the Internet looking for new and updated content.&lt;br /&gt;
&lt;br /&gt;
Although modern search engines are highly effective at discovering content through hyperlinks, a sitemap offers several advantages:&lt;br /&gt;
&lt;br /&gt;
* Faster discovery of newly published articles&lt;br /&gt;
* Faster identification of updated content&lt;br /&gt;
* Improved visibility of deeply nested pages&lt;br /&gt;
* Better crawl coverage for large websites&lt;br /&gt;
* Reduced reliance on link discovery alone&lt;br /&gt;
&lt;br /&gt;
Sitemaps do not guarantee indexing, but they increase the likelihood that content will be discovered promptly.&lt;br /&gt;
&lt;br /&gt;
=== Why Knowledgebases Benefit from Sitemaps ===&lt;br /&gt;
&lt;br /&gt;
Knowledgebases often contain large volumes of technical content organised into categories, namespaces and hierarchies.&lt;br /&gt;
&lt;br /&gt;
Without a sitemap, search engines may take significantly longer to discover articles that are newly created, infrequently linked, or buried deep within the site&#039;s navigation structure.&lt;br /&gt;
&lt;br /&gt;
A regularly maintained sitemap helps ensure that:&lt;br /&gt;
&lt;br /&gt;
* New articles are discovered quickly&lt;br /&gt;
* Updated articles are re-crawled efficiently&lt;br /&gt;
* Search engine coverage remains comprehensive&lt;br /&gt;
* Organic search traffic can grow more consistently&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
&lt;br /&gt;
=== The sitemap.xml Standard ===&lt;br /&gt;
&lt;br /&gt;
The standard sitemap format is an XML document containing one or more URL entries.&lt;br /&gt;
&lt;br /&gt;
A typical entry may include:&lt;br /&gt;
&lt;br /&gt;
* URL location&lt;br /&gt;
* Last modification date&lt;br /&gt;
* Suggested update frequency&lt;br /&gt;
* Relative priority&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;url&amp;gt;&lt;br /&gt;
    &amp;lt;loc&amp;gt;https://kb.example.com/wiki/OSI_Model&amp;lt;/loc&amp;gt;&lt;br /&gt;
    &amp;lt;lastmod&amp;gt;2026-07-13&amp;lt;/lastmod&amp;gt;&lt;br /&gt;
    &amp;lt;changefreq&amp;gt;weekly&amp;lt;/changefreq&amp;gt;&lt;br /&gt;
    &amp;lt;priority&amp;gt;0.8&amp;lt;/priority&amp;gt;&lt;br /&gt;
&amp;lt;/url&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== URL Discovery vs XML Discovery ===&lt;br /&gt;
&lt;br /&gt;
Search engines discover pages through two primary mechanisms:&lt;br /&gt;
&lt;br /&gt;
* Link crawling&lt;br /&gt;
* XML sitemap submission&lt;br /&gt;
&lt;br /&gt;
Link crawling remains the primary discovery mechanism.&lt;br /&gt;
&lt;br /&gt;
Sitemaps should be viewed as a supplementary discovery aid rather than a replacement for good site navigation.&lt;br /&gt;
&lt;br /&gt;
Well-designed internal linking remains essential.&lt;br /&gt;
&lt;br /&gt;
=== robots.txt Integration ===&lt;br /&gt;
&lt;br /&gt;
Search engines should be informed of a sitemap&#039;s location through the site&#039;s robots.txt file.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
&lt;br /&gt;
Allow: /&lt;br /&gt;
&lt;br /&gt;
Sitemap: https://kb.example.com/sitemap.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows supporting search engines to locate the sitemap immediately during crawl operations.&lt;br /&gt;
&lt;br /&gt;
== Sitemap Generation Options in MediaWiki ==&lt;br /&gt;
&lt;br /&gt;
MediaWiki supports multiple approaches to sitemap generation.&lt;br /&gt;
&lt;br /&gt;
Each approach has advantages depending on the size and update frequency of the wiki.&lt;br /&gt;
&lt;br /&gt;
=== Option 1: AutoSitemap Extension ===&lt;br /&gt;
&lt;br /&gt;
The AutoSitemap extension automatically rebuilds the sitemap whenever page content changes.&lt;br /&gt;
&lt;br /&gt;
Events typically triggering regeneration include:&lt;br /&gt;
&lt;br /&gt;
* Article creation&lt;br /&gt;
* Article modification&lt;br /&gt;
* Article deletion&lt;br /&gt;
* Page moves&lt;br /&gt;
* File uploads&lt;br /&gt;
* Page restoration&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Automatic operation&lt;br /&gt;
* No scheduler required&lt;br /&gt;
* Near real-time updates&lt;br /&gt;
* Simple installation&lt;br /&gt;
* Minimal administration&lt;br /&gt;
&lt;br /&gt;
==== Disadvantages ====&lt;br /&gt;
&lt;br /&gt;
* Rebuilds occur frequently&lt;br /&gt;
* Resource usage increases with site size&lt;br /&gt;
* May become inefficient for large installations&lt;br /&gt;
&lt;br /&gt;
==== Suitable Use Cases ====&lt;br /&gt;
&lt;br /&gt;
* Small knowledgebases&lt;br /&gt;
* Documentation portals&lt;br /&gt;
* Internal wikis&lt;br /&gt;
* Sites with fewer than approximately 10,000 pages&lt;br /&gt;
&lt;br /&gt;
=== Option 2: generateSitemap.php ===&lt;br /&gt;
&lt;br /&gt;
MediaWiki includes maintenance scripts capable of generating sitemap files on demand.&lt;br /&gt;
&lt;br /&gt;
Rather than regenerating whenever content changes, administrators execute the script through:&lt;br /&gt;
&lt;br /&gt;
* Scheduled tasks&lt;br /&gt;
* Cron jobs&lt;br /&gt;
* Automation platforms&lt;br /&gt;
* Orchestration systems&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Highly scalable&lt;br /&gt;
* Predictable resource usage&lt;br /&gt;
* Supports very large wikis&lt;br /&gt;
* Suitable for enterprise deployments&lt;br /&gt;
&lt;br /&gt;
==== Disadvantages ====&lt;br /&gt;
&lt;br /&gt;
* Requires task scheduling&lt;br /&gt;
* Changes are not reflected immediately&lt;br /&gt;
* Additional administration effort&lt;br /&gt;
&lt;br /&gt;
==== Suitable Use Cases ====&lt;br /&gt;
&lt;br /&gt;
* Large public knowledgebases&lt;br /&gt;
* Documentation platforms&lt;br /&gt;
* Enterprise MediaWiki deployments&lt;br /&gt;
* Sites exceeding tens of thousands of pages&lt;br /&gt;
&lt;br /&gt;
=== Option 3: MediaWiki Sitemap REST API ===&lt;br /&gt;
&lt;br /&gt;
Recent MediaWiki releases include sitemap generation through a REST API endpoint.&lt;br /&gt;
&lt;br /&gt;
Rather than storing a static sitemap file, MediaWiki can generate sitemap content dynamically when requested.&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Built into modern MediaWiki releases&lt;br /&gt;
* No external extension required&lt;br /&gt;
* Centralised platform support&lt;br /&gt;
&lt;br /&gt;
==== Disadvantages ====&lt;br /&gt;
&lt;br /&gt;
* Dynamic generation may increase server load&lt;br /&gt;
* Requires appropriate configuration&lt;br /&gt;
* May attract frequent crawler requests&lt;br /&gt;
&lt;br /&gt;
==== Suitable Use Cases ====&lt;br /&gt;
&lt;br /&gt;
* Modern MediaWiki environments&lt;br /&gt;
* API-centric deployments&lt;br /&gt;
* Administrators wishing to minimise third-party extensions&lt;br /&gt;
&lt;br /&gt;
== Practical Application ==&lt;br /&gt;
&lt;br /&gt;
=== Small Knowledgebases (Under 10,000 Articles) ===&lt;br /&gt;
&lt;br /&gt;
For smaller installations, automatic generation is often the simplest and most effective option.&lt;br /&gt;
&lt;br /&gt;
The administrative overhead is minimal and sitemap updates occur immediately after content changes.&lt;br /&gt;
&lt;br /&gt;
In practice, many smaller knowledgebases benefit from the simplicity of this approach.&lt;br /&gt;
&lt;br /&gt;
=== Medium Knowledgebases ===&lt;br /&gt;
&lt;br /&gt;
As article counts increase, regeneration costs become more noticeable.&lt;br /&gt;
&lt;br /&gt;
At this stage, administrators should consider:&lt;br /&gt;
&lt;br /&gt;
* Regeneration rate limiting&lt;br /&gt;
* Namespace exclusions&lt;br /&gt;
* Reduced generation frequency&lt;br /&gt;
&lt;br /&gt;
This balances freshness against system performance.&lt;br /&gt;
&lt;br /&gt;
=== Large Knowledgebases ===&lt;br /&gt;
&lt;br /&gt;
Large installations should generally avoid rebuilding entire sitemaps on every page modification.&lt;br /&gt;
&lt;br /&gt;
Scheduled generation is typically preferred because it:&lt;br /&gt;
&lt;br /&gt;
* Reduces server load&lt;br /&gt;
* Improves predictability&lt;br /&gt;
* Scales more effectively&lt;br /&gt;
* Supports sitemap indexes&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Regeneration on Every Edit ===&lt;br /&gt;
&lt;br /&gt;
Automatic regeneration provides the freshest sitemap possible.&lt;br /&gt;
&lt;br /&gt;
However, this convenience comes at the cost of increased server activity.&lt;br /&gt;
&lt;br /&gt;
As content volume increases, the administrative simplicity may no longer justify the resource consumption.&lt;br /&gt;
&lt;br /&gt;
=== Scheduled Generation ===&lt;br /&gt;
&lt;br /&gt;
Scheduled generation introduces a small delay between content publication and sitemap updates.&lt;br /&gt;
&lt;br /&gt;
For most knowledgebases, this delay is insignificant.&lt;br /&gt;
&lt;br /&gt;
Search engines typically do not require second-by-second awareness of content updates.&lt;br /&gt;
&lt;br /&gt;
=== Namespace Filtering ===&lt;br /&gt;
&lt;br /&gt;
Not every namespace should appear within a public sitemap.&lt;br /&gt;
&lt;br /&gt;
Common exclusions include:&lt;br /&gt;
&lt;br /&gt;
* User pages&lt;br /&gt;
* Talk pages&lt;br /&gt;
* Template pages&lt;br /&gt;
* MediaWiki system pages&lt;br /&gt;
* Administrative content&lt;br /&gt;
&lt;br /&gt;
A sitemap should focus on content that delivers value to visitors.&lt;br /&gt;
&lt;br /&gt;
=== Category-Based Sitemap Strategies ===&lt;br /&gt;
&lt;br /&gt;
Large knowledgebases can benefit from dividing content into logical sitemap groups.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Guides&lt;br /&gt;
* Tutorials&lt;br /&gt;
* Deep Dives&lt;br /&gt;
* Reference Material&lt;br /&gt;
* API Documentation&lt;br /&gt;
&lt;br /&gt;
This approach improves management and can assist search engines in understanding site structure.&lt;br /&gt;
&lt;br /&gt;
=== Search Engine Crawl Budget ===&lt;br /&gt;
&lt;br /&gt;
Search engines allocate finite resources when crawling websites.&lt;br /&gt;
&lt;br /&gt;
Poorly configured sitemaps can waste crawl budget by presenting:&lt;br /&gt;
&lt;br /&gt;
* Duplicate content&lt;br /&gt;
* Administrative pages&lt;br /&gt;
* Low-value content&lt;br /&gt;
* Redirect pages&lt;br /&gt;
&lt;br /&gt;
Effective sitemaps help search engines focus on important material.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Including Administrative Namespaces ===&lt;br /&gt;
&lt;br /&gt;
Publishing internal administrative content can dilute sitemap quality and waste crawl resources.&lt;br /&gt;
&lt;br /&gt;
Always review namespace inclusion policies.&lt;br /&gt;
&lt;br /&gt;
=== Broken Canonical URLs ===&lt;br /&gt;
&lt;br /&gt;
Incorrect server configuration may result in:&lt;br /&gt;
&lt;br /&gt;
* Mixed protocols&lt;br /&gt;
* Internal hostnames&lt;br /&gt;
* Duplicate domains&lt;br /&gt;
&lt;br /&gt;
Search engines should only receive canonical URLs.&lt;br /&gt;
&lt;br /&gt;
=== Stale Sitemaps ===&lt;br /&gt;
&lt;br /&gt;
A sitemap is only useful if it reflects current site content.&lt;br /&gt;
&lt;br /&gt;
Regular validation should form part of routine maintenance procedures.&lt;br /&gt;
&lt;br /&gt;
=== Oversized Sitemap Files ===&lt;br /&gt;
&lt;br /&gt;
Very large knowledgebases may exceed practical sitemap limits.&lt;br /&gt;
&lt;br /&gt;
When this occurs, sitemap indexes and segmented sitemap structures should be adopted.&lt;br /&gt;
&lt;br /&gt;
== Recommended Approach ==&lt;br /&gt;
&lt;br /&gt;
=== SEO Knowledgebase Reference Architecture ===&lt;br /&gt;
&lt;br /&gt;
For most MediaWiki-based technical knowledgebases, the following approach provides an effective balance:&lt;br /&gt;
&lt;br /&gt;
* Use AutoSitemap for smaller installations&lt;br /&gt;
* Exclude administrative namespaces&lt;br /&gt;
* Publish sitemap location in robots.txt&lt;br /&gt;
* Submit the sitemap to major search engines&lt;br /&gt;
* Monitor indexing through search engine webmaster tools&lt;br /&gt;
* Migrate to scheduled generation as content volume grows&lt;br /&gt;
&lt;br /&gt;
This provides a straightforward upgrade path without introducing unnecessary complexity early in the project&#039;s lifecycle.&lt;br /&gt;
&lt;br /&gt;
== Decision Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Knowledgebase Size&lt;br /&gt;
! Recommended Approach&lt;br /&gt;
|-&lt;br /&gt;
| Under 10,000 Pages&lt;br /&gt;
| AutoSitemap&lt;br /&gt;
|-&lt;br /&gt;
| 10,000-50,000 Pages&lt;br /&gt;
| AutoSitemap with rate limiting&lt;br /&gt;
|-&lt;br /&gt;
| Over 50,000 Pages&lt;br /&gt;
| generateSitemap.php&lt;br /&gt;
|-&lt;br /&gt;
| Enterprise Deployments&lt;br /&gt;
| Scheduled sitemap indexes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Key Takeaways ==&lt;br /&gt;
&lt;br /&gt;
* Sitemaps improve content discovery but do not replace good navigation.&lt;br /&gt;
* Smaller MediaWiki installations benefit from automatic sitemap generation.&lt;br /&gt;
* Larger installations should favour scheduled generation.&lt;br /&gt;
* Administrative content should generally be excluded.&lt;br /&gt;
* Sitemap strategy should evolve alongside the growth of the Knowledgebase.&lt;br /&gt;
* A well-maintained sitemap is an important component of technical SEO.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[robots.txt]]&lt;br /&gt;
* [[MediaWiki SEO]]&lt;br /&gt;
* [[Structured Data]]&lt;br /&gt;
* [[Search Engine Crawling]]&lt;br /&gt;
* [[Search Engine Indexing]]&lt;br /&gt;
* [[Technical SEO]]&lt;br /&gt;
* [[Category Design]]&lt;br /&gt;
* [[Information Architecture]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* MediaWiki Manual: Sitemap&lt;br /&gt;
* MediaWiki Extension: AutoSitemap&lt;br /&gt;
* Sitemap Protocol Specification&lt;br /&gt;
* Google Search Central Documentation&lt;br /&gt;
* Bing Webmaster Guidelines&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Choosing_Technology_Based_on_Team_Structure_Rather_Than_Features&amp;diff=459</id>
		<title>Choosing Technology Based on Team Structure Rather Than Features</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Choosing_Technology_Based_on_Team_Structure_Rather_Than_Features&amp;diff=459"/>
		<updated>2026-07-13T08:48:43Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Technology selection is often presented as a comparison of features, performance metrics, and technical capabilities. Whilst these characteristics are important, they rarely determine long-term success on their own. The teams responsible for building, operating, supporting, and maintaining a solution frequently have a greater influence on project outcomes than the technology itself. This article explores why successful organisations often choose technologi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Technology selection is often presented as a comparison of features, performance metrics, and technical capabilities. Whilst these characteristics are important, they rarely determine long-term success on their own. The teams responsible for building, operating, supporting, and maintaining a solution frequently have a greater influence on project outcomes than the technology itself. This article explores why successful organisations often choose technologies that align with their people, processes, and organisational structure rather than simply selecting the product with the longest feature list.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Technology comparison articles frequently focus on:&lt;br /&gt;
&lt;br /&gt;
* Features&lt;br /&gt;
* Benchmark results&lt;br /&gt;
* Memory consumption&lt;br /&gt;
* Performance statistics&lt;br /&gt;
* Scalability limits&lt;br /&gt;
&lt;br /&gt;
These comparisons are useful, but they often ignore an important reality.&lt;br /&gt;
&lt;br /&gt;
Technology does not operate itself.&lt;br /&gt;
&lt;br /&gt;
Every system requires people to:&lt;br /&gt;
&lt;br /&gt;
* Design it&lt;br /&gt;
* Build it&lt;br /&gt;
* Deploy it&lt;br /&gt;
* Support it&lt;br /&gt;
* Maintain it&lt;br /&gt;
* Improve it&lt;br /&gt;
&lt;br /&gt;
A technically excellent solution can fail when the organisation lacks the skills or resources needed to sustain it.&lt;br /&gt;
&lt;br /&gt;
Conversely, a less sophisticated solution can prove highly successful when it aligns well with the capabilities of the team responsible for it.&lt;br /&gt;
&lt;br /&gt;
Technology selection should therefore be viewed as an organisational decision as much as a technical one.&lt;br /&gt;
&lt;br /&gt;
== The Technology Selection Trap ==&lt;br /&gt;
&lt;br /&gt;
Many organisations begin technology evaluations by comparing specifications.&lt;br /&gt;
&lt;br /&gt;
A typical comparison might focus on:&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
* Feature sets&lt;br /&gt;
* Language design&lt;br /&gt;
* Framework capabilities&lt;br /&gt;
* Development speed&lt;br /&gt;
&lt;br /&gt;
Whilst these characteristics matter, they represent only part of the equation.&lt;br /&gt;
&lt;br /&gt;
Two technologies may provide similar functionality while having dramatically different organisational implications.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Technology A&lt;br /&gt;
&lt;br /&gt;
Excellent Features&lt;br /&gt;
&lt;br /&gt;
Poor Organisational Fit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
may produce worse outcomes than:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Technology B&lt;br /&gt;
&lt;br /&gt;
Good Features&lt;br /&gt;
&lt;br /&gt;
Excellent Organisational Fit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A feature comparison alone rarely reveals the full picture.&lt;br /&gt;
&lt;br /&gt;
== Technology Does Not Operate Itself ==&lt;br /&gt;
&lt;br /&gt;
Architecture diagrams often focus on technical components.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
        ↓&lt;br /&gt;
API&lt;br /&gt;
        ↓&lt;br /&gt;
Database&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whilst technically accurate, such diagrams omit the most important component.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
People&lt;br /&gt;
        ↓&lt;br /&gt;
Application&lt;br /&gt;
        ↓&lt;br /&gt;
API&lt;br /&gt;
        ↓&lt;br /&gt;
Database&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Every technology decision ultimately affects the people responsible for operating the system.&lt;br /&gt;
&lt;br /&gt;
Questions worth asking include:&lt;br /&gt;
&lt;br /&gt;
* Can the team support it?&lt;br /&gt;
* Can new staff learn it?&lt;br /&gt;
* Can the organisation recruit for it?&lt;br /&gt;
* Can it be maintained sustainably?&lt;br /&gt;
&lt;br /&gt;
Ignoring these questions creates risk.&lt;br /&gt;
&lt;br /&gt;
== Understanding Team Structure ==&lt;br /&gt;
&lt;br /&gt;
Different team structures naturally favour different technologies.&lt;br /&gt;
&lt;br /&gt;
=== Small Teams ===&lt;br /&gt;
&lt;br /&gt;
Smaller teams often benefit from:&lt;br /&gt;
&lt;br /&gt;
* Simplicity&lt;br /&gt;
* Productivity&lt;br /&gt;
* Reduced operational overhead&lt;br /&gt;
* Broad skill coverage&lt;br /&gt;
&lt;br /&gt;
Technology choices may prioritise efficiency over specialisation.&lt;br /&gt;
&lt;br /&gt;
A small team may struggle to support highly fragmented architectures requiring numerous specialists.&lt;br /&gt;
&lt;br /&gt;
=== Large Teams ===&lt;br /&gt;
&lt;br /&gt;
Larger organisations can often support:&lt;br /&gt;
&lt;br /&gt;
* Specialist roles&lt;br /&gt;
* Dedicated platform teams&lt;br /&gt;
* Formal governance processes&lt;br /&gt;
* Extensive documentation&lt;br /&gt;
&lt;br /&gt;
This can make more complex architectures practical.&lt;br /&gt;
&lt;br /&gt;
=== Specialist Teams ===&lt;br /&gt;
&lt;br /&gt;
Some organisations maintain dedicated expertise.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Android teams&lt;br /&gt;
* iOS teams&lt;br /&gt;
* Security teams&lt;br /&gt;
* Database teams&lt;br /&gt;
* Platform teams&lt;br /&gt;
&lt;br /&gt;
Technology choices may intentionally leverage these specialisations.&lt;br /&gt;
&lt;br /&gt;
=== Generalist Teams ===&lt;br /&gt;
&lt;br /&gt;
Other organisations prefer broad technical capabilities.&lt;br /&gt;
&lt;br /&gt;
In such environments, technologies that reduce specialisation requirements may provide significant benefits.&lt;br /&gt;
&lt;br /&gt;
== Skills as an Architectural Constraint ==&lt;br /&gt;
&lt;br /&gt;
Architecture is often discussed in terms of technical limitations.&lt;br /&gt;
&lt;br /&gt;
However, skills are also constraints.&lt;br /&gt;
&lt;br /&gt;
Consider the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Organisation&lt;br /&gt;
&lt;br /&gt;
20 Experienced C# Developers&lt;br /&gt;
&lt;br /&gt;
0 Flutter Developers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A technically sound decision may involve:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.NET MAUI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rather than Flutter.&lt;br /&gt;
&lt;br /&gt;
This does not necessarily imply one technology is superior.&lt;br /&gt;
&lt;br /&gt;
It simply recognises the skills already present within the organisation.&lt;br /&gt;
&lt;br /&gt;
Similarly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Organisation&lt;br /&gt;
&lt;br /&gt;
Large React Development Team&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
may naturally gravitate towards:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
React Native&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
because existing knowledge can be reused.&lt;br /&gt;
&lt;br /&gt;
Architects should understand that people are often the most valuable asset in a technology stack.&lt;br /&gt;
&lt;br /&gt;
== Organisational Costs of Technology Choices ==&lt;br /&gt;
&lt;br /&gt;
Technology decisions create costs beyond licensing and infrastructure.&lt;br /&gt;
&lt;br /&gt;
=== Training Costs ===&lt;br /&gt;
&lt;br /&gt;
Every new technology requires learning.&lt;br /&gt;
&lt;br /&gt;
Training may involve:&lt;br /&gt;
&lt;br /&gt;
* Formal courses&lt;br /&gt;
* Self-study&lt;br /&gt;
* Mentoring&lt;br /&gt;
* Experimentation&lt;br /&gt;
* Certification&lt;br /&gt;
&lt;br /&gt;
Learning consumes both time and resources.&lt;br /&gt;
&lt;br /&gt;
=== Recruitment Costs ===&lt;br /&gt;
&lt;br /&gt;
Technology choices influence future hiring requirements.&lt;br /&gt;
&lt;br /&gt;
Questions worth considering include:&lt;br /&gt;
&lt;br /&gt;
* Are skilled candidates readily available?&lt;br /&gt;
* Is the technology widely understood?&lt;br /&gt;
* Are recruitment pipelines established?&lt;br /&gt;
&lt;br /&gt;
The answer can significantly affect project sustainability.&lt;br /&gt;
&lt;br /&gt;
=== Knowledge Transfer Costs ===&lt;br /&gt;
&lt;br /&gt;
Knowledge concentrated within a small number of individuals creates risk.&lt;br /&gt;
&lt;br /&gt;
Documentation can assist, but practical experience remains valuable.&lt;br /&gt;
&lt;br /&gt;
=== Support Costs ===&lt;br /&gt;
&lt;br /&gt;
Operational teams require sufficient expertise to:&lt;br /&gt;
&lt;br /&gt;
* Troubleshoot issues&lt;br /&gt;
* Apply updates&lt;br /&gt;
* Diagnose failures&lt;br /&gt;
* Perform maintenance&lt;br /&gt;
&lt;br /&gt;
Technology choices influence all of these activities.&lt;br /&gt;
&lt;br /&gt;
== The Bus Factor ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;Bus Factor&#039;&#039; describes the risk associated with concentrating knowledge within a small number of individuals.&lt;br /&gt;
&lt;br /&gt;
A simple question illustrates the concept:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;What happens if a key team member becomes unavailable?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
One Expert Developer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
creates significantly more risk than:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ten Competent Developers&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
even if the expert possesses greater technical knowledge.&lt;br /&gt;
&lt;br /&gt;
Architectural decisions should consider continuity.&lt;br /&gt;
&lt;br /&gt;
Technology that depends upon a small number of specialists may introduce organisational fragility.&lt;br /&gt;
&lt;br /&gt;
== Conway&#039;s Law and Organisational Alignment ==&lt;br /&gt;
&lt;br /&gt;
Conway&#039;s Law suggests that systems often reflect the communication structures of the organisations that create them.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Android Team&lt;br /&gt;
&lt;br /&gt;
iOS Team&lt;br /&gt;
&lt;br /&gt;
Backend Team&lt;br /&gt;
&lt;br /&gt;
Security Team&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
may naturally produce:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Distinct System Components&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
because responsibilities are divided organisationally.&lt;br /&gt;
&lt;br /&gt;
Conversely:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Cross-Functional Product Team&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
may produce:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
More Integrated Solutions&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
because communication paths differ.&lt;br /&gt;
&lt;br /&gt;
Technology choices often succeed when they align with existing organisational structures.&lt;br /&gt;
&lt;br /&gt;
== Technology Lifecycles and Team Stability ==&lt;br /&gt;
&lt;br /&gt;
Technology evolves continuously.&lt;br /&gt;
&lt;br /&gt;
Teams evolve continuously.&lt;br /&gt;
&lt;br /&gt;
Successful technology selection considers both.&lt;br /&gt;
&lt;br /&gt;
Questions worth asking include:&lt;br /&gt;
&lt;br /&gt;
* Can the team maintain this technology for five years?&lt;br /&gt;
* What happens if key staff leave?&lt;br /&gt;
* How difficult is onboarding?&lt;br /&gt;
* Is the technology likely to remain relevant?&lt;br /&gt;
&lt;br /&gt;
Long-term sustainability frequently matters more than short-term excitement.&lt;br /&gt;
&lt;br /&gt;
== Example Scenarios ==&lt;br /&gt;
&lt;br /&gt;
=== Scenario 1: Microsoft-Centric Organisation ===&lt;br /&gt;
&lt;br /&gt;
An organisation employs:&lt;br /&gt;
&lt;br /&gt;
* C# developers&lt;br /&gt;
* Azure administrators&lt;br /&gt;
* Microsoft specialists&lt;br /&gt;
&lt;br /&gt;
A decision to use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.NET MAUI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
may provide strong alignment with existing capabilities.&lt;br /&gt;
&lt;br /&gt;
=== Scenario 2: Web-Focused Organisation ===&lt;br /&gt;
&lt;br /&gt;
An organisation already operates:&lt;br /&gt;
&lt;br /&gt;
* React-based websites&lt;br /&gt;
* JavaScript-heavy platforms&lt;br /&gt;
* Front-end development teams&lt;br /&gt;
&lt;br /&gt;
A decision to use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
React Native&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
may reduce training and onboarding costs.&lt;br /&gt;
&lt;br /&gt;
=== Scenario 3: Android-Focused Development Team ===&lt;br /&gt;
&lt;br /&gt;
An organisation possesses extensive Kotlin expertise.&lt;br /&gt;
&lt;br /&gt;
The application requires:&lt;br /&gt;
&lt;br /&gt;
* Native user experiences&lt;br /&gt;
* Significant shared business logic&lt;br /&gt;
&lt;br /&gt;
A decision to adopt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Kotlin Multiplatform&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
may represent a natural evolution.&lt;br /&gt;
&lt;br /&gt;
These examples demonstrate that technology selection often depends upon organisational context as much as technical merit.&lt;br /&gt;
&lt;br /&gt;
== Common Misconceptions ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;The Best Technology Always Wins&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Not necessarily.&lt;br /&gt;
&lt;br /&gt;
A good technology with strong organisational support often outperforms a superior technology with weak organisational support.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Developers Can Learn Anything&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Whilst true in principle, learning requires:&lt;br /&gt;
&lt;br /&gt;
* Time&lt;br /&gt;
* Budget&lt;br /&gt;
* Mentoring&lt;br /&gt;
* Patience&lt;br /&gt;
&lt;br /&gt;
These costs should not be ignored.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Future Hiring Can Be Solved Later&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Technology decisions can influence recruitment for many years.&lt;br /&gt;
&lt;br /&gt;
Architects should consider long-term consequences rather than immediate requirements alone.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Features Are All That Matter&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Features are important.&lt;br /&gt;
&lt;br /&gt;
However, successful organisations also value:&lt;br /&gt;
&lt;br /&gt;
* Maintainability&lt;br /&gt;
* Supportability&lt;br /&gt;
* Stability&lt;br /&gt;
* Team productivity&lt;br /&gt;
&lt;br /&gt;
== Practical Guidance ==&lt;br /&gt;
&lt;br /&gt;
When evaluating technology choices:&lt;br /&gt;
&lt;br /&gt;
* Assess existing skills first&lt;br /&gt;
* Consider support and maintenance requirements&lt;br /&gt;
* Understand recruitment implications&lt;br /&gt;
* Evaluate team structure honestly&lt;br /&gt;
* Minimise unnecessary complexity&lt;br /&gt;
* Avoid selecting technology solely because it is fashionable&lt;br /&gt;
* Consider the lifecycle of the solution&lt;br /&gt;
* Plan for knowledge transfer&lt;br /&gt;
&lt;br /&gt;
Technology should support the organisation rather than force the organisation to constantly adapt to the technology.&lt;br /&gt;
&lt;br /&gt;
== A Vehicle Maintenance Analogy ==&lt;br /&gt;
&lt;br /&gt;
Consider selecting a fleet of vehicles.&lt;br /&gt;
&lt;br /&gt;
Many organisations compare:&lt;br /&gt;
&lt;br /&gt;
* Speed&lt;br /&gt;
* Payload&lt;br /&gt;
* Fuel economy&lt;br /&gt;
&lt;br /&gt;
Experienced operators also consider:&lt;br /&gt;
&lt;br /&gt;
* Availability of parts&lt;br /&gt;
* Mechanic expertise&lt;br /&gt;
* Maintenance procedures&lt;br /&gt;
* Training requirements&lt;br /&gt;
* Long-term support&lt;br /&gt;
&lt;br /&gt;
The technically best vehicle may become the wrong choice if nobody can maintain it.&lt;br /&gt;
&lt;br /&gt;
Software technologies often present the same challenge.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Technology selection is frequently presented as a purely technical exercise.&lt;br /&gt;
&lt;br /&gt;
In reality, the most important characteristics of a technology may not be performance, scalability, or features.&lt;br /&gt;
&lt;br /&gt;
They may be maintainability, supportability, knowledge availability, and alignment with the people responsible for the system.&lt;br /&gt;
&lt;br /&gt;
A technology that fits the structure, skills, and capabilities of an organisation will often deliver better outcomes than a technically superior alternative that does not.&lt;br /&gt;
&lt;br /&gt;
Good developers evaluate technology.&lt;br /&gt;
&lt;br /&gt;
Good architects evaluate the environment in which that technology must survive.&lt;br /&gt;
&lt;br /&gt;
Ultimately, successful systems are built not only around software, but around the people who create, operate, support, and maintain it.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Mobile_Application_Lifecycle_and_Deployment&amp;diff=458</id>
		<title>Mobile Application Lifecycle and Deployment</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Mobile_Application_Lifecycle_and_Deployment&amp;diff=458"/>
		<updated>2026-07-13T08:44:13Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; The development of a mobile application is only one stage in a much larger journey. Successful mobile applications progress through a complete lifecycle that includes planning, development, testing, deployment, operation, maintenance, and eventual retirement. Understanding this lifecycle helps organisations make better architectural decisions, improve reliability, reduce operational risk, and maximise the value of their software investments.  == Context ==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
The development of a mobile application is only one stage in a much larger journey. Successful mobile applications progress through a complete lifecycle that includes planning, development, testing, deployment, operation, maintenance, and eventual retirement. Understanding this lifecycle helps organisations make better architectural decisions, improve reliability, reduce operational risk, and maximise the value of their software investments.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Many discussions about mobile development focus heavily on programming languages, frameworks, and user interface design.&lt;br /&gt;
&lt;br /&gt;
Whilst these topics are important, they represent only part of the overall picture.&lt;br /&gt;
&lt;br /&gt;
A mobile application often spends a relatively short period being developed and a much longer period being:&lt;br /&gt;
&lt;br /&gt;
* Maintained&lt;br /&gt;
* Updated&lt;br /&gt;
* Supported&lt;br /&gt;
* Monitored&lt;br /&gt;
* Secured&lt;br /&gt;
* Improved&lt;br /&gt;
&lt;br /&gt;
The application delivered to users is rarely the final version.&lt;br /&gt;
&lt;br /&gt;
Instead, it becomes part of an ongoing operational process that may continue for many years.&lt;br /&gt;
&lt;br /&gt;
As a result, lifecycle management should be considered an architectural concern rather than merely an operational activity.&lt;br /&gt;
&lt;br /&gt;
== The Mobile Application Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
A simplified mobile application lifecycle can be represented as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Planning&lt;br /&gt;
    ↓&lt;br /&gt;
Development&lt;br /&gt;
    ↓&lt;br /&gt;
Testing&lt;br /&gt;
    ↓&lt;br /&gt;
Deployment&lt;br /&gt;
    ↓&lt;br /&gt;
Monitoring&lt;br /&gt;
    ↓&lt;br /&gt;
Improvement&lt;br /&gt;
    ↓&lt;br /&gt;
Retirement&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each stage contributes to the overall success of the application.&lt;br /&gt;
&lt;br /&gt;
Failure in any stage can impact user satisfaction, security, reliability, or long-term maintainability.&lt;br /&gt;
&lt;br /&gt;
=== Planning ===&lt;br /&gt;
&lt;br /&gt;
Every successful application begins with understanding a business requirement.&lt;br /&gt;
&lt;br /&gt;
Activities may include:&lt;br /&gt;
&lt;br /&gt;
* Requirements gathering&lt;br /&gt;
* User research&lt;br /&gt;
* Workflow analysis&lt;br /&gt;
* Architecture design&lt;br /&gt;
* Risk assessment&lt;br /&gt;
* Security planning&lt;br /&gt;
&lt;br /&gt;
Decisions made during planning can influence the application&#039;s entire operational lifespan.&lt;br /&gt;
&lt;br /&gt;
=== Development ===&lt;br /&gt;
&lt;br /&gt;
Development transforms requirements into a working application.&lt;br /&gt;
&lt;br /&gt;
Activities include:&lt;br /&gt;
&lt;br /&gt;
* User interface creation&lt;br /&gt;
* API integration&lt;br /&gt;
* Business logic implementation&lt;br /&gt;
* Data management&lt;br /&gt;
* Security controls&lt;br /&gt;
* Performance optimisation&lt;br /&gt;
&lt;br /&gt;
Development choices influence future maintenance and deployment complexity.&lt;br /&gt;
&lt;br /&gt;
=== Testing ===&lt;br /&gt;
&lt;br /&gt;
Testing seeks to identify issues before users encounter them.&lt;br /&gt;
&lt;br /&gt;
Common testing activities include:&lt;br /&gt;
&lt;br /&gt;
* Functional testing&lt;br /&gt;
* User acceptance testing&lt;br /&gt;
* Performance testing&lt;br /&gt;
* Accessibility testing&lt;br /&gt;
* Security testing&lt;br /&gt;
* Compatibility testing&lt;br /&gt;
&lt;br /&gt;
Testing is often less expensive than correcting problems after deployment.&lt;br /&gt;
&lt;br /&gt;
=== Deployment ===&lt;br /&gt;
&lt;br /&gt;
Deployment makes the application available to users.&lt;br /&gt;
&lt;br /&gt;
Deployment typically involves:&lt;br /&gt;
&lt;br /&gt;
* Packaging&lt;br /&gt;
* Code signing&lt;br /&gt;
* Distribution&lt;br /&gt;
* Store submission&lt;br /&gt;
* Release approval&lt;br /&gt;
&lt;br /&gt;
Deployment is a milestone rather than the end of the lifecycle.&lt;br /&gt;
&lt;br /&gt;
=== Monitoring ===&lt;br /&gt;
&lt;br /&gt;
After release, organisations need visibility into how applications behave in real-world environments.&lt;br /&gt;
&lt;br /&gt;
Monitoring helps identify:&lt;br /&gt;
&lt;br /&gt;
* Crashes&lt;br /&gt;
* Performance problems&lt;br /&gt;
* User adoption trends&lt;br /&gt;
* Security concerns&lt;br /&gt;
* Service disruptions&lt;br /&gt;
&lt;br /&gt;
Without monitoring, decisions are often based on assumptions rather than evidence.&lt;br /&gt;
&lt;br /&gt;
=== Improvement ===&lt;br /&gt;
&lt;br /&gt;
Most applications evolve continuously.&lt;br /&gt;
&lt;br /&gt;
Changes may include:&lt;br /&gt;
&lt;br /&gt;
* New features&lt;br /&gt;
* Security updates&lt;br /&gt;
* User experience improvements&lt;br /&gt;
* Performance enhancements&lt;br /&gt;
* Compliance updates&lt;br /&gt;
&lt;br /&gt;
Improvement extends the useful lifespan of the application.&lt;br /&gt;
&lt;br /&gt;
=== Retirement ===&lt;br /&gt;
&lt;br /&gt;
All applications eventually reach end-of-life.&lt;br /&gt;
&lt;br /&gt;
Reasons include:&lt;br /&gt;
&lt;br /&gt;
* Business changes&lt;br /&gt;
* Technology obsolescence&lt;br /&gt;
* Replacement systems&lt;br /&gt;
* Platform changes&lt;br /&gt;
* Compliance requirements&lt;br /&gt;
&lt;br /&gt;
Retirement should be planned rather than treated as an afterthought.&lt;br /&gt;
&lt;br /&gt;
== Building the Application ==&lt;br /&gt;
&lt;br /&gt;
Before deployment, source code must be transformed into a distributable package.&lt;br /&gt;
&lt;br /&gt;
This process generally includes:&lt;br /&gt;
&lt;br /&gt;
* Compilation&lt;br /&gt;
* Dependency resolution&lt;br /&gt;
* Asset packaging&lt;br /&gt;
* Optimisation&lt;br /&gt;
* Code signing&lt;br /&gt;
&lt;br /&gt;
The resulting package can then be deployed to users.&lt;br /&gt;
&lt;br /&gt;
=== Android Packages ===&lt;br /&gt;
&lt;br /&gt;
Android applications are commonly distributed as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
APK&lt;br /&gt;
Android Package&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AAB&lt;br /&gt;
Android App Bundle&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modern Android deployments increasingly use App Bundles because they allow Google Play to optimise download sizes for specific devices.&lt;br /&gt;
&lt;br /&gt;
=== Apple Application Packages ===&lt;br /&gt;
&lt;br /&gt;
Apple applications are typically packaged into:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IPA&lt;br /&gt;
iOS Application Archive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Before distribution, applications must be signed using certificates approved by Apple.&lt;br /&gt;
&lt;br /&gt;
== Delivery vs Deployment ==&lt;br /&gt;
&lt;br /&gt;
The terms &#039;&#039;delivery&#039;&#039; and &#039;&#039;deployment&#039;&#039; are often used interchangeably.&lt;br /&gt;
&lt;br /&gt;
However, they describe different activities.&lt;br /&gt;
&lt;br /&gt;
=== Delivery ===&lt;br /&gt;
&lt;br /&gt;
Delivery refers to producing a deployable artifact.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Source Code&lt;br /&gt;
        ↓&lt;br /&gt;
Build Process&lt;br /&gt;
        ↓&lt;br /&gt;
Application Package&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The application exists but is not yet available to users.&lt;br /&gt;
&lt;br /&gt;
=== Deployment ===&lt;br /&gt;
&lt;br /&gt;
Deployment occurs when users can obtain and use the application.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application Package&lt;br /&gt;
        ↓&lt;br /&gt;
Store Submission&lt;br /&gt;
        ↓&lt;br /&gt;
Store Approval&lt;br /&gt;
        ↓&lt;br /&gt;
User Installation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An application can be delivered without being deployed.&lt;br /&gt;
&lt;br /&gt;
Understanding this distinction becomes important when designing release processes.&lt;br /&gt;
&lt;br /&gt;
== Application Distribution ==&lt;br /&gt;
&lt;br /&gt;
Once packaged, applications must be distributed to users.&lt;br /&gt;
&lt;br /&gt;
Several distribution models exist.&lt;br /&gt;
&lt;br /&gt;
=== Public Application Stores ===&lt;br /&gt;
&lt;br /&gt;
The most common approach involves public application marketplaces.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Google Play Store&lt;br /&gt;
* Apple App Store&lt;br /&gt;
&lt;br /&gt;
These provide:&lt;br /&gt;
&lt;br /&gt;
* Global distribution&lt;br /&gt;
* Automatic updates&lt;br /&gt;
* User feedback mechanisms&lt;br /&gt;
* Security reviews&lt;br /&gt;
* Centralised management&lt;br /&gt;
&lt;br /&gt;
=== Enterprise Distribution ===&lt;br /&gt;
&lt;br /&gt;
Large organisations often deploy applications internally.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Employee applications&lt;br /&gt;
* Operational systems&lt;br /&gt;
* Secure internal tools&lt;br /&gt;
&lt;br /&gt;
Enterprise distribution may bypass public marketplaces entirely.&lt;br /&gt;
&lt;br /&gt;
=== Private Application Stores ===&lt;br /&gt;
&lt;br /&gt;
Some organisations maintain their own application catalogues.&lt;br /&gt;
&lt;br /&gt;
These allow controlled distribution whilst retaining management oversight.&lt;br /&gt;
&lt;br /&gt;
=== Testing Channels ===&lt;br /&gt;
&lt;br /&gt;
Many platforms support:&lt;br /&gt;
&lt;br /&gt;
* Beta testing&lt;br /&gt;
* Pilot deployments&lt;br /&gt;
* Internal testing groups&lt;br /&gt;
&lt;br /&gt;
These mechanisms allow issues to be identified before large-scale deployment.&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration and Continuous Delivery ==&lt;br /&gt;
&lt;br /&gt;
Modern development increasingly relies on automation.&lt;br /&gt;
&lt;br /&gt;
A typical pipeline might resemble:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Source Code&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Automated Build&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Automated Testing&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Package Creation&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Release Candidate&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Deployment&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Reduced manual effort&lt;br /&gt;
* Greater consistency&lt;br /&gt;
* Faster delivery&lt;br /&gt;
* Improved reliability&lt;br /&gt;
&lt;br /&gt;
Continuous Integration (CI) focuses on validating changes regularly.&lt;br /&gt;
&lt;br /&gt;
Continuous Delivery (CD) focuses on making releases consistently deployable.&lt;br /&gt;
&lt;br /&gt;
== Versioning and Release Management ==&lt;br /&gt;
&lt;br /&gt;
Applications evolve through multiple versions.&lt;br /&gt;
&lt;br /&gt;
A release strategy helps manage this evolution safely.&lt;br /&gt;
&lt;br /&gt;
Common activities include:&lt;br /&gt;
&lt;br /&gt;
* Version numbering&lt;br /&gt;
* Release planning&lt;br /&gt;
* Upgrade paths&lt;br /&gt;
* Rollback procedures&lt;br /&gt;
* Compatibility management&lt;br /&gt;
&lt;br /&gt;
Careful release management reduces operational risk.&lt;br /&gt;
&lt;br /&gt;
=== Major Releases ===&lt;br /&gt;
&lt;br /&gt;
Major releases often introduce:&lt;br /&gt;
&lt;br /&gt;
* New functionality&lt;br /&gt;
* Architectural changes&lt;br /&gt;
* Significant enhancements&lt;br /&gt;
&lt;br /&gt;
=== Minor Releases ===&lt;br /&gt;
&lt;br /&gt;
Minor releases typically provide:&lt;br /&gt;
&lt;br /&gt;
* Improvements&lt;br /&gt;
* Optimisations&lt;br /&gt;
* Additional features&lt;br /&gt;
&lt;br /&gt;
=== Maintenance Releases ===&lt;br /&gt;
&lt;br /&gt;
Maintenance releases primarily focus on:&lt;br /&gt;
&lt;br /&gt;
* Bug fixes&lt;br /&gt;
* Security patches&lt;br /&gt;
* Stability improvements&lt;br /&gt;
&lt;br /&gt;
== Mobile Applications as Distributed Systems ==&lt;br /&gt;
&lt;br /&gt;
Many people view mobile applications as standalone software.&lt;br /&gt;
&lt;br /&gt;
In reality, most modern applications form part of a larger ecosystem.&lt;br /&gt;
&lt;br /&gt;
A typical application might interact with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mobile Application&lt;br /&gt;
        ↓&lt;br /&gt;
Identity Provider&lt;br /&gt;
        ↓&lt;br /&gt;
API Services&lt;br /&gt;
        ↓&lt;br /&gt;
Databases&lt;br /&gt;
        ↓&lt;br /&gt;
Monitoring Systems&lt;br /&gt;
        ↓&lt;br /&gt;
Notification Services&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The mobile application is often only the visible component of a much larger system.&lt;br /&gt;
&lt;br /&gt;
Deployment therefore affects multiple interconnected services.&lt;br /&gt;
&lt;br /&gt;
== Monitoring and Telemetry ==&lt;br /&gt;
&lt;br /&gt;
Deployment creates an opportunity to collect operational intelligence.&lt;br /&gt;
&lt;br /&gt;
Common telemetry includes:&lt;br /&gt;
&lt;br /&gt;
* Crash reports&lt;br /&gt;
* Performance metrics&lt;br /&gt;
* Device information&lt;br /&gt;
* User behaviour&lt;br /&gt;
* Service availability&lt;br /&gt;
* Feature adoption&lt;br /&gt;
&lt;br /&gt;
Telemetry enables evidence-based improvements.&lt;br /&gt;
&lt;br /&gt;
Without telemetry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Opinions Drive Decisions&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With telemetry:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Evidence Drives Decisions&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Crash Reporting ===&lt;br /&gt;
&lt;br /&gt;
Understanding why applications fail is essential.&lt;br /&gt;
&lt;br /&gt;
Crash monitoring can identify:&lt;br /&gt;
&lt;br /&gt;
* Software defects&lt;br /&gt;
* Device-specific issues&lt;br /&gt;
* Operating system compatibility problems&lt;br /&gt;
&lt;br /&gt;
=== Performance Monitoring ===&lt;br /&gt;
&lt;br /&gt;
Performance monitoring helps identify:&lt;br /&gt;
&lt;br /&gt;
* Memory issues&lt;br /&gt;
* Slow operations&lt;br /&gt;
* API bottlenecks&lt;br /&gt;
* Battery consumption problems&lt;br /&gt;
&lt;br /&gt;
=== Usage Analytics ===&lt;br /&gt;
&lt;br /&gt;
Usage analytics help determine:&lt;br /&gt;
&lt;br /&gt;
* Which features are valuable&lt;br /&gt;
* Which workflows create friction&lt;br /&gt;
* How users actually interact with the application&lt;br /&gt;
&lt;br /&gt;
== Security and Compliance ==&lt;br /&gt;
&lt;br /&gt;
Security continues throughout the application lifecycle.&lt;br /&gt;
&lt;br /&gt;
Responsibilities may include:&lt;br /&gt;
&lt;br /&gt;
* Vulnerability management&lt;br /&gt;
* Dependency review&lt;br /&gt;
* Certificate management&lt;br /&gt;
* Authentication controls&lt;br /&gt;
* Data protection&lt;br /&gt;
* Regulatory compliance&lt;br /&gt;
&lt;br /&gt;
Security should be treated as a continuous process rather than a single deployment activity.&lt;br /&gt;
&lt;br /&gt;
== Common Deployment Challenges ==&lt;br /&gt;
&lt;br /&gt;
=== Store Approval Delays ===&lt;br /&gt;
&lt;br /&gt;
Application stores may require reviews before publication.&lt;br /&gt;
&lt;br /&gt;
This can affect release schedules.&lt;br /&gt;
&lt;br /&gt;
=== Platform Fragmentation ===&lt;br /&gt;
&lt;br /&gt;
Applications often operate across:&lt;br /&gt;
&lt;br /&gt;
* Different device models&lt;br /&gt;
* Different operating systems&lt;br /&gt;
* Different hardware capabilities&lt;br /&gt;
&lt;br /&gt;
Testing must consider these variations.&lt;br /&gt;
&lt;br /&gt;
=== Dependency Management ===&lt;br /&gt;
&lt;br /&gt;
Applications frequently rely on external libraries and services.&lt;br /&gt;
&lt;br /&gt;
Changes to those dependencies can introduce unforeseen challenges.&lt;br /&gt;
&lt;br /&gt;
=== Version Compatibility ===&lt;br /&gt;
&lt;br /&gt;
New releases must remain compatible with:&lt;br /&gt;
&lt;br /&gt;
* Existing users&lt;br /&gt;
* Existing services&lt;br /&gt;
* Existing data structures&lt;br /&gt;
&lt;br /&gt;
Backward compatibility can become a significant architectural consideration.&lt;br /&gt;
&lt;br /&gt;
== Application End-of-Life ==&lt;br /&gt;
&lt;br /&gt;
Software retirement is frequently overlooked during planning.&lt;br /&gt;
&lt;br /&gt;
However, applications eventually reach a point where continued investment is no longer appropriate.&lt;br /&gt;
&lt;br /&gt;
An end-of-life process may include:&lt;br /&gt;
&lt;br /&gt;
* User communication&lt;br /&gt;
* Data migration&lt;br /&gt;
* Archive creation&lt;br /&gt;
* Service decommissioning&lt;br /&gt;
* Documentation updates&lt;br /&gt;
&lt;br /&gt;
A well-managed retirement protects both users and organisations.&lt;br /&gt;
&lt;br /&gt;
== Practical Guidance ==&lt;br /&gt;
&lt;br /&gt;
When designing a mobile application lifecycle:&lt;br /&gt;
&lt;br /&gt;
* Plan beyond the initial release&lt;br /&gt;
* Automate wherever practical&lt;br /&gt;
* Monitor from day one&lt;br /&gt;
* Build security into every stage&lt;br /&gt;
* Treat deployment as the beginning of operations&lt;br /&gt;
* Design for maintenance&lt;br /&gt;
* Prepare for retirement&lt;br /&gt;
&lt;br /&gt;
Applications frequently live far longer than anticipated.&lt;br /&gt;
&lt;br /&gt;
Architectural decisions should reflect this reality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Mobile application development is often viewed as the process of writing software.&lt;br /&gt;
&lt;br /&gt;
In reality, development is merely one stage within a much larger lifecycle.&lt;br /&gt;
&lt;br /&gt;
Planning, testing, deployment, monitoring, maintenance, security, and retirement frequently consume more effort than the initial implementation itself.&lt;br /&gt;
&lt;br /&gt;
Successful organisations understand that applications are not static products delivered once and forgotten.&lt;br /&gt;
&lt;br /&gt;
They are living systems that evolve continuously throughout their operational lifespan.&lt;br /&gt;
&lt;br /&gt;
Understanding the complete lifecycle of a mobile application is therefore just as important as understanding the technologies used to build it.&lt;br /&gt;
&lt;br /&gt;
Good developers focus on creating applications.&lt;br /&gt;
&lt;br /&gt;
Good architects focus on sustaining them.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Kotlin_Multiplatform_and_the_Shared_Logic_Model&amp;diff=457</id>
		<title>Kotlin Multiplatform and the Shared Logic Model</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Kotlin_Multiplatform_and_the_Shared_Logic_Model&amp;diff=457"/>
		<updated>2026-07-13T08:40:54Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Kotlin Multiplatform (KMP) represents a distinct approach to cross-platform software development. Rather than attempting to share an application&amp;#039;s entire user experience across platforms, KMP focuses on sharing the underlying business logic whilst preserving native user interfaces. This architectural model seeks to reduce duplication where it delivers the greatest value while respecting the unique characteristics of each platform. Understanding this philos...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Kotlin Multiplatform (KMP) represents a distinct approach to cross-platform software development. Rather than attempting to share an application&#039;s entire user experience across platforms, KMP focuses on sharing the underlying business logic whilst preserving native user interfaces. This architectural model seeks to reduce duplication where it delivers the greatest value while respecting the unique characteristics of each platform. Understanding this philosophy is key to understanding why Kotlin Multiplatform differs from many other cross-platform technologies.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
As mobile applications became more sophisticated, organisations increasingly encountered a common problem.&lt;br /&gt;
&lt;br /&gt;
Applications often contained large amounts of duplicate code.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Android Application&lt;br /&gt;
&lt;br /&gt;
    User Interface&lt;br /&gt;
    Business Logic&lt;br /&gt;
    Networking&lt;br /&gt;
    Data Models&lt;br /&gt;
    Storage&lt;br /&gt;
&lt;br /&gt;
iOS Application&lt;br /&gt;
&lt;br /&gt;
    User Interface&lt;br /&gt;
    Business Logic&lt;br /&gt;
    Networking&lt;br /&gt;
    Data Models&lt;br /&gt;
    Storage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Although these applications were built for different platforms, much of their behaviour was identical.&lt;br /&gt;
&lt;br /&gt;
This duplication increased:&lt;br /&gt;
&lt;br /&gt;
* Development effort&lt;br /&gt;
* Testing effort&lt;br /&gt;
* Maintenance effort&lt;br /&gt;
* Risk of inconsistency&lt;br /&gt;
&lt;br /&gt;
Cross-platform frameworks emerged to address this challenge.&lt;br /&gt;
&lt;br /&gt;
However, not all frameworks attempted to solve the problem in the same way.&lt;br /&gt;
&lt;br /&gt;
== The Problem with Full Duplication ==&lt;br /&gt;
&lt;br /&gt;
Traditional native development provides excellent platform integration and user experience.&lt;br /&gt;
&lt;br /&gt;
However, it frequently requires the same functionality to be implemented multiple times.&lt;br /&gt;
&lt;br /&gt;
Consider a banking application.&lt;br /&gt;
&lt;br /&gt;
Both platforms may require:&lt;br /&gt;
&lt;br /&gt;
* Authentication&lt;br /&gt;
* Security controls&lt;br /&gt;
* Transaction processing&lt;br /&gt;
* API communication&lt;br /&gt;
* Validation rules&lt;br /&gt;
* Data models&lt;br /&gt;
&lt;br /&gt;
The behaviour should remain identical regardless of device.&lt;br /&gt;
&lt;br /&gt;
Maintaining separate implementations creates opportunities for:&lt;br /&gt;
&lt;br /&gt;
* Bugs&lt;br /&gt;
* Inconsistencies&lt;br /&gt;
* Delayed feature delivery&lt;br /&gt;
* Increased costs&lt;br /&gt;
&lt;br /&gt;
Architects therefore began asking:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Which parts of these applications are genuinely different?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== The Problem with Full Sharing ==&lt;br /&gt;
&lt;br /&gt;
Some cross-platform frameworks attempt to maximise code reuse by sharing:&lt;br /&gt;
&lt;br /&gt;
* User interfaces&lt;br /&gt;
* Business logic&lt;br /&gt;
* Data access&lt;br /&gt;
* Application workflows&lt;br /&gt;
&lt;br /&gt;
This approach can be highly effective.&lt;br /&gt;
&lt;br /&gt;
However, organisations sometimes discover that complete standardisation is not always desirable.&lt;br /&gt;
&lt;br /&gt;
Users often expect native experiences.&lt;br /&gt;
&lt;br /&gt;
Android users expect Android behaviour.&lt;br /&gt;
&lt;br /&gt;
Apple users expect Apple behaviour.&lt;br /&gt;
&lt;br /&gt;
The challenge therefore becomes balancing:&lt;br /&gt;
&lt;br /&gt;
* Consistency&lt;br /&gt;
* Efficiency&lt;br /&gt;
* Platform familiarity&lt;br /&gt;
&lt;br /&gt;
This is the problem Kotlin Multiplatform was designed to address.&lt;br /&gt;
&lt;br /&gt;
== The Shared Logic Philosophy ==&lt;br /&gt;
&lt;br /&gt;
Kotlin Multiplatform is based upon a simple observation:&lt;br /&gt;
&lt;br /&gt;
Not every part of an application changes at the same rate.&lt;br /&gt;
&lt;br /&gt;
Business rules often remain relatively stable.&lt;br /&gt;
&lt;br /&gt;
User interfaces often evolve continuously.&lt;br /&gt;
&lt;br /&gt;
Rather than sharing everything, Kotlin Multiplatform focuses on sharing the layers which provide the greatest long-term value.&lt;br /&gt;
&lt;br /&gt;
The philosophy can be summarised as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Share What Matters&lt;br /&gt;
&lt;br /&gt;
Keep What Is Unique&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rather than attempting to eliminate platform differences, Kotlin Multiplatform embraces them.&lt;br /&gt;
&lt;br /&gt;
== What Is Shared? ==&lt;br /&gt;
&lt;br /&gt;
Kotlin Multiplatform is typically used to share:&lt;br /&gt;
&lt;br /&gt;
* Business rules&lt;br /&gt;
* Data models&lt;br /&gt;
* API communication&lt;br /&gt;
* Networking&lt;br /&gt;
* Validation logic&lt;br /&gt;
* Authentication processes&lt;br /&gt;
* Encryption logic&lt;br /&gt;
* Application services&lt;br /&gt;
&lt;br /&gt;
These components frequently represent an application&#039;s core behaviour.&lt;br /&gt;
&lt;br /&gt;
They define how the system works rather than how it appears.&lt;br /&gt;
&lt;br /&gt;
== What Remains Native? ==&lt;br /&gt;
&lt;br /&gt;
The presentation layer usually remains platform-specific.&lt;br /&gt;
&lt;br /&gt;
This includes:&lt;br /&gt;
&lt;br /&gt;
* Navigation&lt;br /&gt;
* Layouts&lt;br /&gt;
* Menus&lt;br /&gt;
* Platform widgets&lt;br /&gt;
* Accessibility features&lt;br /&gt;
* Device-specific interactions&lt;br /&gt;
&lt;br /&gt;
As a result:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Android users receive an Android experience.&lt;br /&gt;
&lt;br /&gt;
Apple users receive an Apple experience.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whilst:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Business Behaviour&lt;br /&gt;
&lt;br /&gt;
Remains Consistent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
across both environments.&lt;br /&gt;
&lt;br /&gt;
== Architecture Overview ==&lt;br /&gt;
&lt;br /&gt;
A simplified Kotlin Multiplatform architecture might resemble:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Native Android UI&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Shared Business Logic&lt;br /&gt;
&lt;br /&gt;
Shared Networking&lt;br /&gt;
&lt;br /&gt;
Shared Data Models&lt;br /&gt;
&lt;br /&gt;
Shared Validation&lt;br /&gt;
&lt;br /&gt;
        ↑&lt;br /&gt;
&lt;br /&gt;
Native Apple UI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The native interfaces communicate with a shared application core.&lt;br /&gt;
&lt;br /&gt;
This shared core becomes the single source of truth for application behaviour.&lt;br /&gt;
&lt;br /&gt;
== Core Architectural Components ==&lt;br /&gt;
&lt;br /&gt;
=== Shared Business Logic ===&lt;br /&gt;
&lt;br /&gt;
Business logic defines how the application behaves.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Pricing calculations&lt;br /&gt;
* Eligibility checks&lt;br /&gt;
* Workflow rules&lt;br /&gt;
* Transaction processing&lt;br /&gt;
* Security policies&lt;br /&gt;
&lt;br /&gt;
Implementing these rules once helps ensure consistent behaviour across platforms.&lt;br /&gt;
&lt;br /&gt;
=== Shared Networking ===&lt;br /&gt;
&lt;br /&gt;
Most modern applications communicate with remote services.&lt;br /&gt;
&lt;br /&gt;
Sharing networking components provides:&lt;br /&gt;
&lt;br /&gt;
* Consistent API usage&lt;br /&gt;
* Reduced implementation effort&lt;br /&gt;
* Improved testing&lt;br /&gt;
* Simplified maintenance&lt;br /&gt;
&lt;br /&gt;
=== Shared Data Models ===&lt;br /&gt;
&lt;br /&gt;
Many applications use identical data structures on every platform.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Customers&lt;br /&gt;
* Orders&lt;br /&gt;
* Products&lt;br /&gt;
* Accounts&lt;br /&gt;
* Reports&lt;br /&gt;
&lt;br /&gt;
Kotlin Multiplatform allows these definitions to be shared.&lt;br /&gt;
&lt;br /&gt;
=== Shared Validation ===&lt;br /&gt;
&lt;br /&gt;
Validation is an ideal candidate for reuse.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password Rules&lt;br /&gt;
&lt;br /&gt;
Email Validation&lt;br /&gt;
&lt;br /&gt;
Account Verification&lt;br /&gt;
&lt;br /&gt;
Transaction Limits&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
should generally behave identically regardless of device.&lt;br /&gt;
&lt;br /&gt;
=== Native Presentation Layer ===&lt;br /&gt;
&lt;br /&gt;
The user interface remains native.&lt;br /&gt;
&lt;br /&gt;
This allows each platform to:&lt;br /&gt;
&lt;br /&gt;
* Follow platform conventions&lt;br /&gt;
* Support accessibility features&lt;br /&gt;
* Adopt operating system enhancements&lt;br /&gt;
* Provide familiar user experiences&lt;br /&gt;
&lt;br /&gt;
== A Physical Analogy ==&lt;br /&gt;
&lt;br /&gt;
The Shared Logic Model can be compared to a franchise operation.&lt;br /&gt;
&lt;br /&gt;
=== Shared UI Architecture ===&lt;br /&gt;
&lt;br /&gt;
Imagine a chain of restaurants where every location is identical.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Same Building&lt;br /&gt;
&lt;br /&gt;
Same Layout&lt;br /&gt;
&lt;br /&gt;
Same Decor&lt;br /&gt;
&lt;br /&gt;
Same Menu&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal is consistency everywhere.&lt;br /&gt;
&lt;br /&gt;
=== Shared Logic Architecture ===&lt;br /&gt;
&lt;br /&gt;
Now imagine a franchise model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared Recipes&lt;br /&gt;
&lt;br /&gt;
Shared Suppliers&lt;br /&gt;
&lt;br /&gt;
Shared Accounting&lt;br /&gt;
&lt;br /&gt;
Shared Food Safety Rules&lt;br /&gt;
&lt;br /&gt;
Shared Training&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Different Buildings&lt;br /&gt;
&lt;br /&gt;
Different Decorations&lt;br /&gt;
&lt;br /&gt;
Different Seating Arrangements&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Customers experience something unique to their location.&lt;br /&gt;
&lt;br /&gt;
The business still operates according to common rules.&lt;br /&gt;
&lt;br /&gt;
This closely resembles Kotlin Multiplatform&#039;s architectural philosophy.&lt;br /&gt;
&lt;br /&gt;
== Comparing Architectural Models ==&lt;br /&gt;
&lt;br /&gt;
=== Traditional Native Development ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Android&lt;br /&gt;
&lt;br /&gt;
    UI&lt;br /&gt;
    Logic&lt;br /&gt;
    Networking&lt;br /&gt;
    Data&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
    UI&lt;br /&gt;
    Logic&lt;br /&gt;
    Networking&lt;br /&gt;
    Data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Maximum control&lt;br /&gt;
* Native experience&lt;br /&gt;
* Direct platform integration&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Significant duplication&lt;br /&gt;
* Higher maintenance costs&lt;br /&gt;
&lt;br /&gt;
=== Shared UI Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared UI&lt;br /&gt;
&lt;br /&gt;
Shared Logic&lt;br /&gt;
&lt;br /&gt;
Shared Data&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Android&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Maximum reuse&lt;br /&gt;
* Consistent presentation&lt;br /&gt;
* Faster feature delivery&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Less platform individuality&lt;br /&gt;
* Greater dependence on framework rendering&lt;br /&gt;
&lt;br /&gt;
=== Shared Logic Architecture ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Native Android UI&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Shared Logic&lt;br /&gt;
&lt;br /&gt;
Shared Data&lt;br /&gt;
&lt;br /&gt;
        ↑&lt;br /&gt;
&lt;br /&gt;
Native Apple UI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Native user experiences&lt;br /&gt;
* Reduced duplication&lt;br /&gt;
* Shared business behaviour&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Separate UI development remains necessary&lt;br /&gt;
* More architectural planning required&lt;br /&gt;
&lt;br /&gt;
== Advantages of Kotlin Multiplatform ==&lt;br /&gt;
&lt;br /&gt;
=== Reduced Duplication ===&lt;br /&gt;
&lt;br /&gt;
Logic is written once and reused across platforms.&lt;br /&gt;
&lt;br /&gt;
=== Native User Experience ===&lt;br /&gt;
&lt;br /&gt;
Each platform retains its familiar look and behaviour.&lt;br /&gt;
&lt;br /&gt;
=== Consistent Business Rules ===&lt;br /&gt;
&lt;br /&gt;
Business behaviour remains aligned regardless of device.&lt;br /&gt;
&lt;br /&gt;
=== Long-Term Maintainability ===&lt;br /&gt;
&lt;br /&gt;
Changes to shared logic automatically benefit every supported platform.&lt;br /&gt;
&lt;br /&gt;
=== Strong Architectural Separation ===&lt;br /&gt;
&lt;br /&gt;
Clear boundaries often encourage better software design.&lt;br /&gt;
&lt;br /&gt;
Business logic remains separate from presentation concerns.&lt;br /&gt;
&lt;br /&gt;
== Trade-Offs and Challenges ==&lt;br /&gt;
&lt;br /&gt;
=== UI Development Remains Separate ===&lt;br /&gt;
&lt;br /&gt;
Kotlin Multiplatform does not eliminate all duplication.&lt;br /&gt;
&lt;br /&gt;
Interfaces must still be developed for each platform.&lt;br /&gt;
&lt;br /&gt;
=== Additional Architectural Complexity ===&lt;br /&gt;
&lt;br /&gt;
Shared libraries introduce:&lt;br /&gt;
&lt;br /&gt;
* Dependency management&lt;br /&gt;
* Interface contracts&lt;br /&gt;
* Platform integration requirements&lt;br /&gt;
&lt;br /&gt;
=== Team Coordination ===&lt;br /&gt;
&lt;br /&gt;
Successful implementations often require close collaboration between platform teams.&lt;br /&gt;
&lt;br /&gt;
=== Learning Curve ===&lt;br /&gt;
&lt;br /&gt;
Developers must understand:&lt;br /&gt;
&lt;br /&gt;
* Kotlin&lt;br /&gt;
* Platform-specific development&lt;br /&gt;
* Shared architecture patterns&lt;br /&gt;
&lt;br /&gt;
== Comparing Kotlin Multiplatform with Flutter ==&lt;br /&gt;
&lt;br /&gt;
Flutter and Kotlin Multiplatform are frequently compared, but they optimise for different objectives.&lt;br /&gt;
&lt;br /&gt;
=== Flutter ===&lt;br /&gt;
&lt;br /&gt;
Typically shares:&lt;br /&gt;
&lt;br /&gt;
* UI&lt;br /&gt;
* Logic&lt;br /&gt;
* Data access&lt;br /&gt;
&lt;br /&gt;
Its goal can be summarised as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Maximum Sharing&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Consistency&lt;br /&gt;
* Rapid delivery&lt;br /&gt;
* High code reuse&lt;br /&gt;
&lt;br /&gt;
=== Kotlin Multiplatform ===&lt;br /&gt;
&lt;br /&gt;
Typically shares:&lt;br /&gt;
&lt;br /&gt;
* Business logic&lt;br /&gt;
* Data models&lt;br /&gt;
* Networking&lt;br /&gt;
&lt;br /&gt;
Its goal can be summarised as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Native Experience&lt;br /&gt;
With&lt;br /&gt;
Shared Behaviour&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Native interfaces&lt;br /&gt;
* Platform familiarity&lt;br /&gt;
* Shared business rules&lt;br /&gt;
&lt;br /&gt;
Neither approach is universally superior.&lt;br /&gt;
&lt;br /&gt;
Each represents a different architectural strategy.&lt;br /&gt;
&lt;br /&gt;
== Typical Use Cases ==&lt;br /&gt;
&lt;br /&gt;
Kotlin Multiplatform is particularly attractive for:&lt;br /&gt;
&lt;br /&gt;
* Banking applications&lt;br /&gt;
* Financial services&lt;br /&gt;
* Enterprise platforms&lt;br /&gt;
* Healthcare systems&lt;br /&gt;
* Insurance platforms&lt;br /&gt;
* Complex business applications&lt;br /&gt;
&lt;br /&gt;
These systems often contain substantial business logic that must remain consistent across platforms.&lt;br /&gt;
&lt;br /&gt;
== Common Misconceptions ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Kotlin Multiplatform Is Just Another Flutter Competitor&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Not entirely.&lt;br /&gt;
&lt;br /&gt;
Flutter focuses on sharing the entire application experience.&lt;br /&gt;
&lt;br /&gt;
Kotlin Multiplatform focuses primarily on sharing application behaviour.&lt;br /&gt;
&lt;br /&gt;
The architectural goals differ.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Kotlin Multiplatform Is Basically Native Development&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Not entirely.&lt;br /&gt;
&lt;br /&gt;
Although user interfaces remain native, considerable portions of the application are shared.&lt;br /&gt;
&lt;br /&gt;
It is more accurately viewed as a hybrid approach.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;More Sharing Is Always Better&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Not necessarily.&lt;br /&gt;
&lt;br /&gt;
The optimal architecture depends upon:&lt;br /&gt;
&lt;br /&gt;
* Business requirements&lt;br /&gt;
* Team structure&lt;br /&gt;
* Long-term maintenance goals&lt;br /&gt;
&lt;br /&gt;
Good architects optimise for value rather than code-sharing percentages.&lt;br /&gt;
&lt;br /&gt;
== Practical Guidance ==&lt;br /&gt;
&lt;br /&gt;
Kotlin Multiplatform is often well-suited when:&lt;br /&gt;
&lt;br /&gt;
* Business logic is complex&lt;br /&gt;
* Long-term maintenance is important&lt;br /&gt;
* Native user experiences are desirable&lt;br /&gt;
* Multiple platforms must behave consistently&lt;br /&gt;
&lt;br /&gt;
It may be less attractive when:&lt;br /&gt;
&lt;br /&gt;
* User interface development dominates effort&lt;br /&gt;
* Maximum code sharing is the primary objective&lt;br /&gt;
* Teams lack Kotlin expertise&lt;br /&gt;
&lt;br /&gt;
== The Shared Truth Model ==&lt;br /&gt;
&lt;br /&gt;
One way to view Kotlin Multiplatform is as a mechanism for sharing truth.&lt;br /&gt;
&lt;br /&gt;
The architecture does not seek to make every screen identical.&lt;br /&gt;
&lt;br /&gt;
Instead, it seeks to ensure that:&lt;br /&gt;
&lt;br /&gt;
* The same rules apply&lt;br /&gt;
* The same calculations occur&lt;br /&gt;
* The same validation succeeds&lt;br /&gt;
* The same business outcomes result&lt;br /&gt;
&lt;br /&gt;
regardless of platform.&lt;br /&gt;
&lt;br /&gt;
The user experiences may differ.&lt;br /&gt;
&lt;br /&gt;
The underlying truth remains consistent.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Kotlin Multiplatform represents a different interpretation of cross-platform development.&lt;br /&gt;
&lt;br /&gt;
Rather than attempting to standardise the entire application, it focuses on the parts of the system that often matter most to the organisation: the business rules, integrations, data structures, and application behaviour.&lt;br /&gt;
&lt;br /&gt;
By retaining native user interfaces, Kotlin Multiplatform acknowledges that platforms have different conventions, expectations, and strengths.&lt;br /&gt;
&lt;br /&gt;
Its goal is not to make Android and Apple applications identical.&lt;br /&gt;
&lt;br /&gt;
Its goal is to ensure they behave consistently whilst still feeling at home on their respective platforms.&lt;br /&gt;
&lt;br /&gt;
In many ways, Kotlin Multiplatform is less concerned with sharing screens and more concerned with sharing truth.&lt;br /&gt;
&lt;br /&gt;
For organisations whose greatest asset lies in their business logic rather than their presentation layer, this can be a remarkably powerful architectural model.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Flutter_Architecture_Explained&amp;diff=456</id>
		<title>Flutter Architecture Explained</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Flutter_Architecture_Explained&amp;diff=456"/>
		<updated>2026-07-13T08:39:08Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Flutter is one of the most widely adopted cross-platform application frameworks in modern software development. While it is often described as a mobile application framework, Flutter is more accurately understood as a complete user interface rendering architecture. Unlike traditional approaches that rely heavily on operating system controls, Flutter renders its own interface, allowing applications to achieve remarkable consistency across platforms. This ar...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Flutter is one of the most widely adopted cross-platform application frameworks in modern software development. While it is often described as a mobile application framework, Flutter is more accurately understood as a complete user interface rendering architecture. Unlike traditional approaches that rely heavily on operating system controls, Flutter renders its own interface, allowing applications to achieve remarkable consistency across platforms. This article explores how Flutter works internally, the architectural concepts that underpin it, and the trade-offs involved in its design.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Historically, mobile applications were built using platform-native user interface components.&lt;br /&gt;
&lt;br /&gt;
Android applications used Android controls.&lt;br /&gt;
&lt;br /&gt;
Apple applications used Apple controls.&lt;br /&gt;
&lt;br /&gt;
The application would typically request that the operating system create and display elements such as:&lt;br /&gt;
&lt;br /&gt;
* Buttons&lt;br /&gt;
* Menus&lt;br /&gt;
* Text fields&lt;br /&gt;
* Navigation controls&lt;br /&gt;
* Dialog boxes&lt;br /&gt;
&lt;br /&gt;
This approach provides excellent integration with the operating system but presents challenges when attempting to build applications that behave consistently across multiple platforms.&lt;br /&gt;
&lt;br /&gt;
Flutter was designed to address this problem.&lt;br /&gt;
&lt;br /&gt;
Rather than relying on each operating system to draw the interface, Flutter takes responsibility for rendering the entire user experience itself.&lt;br /&gt;
&lt;br /&gt;
This architectural decision fundamentally distinguishes Flutter from many other frameworks.&lt;br /&gt;
&lt;br /&gt;
== Traditional Mobile UI Models ==&lt;br /&gt;
&lt;br /&gt;
Most traditional application frameworks follow a model similar to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
Native UI Controls&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
Operating System&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
Display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, when an application creates a button, the operating system is responsible for drawing and managing it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
Android Button&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
Android Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
iOS Button&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
iOS Operating System&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The appearance and behaviour of the interface are therefore closely tied to the platform.&lt;br /&gt;
&lt;br /&gt;
This approach produces highly native experiences but can make cross-platform consistency difficult to achieve.&lt;br /&gt;
&lt;br /&gt;
== Flutter&#039;s Architectural Philosophy ==&lt;br /&gt;
&lt;br /&gt;
Flutter adopts a fundamentally different approach.&lt;br /&gt;
&lt;br /&gt;
Instead of requesting platform controls, Flutter renders its own interface.&lt;br /&gt;
&lt;br /&gt;
Conceptually, Flutter says:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Give me a drawing surface.&lt;br /&gt;
&lt;br /&gt;
I will render everything myself.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rather than creating platform-native buttons, Flutter creates Flutter buttons.&lt;br /&gt;
&lt;br /&gt;
Rather than creating platform-native menus, Flutter creates Flutter menus.&lt;br /&gt;
&lt;br /&gt;
The resulting interface can be made to resemble Android or Apple controls, but Flutter remains responsible for rendering them.&lt;br /&gt;
&lt;br /&gt;
This allows the same application to behave almost identically across multiple platforms.&lt;br /&gt;
&lt;br /&gt;
== The Flutter Rendering Model ==&lt;br /&gt;
&lt;br /&gt;
A simplified view of Flutter&#039;s architecture is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
Flutter Widget Tree&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
Flutter Rendering Engine&lt;br /&gt;
&lt;br /&gt;
    ↓&lt;br /&gt;
&lt;br /&gt;
Display&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unlike traditional frameworks, the operating system is not responsible for drawing most interface components.&lt;br /&gt;
&lt;br /&gt;
Flutter owns the rendering process.&lt;br /&gt;
&lt;br /&gt;
This architecture provides:&lt;br /&gt;
&lt;br /&gt;
* Consistency&lt;br /&gt;
* Predictability&lt;br /&gt;
* Code reuse&lt;br /&gt;
* Platform independence&lt;br /&gt;
&lt;br /&gt;
However, it also introduces an additional software layer between the application and the operating system.&lt;br /&gt;
&lt;br /&gt;
== Core Architectural Components ==&lt;br /&gt;
&lt;br /&gt;
Flutter applications are composed of several interconnected layers.&lt;br /&gt;
&lt;br /&gt;
Understanding these layers is important because much of Flutter&#039;s performance and flexibility stems from their separation.&lt;br /&gt;
&lt;br /&gt;
=== Widgets ===&lt;br /&gt;
&lt;br /&gt;
Widgets are the fundamental building blocks of Flutter applications.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Text&lt;br /&gt;
* Buttons&lt;br /&gt;
* Images&lt;br /&gt;
* Layout containers&lt;br /&gt;
* Lists&lt;br /&gt;
* Navigation structures&lt;br /&gt;
&lt;br /&gt;
Almost everything visible within a Flutter application is a widget.&lt;br /&gt;
&lt;br /&gt;
Unlike traditional controls, widgets are best thought of as descriptions of what should exist rather than the visual objects themselves.&lt;br /&gt;
&lt;br /&gt;
=== Widget Tree ===&lt;br /&gt;
&lt;br /&gt;
Widgets are organised into a hierarchy known as the Widget Tree.&lt;br /&gt;
&lt;br /&gt;
A simple example might resemble:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application&lt;br /&gt;
&lt;br /&gt;
└── Page&lt;br /&gt;
&lt;br /&gt;
    ├── Header&lt;br /&gt;
&lt;br /&gt;
    ├── Content&lt;br /&gt;
&lt;br /&gt;
    └── Footer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Widget Tree describes the structure of the user interface.&lt;br /&gt;
&lt;br /&gt;
It acts as a blueprint.&lt;br /&gt;
&lt;br /&gt;
=== Element Tree ===&lt;br /&gt;
&lt;br /&gt;
The Element Tree connects widgets to their runtime instances.&lt;br /&gt;
&lt;br /&gt;
Where the Widget Tree describes what should exist, the Element Tree tracks what actually exists while the application is running.&lt;br /&gt;
&lt;br /&gt;
Its responsibilities include:&lt;br /&gt;
&lt;br /&gt;
* Managing widget lifecycles&lt;br /&gt;
* Tracking changes&lt;br /&gt;
* Preserving state&lt;br /&gt;
* Updating the interface efficiently&lt;br /&gt;
&lt;br /&gt;
Most developers interact with widgets regularly while rarely interacting with elements directly.&lt;br /&gt;
&lt;br /&gt;
=== Render Tree ===&lt;br /&gt;
&lt;br /&gt;
The Render Tree performs the physical layout and rendering work.&lt;br /&gt;
&lt;br /&gt;
This layer determines:&lt;br /&gt;
&lt;br /&gt;
* Size&lt;br /&gt;
* Position&lt;br /&gt;
* Layout constraints&lt;br /&gt;
* Rendering behaviour&lt;br /&gt;
&lt;br /&gt;
If the Widget Tree is the blueprint and the Element Tree is the construction crew, the Render Tree is the finished building.&lt;br /&gt;
&lt;br /&gt;
=== Rendering Engine ===&lt;br /&gt;
&lt;br /&gt;
The Rendering Engine translates the Render Tree into pixels displayed on-screen.&lt;br /&gt;
&lt;br /&gt;
Responsibilities include:&lt;br /&gt;
&lt;br /&gt;
* Drawing shapes&lt;br /&gt;
* Rendering text&lt;br /&gt;
* Applying effects&lt;br /&gt;
* Managing animations&lt;br /&gt;
* Refreshing the display&lt;br /&gt;
&lt;br /&gt;
This engine is one of the reasons Flutter is capable of achieving highly consistent visual results across platforms.&lt;br /&gt;
&lt;br /&gt;
== Understanding the Three Trees ==&lt;br /&gt;
&lt;br /&gt;
One of the most important concepts in Flutter architecture is the separation between:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Widget Tree&lt;br /&gt;
    Blueprint&lt;br /&gt;
&lt;br /&gt;
Element Tree&lt;br /&gt;
    Running Instances&lt;br /&gt;
&lt;br /&gt;
Render Tree&lt;br /&gt;
    Visual Layout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A useful physical analogy is house construction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Architect Drawings&lt;br /&gt;
        ↓&lt;br /&gt;
Construction Activity&lt;br /&gt;
        ↓&lt;br /&gt;
Completed Building&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Similarly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Widget Tree&lt;br /&gt;
        ↓&lt;br /&gt;
Element Tree&lt;br /&gt;
        ↓&lt;br /&gt;
Render Tree&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Many new Flutter developers mistakenly assume widgets are the actual interface objects.&lt;br /&gt;
&lt;br /&gt;
In reality, widgets are closer to architectural plans describing what should be built.&lt;br /&gt;
&lt;br /&gt;
== The Build Process ==&lt;br /&gt;
&lt;br /&gt;
When application data changes, Flutter rebuilds portions of the user interface.&lt;br /&gt;
&lt;br /&gt;
The process generally follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Data Changes&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Widget Tree Updates&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Element Tree Reconciliation&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Render Tree Updates&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Screen Refresh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Flutter is highly optimised for these rebuild operations.&lt;br /&gt;
&lt;br /&gt;
Although the term &amp;quot;rebuild&amp;quot; may sound expensive, Flutter&#039;s architecture minimises the amount of work required to update the interface.&lt;br /&gt;
&lt;br /&gt;
This contributes significantly to its performance characteristics.&lt;br /&gt;
&lt;br /&gt;
== State Management ==&lt;br /&gt;
&lt;br /&gt;
Modern applications are driven by changing information.&lt;br /&gt;
&lt;br /&gt;
Flutter refers to this information as &#039;&#039;state&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* User authentication status&lt;br /&gt;
* Shopping basket contents&lt;br /&gt;
* Application settings&lt;br /&gt;
* API responses&lt;br /&gt;
* Notification counts&lt;br /&gt;
&lt;br /&gt;
Managing state is one of the most important architectural challenges in any Flutter application.&lt;br /&gt;
&lt;br /&gt;
=== Local State ===&lt;br /&gt;
&lt;br /&gt;
Local state belongs to a specific part of the interface.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Checkbox selections&lt;br /&gt;
* Form inputs&lt;br /&gt;
* Expanded menu sections&lt;br /&gt;
&lt;br /&gt;
This type of state is typically simple and self-contained.&lt;br /&gt;
&lt;br /&gt;
=== Shared State ===&lt;br /&gt;
&lt;br /&gt;
Some information is required throughout the application.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* User identity&lt;br /&gt;
* Permissions&lt;br /&gt;
* Application preferences&lt;br /&gt;
* Global settings&lt;br /&gt;
&lt;br /&gt;
Managing shared state often requires dedicated architectural approaches.&lt;br /&gt;
&lt;br /&gt;
Popular solutions include:&lt;br /&gt;
&lt;br /&gt;
* Provider&lt;br /&gt;
* Riverpod&lt;br /&gt;
* Bloc&lt;br /&gt;
* Redux-inspired patterns&lt;br /&gt;
&lt;br /&gt;
Selecting an appropriate state management approach can have a significant impact on maintainability.&lt;br /&gt;
&lt;br /&gt;
== Why Flutter Performs Well ==&lt;br /&gt;
&lt;br /&gt;
Flutter&#039;s performance is often attributed to several architectural characteristics.&lt;br /&gt;
&lt;br /&gt;
=== Direct Rendering ===&lt;br /&gt;
&lt;br /&gt;
Flutter directly controls rendering rather than negotiating with multiple platform-specific control systems.&lt;br /&gt;
&lt;br /&gt;
This reduces complexity and variability.&lt;br /&gt;
&lt;br /&gt;
=== Efficient Updates ===&lt;br /&gt;
&lt;br /&gt;
The separation of widgets, elements, and rendering allows Flutter to update only the portions of the interface that require change.&lt;br /&gt;
&lt;br /&gt;
=== Consistent Layout Engine ===&lt;br /&gt;
&lt;br /&gt;
Because Flutter owns the layout process, the same interface behaves consistently across platforms.&lt;br /&gt;
&lt;br /&gt;
Developers spend less effort compensating for platform-specific rendering differences.&lt;br /&gt;
&lt;br /&gt;
== Advantages of Flutter&#039;s Architecture ==&lt;br /&gt;
&lt;br /&gt;
=== Consistency ===&lt;br /&gt;
&lt;br /&gt;
Applications can maintain a highly consistent appearance and behaviour across devices.&lt;br /&gt;
&lt;br /&gt;
=== Extensive Code Reuse ===&lt;br /&gt;
&lt;br /&gt;
Most application code can be shared across:&lt;br /&gt;
&lt;br /&gt;
* Android&lt;br /&gt;
* iOS&lt;br /&gt;
* Windows&lt;br /&gt;
* macOS&lt;br /&gt;
* Linux&lt;br /&gt;
* Web&lt;br /&gt;
&lt;br /&gt;
=== Strong Developer Experience ===&lt;br /&gt;
&lt;br /&gt;
Features such as Hot Reload allow developers to observe interface changes rapidly during development.&lt;br /&gt;
&lt;br /&gt;
=== Predictable Behaviour ===&lt;br /&gt;
&lt;br /&gt;
Owning the rendering pipeline reduces many platform-specific differences.&lt;br /&gt;
&lt;br /&gt;
== Architectural Trade-Offs ==&lt;br /&gt;
&lt;br /&gt;
Every architectural decision involves compromise.&lt;br /&gt;
&lt;br /&gt;
Flutter is no exception.&lt;br /&gt;
&lt;br /&gt;
=== Framework Dependency ===&lt;br /&gt;
&lt;br /&gt;
Because Flutter owns so much of the application stack, organisations become dependent upon Flutter itself.&lt;br /&gt;
&lt;br /&gt;
=== Larger Runtime Footprint ===&lt;br /&gt;
&lt;br /&gt;
Flutter applications typically contain more framework components than equivalent native applications.&lt;br /&gt;
&lt;br /&gt;
=== Platform Behaviour Differences ===&lt;br /&gt;
&lt;br /&gt;
While Flutter can closely emulate native experiences, it is not operating-system-native by default.&lt;br /&gt;
&lt;br /&gt;
Some users may notice subtle behavioural differences.&lt;br /&gt;
&lt;br /&gt;
=== Additional Abstraction Layer ===&lt;br /&gt;
&lt;br /&gt;
The rendering engine introduces another layer between the application and operating system services.&lt;br /&gt;
&lt;br /&gt;
This can occasionally complicate access to newly introduced platform features.&lt;br /&gt;
&lt;br /&gt;
== Common Misconceptions ==&lt;br /&gt;
&lt;br /&gt;
=== Flutter Widgets Are Not Native Widgets ===&lt;br /&gt;
&lt;br /&gt;
A Flutter button may look like an Android or Apple button.&lt;br /&gt;
&lt;br /&gt;
However, it is frequently rendered by Flutter itself rather than the operating system.&lt;br /&gt;
&lt;br /&gt;
This distinction is fundamental to understanding Flutter&#039;s architecture.&lt;br /&gt;
&lt;br /&gt;
=== Flutter Is Not Just a Mobile Framework ===&lt;br /&gt;
&lt;br /&gt;
Flutter supports:&lt;br /&gt;
&lt;br /&gt;
* Mobile devices&lt;br /&gt;
* Desktop systems&lt;br /&gt;
* Web applications&lt;br /&gt;
* Embedded environments&lt;br /&gt;
&lt;br /&gt;
Its architecture was designed to support multiple platforms from the outset.&lt;br /&gt;
&lt;br /&gt;
=== Flutter Is Not Automatically Faster Than Native ===&lt;br /&gt;
&lt;br /&gt;
Flutter provides excellent performance.&lt;br /&gt;
&lt;br /&gt;
However, native applications retain advantages for some highly specialised workloads.&lt;br /&gt;
&lt;br /&gt;
Performance should be evaluated according to actual requirements rather than assumptions.&lt;br /&gt;
&lt;br /&gt;
== Practical Guidance ==&lt;br /&gt;
&lt;br /&gt;
Flutter is often a strong choice when:&lt;br /&gt;
&lt;br /&gt;
* Consistency is important&lt;br /&gt;
* Multiple platforms must be supported&lt;br /&gt;
* Development efficiency is a priority&lt;br /&gt;
* User interface control is desirable&lt;br /&gt;
* Long-term code sharing is valuable&lt;br /&gt;
&lt;br /&gt;
Flutter may be less suitable when:&lt;br /&gt;
&lt;br /&gt;
* Deep platform integration dominates requirements&lt;br /&gt;
* Strict adherence to platform behaviour is essential&lt;br /&gt;
* Existing teams already possess extensive native expertise&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Flutter is frequently described as a cross-platform development framework.&lt;br /&gt;
&lt;br /&gt;
While technically accurate, this description understates its architectural significance.&lt;br /&gt;
&lt;br /&gt;
Flutter is better understood as a complete rendering architecture that assumes responsibility for presenting the user interface rather than delegating that responsibility to the operating system.&lt;br /&gt;
&lt;br /&gt;
This approach allows Flutter to achieve one of its primary goals: consistent behaviour across multiple environments from a largely shared codebase.&lt;br /&gt;
&lt;br /&gt;
Flutter&#039;s greatest strength and its greatest compromise are ultimately the same architectural decision.&lt;br /&gt;
&lt;br /&gt;
By taking ownership of the rendering pipeline, Flutter gains extraordinary consistency, flexibility, and portability.&lt;br /&gt;
&lt;br /&gt;
At the same time, it introduces another abstraction layer between the application and the operating system.&lt;br /&gt;
&lt;br /&gt;
Understanding this trade-off is far more important than understanding any individual widget, package, or development technique.&lt;br /&gt;
&lt;br /&gt;
Once Flutter is viewed as a rendering architecture rather than merely a framework, many of its design decisions become much easier to understand.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Shared_UI_vs_Shared_Logic_Architectures&amp;diff=455</id>
		<title>Shared UI vs Shared Logic Architectures</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Shared_UI_vs_Shared_Logic_Architectures&amp;diff=455"/>
		<updated>2026-07-13T08:37:12Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Cross-platform development is often discussed as though all frameworks and technologies pursue the same goal. In reality, different cross-platform architectures solve different problems. Some architectures seek to share both the user interface and business logic, while others focus on sharing only the application&amp;#039;s underlying functionality whilst retaining native platform experiences. Understanding what is being shared is often more important than understa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Cross-platform development is often discussed as though all frameworks and technologies pursue the same goal. In reality, different cross-platform architectures solve different problems. Some architectures seek to share both the user interface and business logic, while others focus on sharing only the application&#039;s underlying functionality whilst retaining native platform experiences. Understanding what is being shared is often more important than understanding which framework is being used.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
As organisations sought to reduce the cost of maintaining separate Android and iOS applications, a variety of cross-platform technologies emerged.&lt;br /&gt;
&lt;br /&gt;
From a distance, many of these solutions appear similar.&lt;br /&gt;
&lt;br /&gt;
They promise:&lt;br /&gt;
&lt;br /&gt;
* Reduced duplication&lt;br /&gt;
* Faster development&lt;br /&gt;
* Multi-platform support&lt;br /&gt;
* Improved maintainability&lt;br /&gt;
&lt;br /&gt;
However, once examined closely, significant differences become apparent.&lt;br /&gt;
&lt;br /&gt;
Some approaches attempt to share nearly everything.&lt;br /&gt;
&lt;br /&gt;
Others deliberately preserve platform-specific user experiences whilst sharing only the application&#039;s logic.&lt;br /&gt;
&lt;br /&gt;
These are fundamentally different architectural strategies.&lt;br /&gt;
&lt;br /&gt;
The critical question is not:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;What framework should we use?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Instead, it is:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;What should be standardised, and what should remain platform-specific?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== What Gets Shared? ==&lt;br /&gt;
&lt;br /&gt;
Every application consists of multiple layers.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User Interface&lt;br /&gt;
&lt;br /&gt;
Business Logic&lt;br /&gt;
&lt;br /&gt;
Data Access&lt;br /&gt;
&lt;br /&gt;
API Communication&lt;br /&gt;
&lt;br /&gt;
Storage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cross-platform architectures differ primarily in which of these layers they attempt to reuse.&lt;br /&gt;
&lt;br /&gt;
The decision affects:&lt;br /&gt;
&lt;br /&gt;
* Development speed&lt;br /&gt;
* User experience&lt;br /&gt;
* Testing requirements&lt;br /&gt;
* Maintenance effort&lt;br /&gt;
* Long-term flexibility&lt;br /&gt;
&lt;br /&gt;
== Shared UI Architectures ==&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
&lt;br /&gt;
Shared UI architectures attempt to reuse both the application&#039;s visual interface and its underlying logic.&lt;br /&gt;
&lt;br /&gt;
The same screens, controls, workflows, and business rules are presented across multiple platforms.&lt;br /&gt;
&lt;br /&gt;
Typically, most of the application exists within a single codebase.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared UI&lt;br /&gt;
&lt;br /&gt;
Shared Business Logic&lt;br /&gt;
&lt;br /&gt;
Shared Data Layer&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Android&lt;br /&gt;
iOS&lt;br /&gt;
Desktop&lt;br /&gt;
Web&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Flutter&lt;br /&gt;
* React Native&lt;br /&gt;
* .NET MAUI&lt;br /&gt;
* Ionic&lt;br /&gt;
* Capacitor-based applications&lt;br /&gt;
&lt;br /&gt;
=== Advantages ===&lt;br /&gt;
&lt;br /&gt;
==== Maximum Code Reuse ====&lt;br /&gt;
&lt;br /&gt;
Most application functionality is developed once.&lt;br /&gt;
&lt;br /&gt;
This can significantly reduce:&lt;br /&gt;
&lt;br /&gt;
* Development effort&lt;br /&gt;
* Testing effort&lt;br /&gt;
* Documentation effort&lt;br /&gt;
* Maintenance effort&lt;br /&gt;
&lt;br /&gt;
==== Consistent User Experience ====&lt;br /&gt;
&lt;br /&gt;
Users encounter similar behaviour regardless of platform.&lt;br /&gt;
&lt;br /&gt;
Workflows remain predictable.&lt;br /&gt;
&lt;br /&gt;
Features remain aligned.&lt;br /&gt;
&lt;br /&gt;
This is particularly attractive for products requiring a highly consistent brand identity.&lt;br /&gt;
&lt;br /&gt;
==== Faster Initial Development ====&lt;br /&gt;
&lt;br /&gt;
New features can often be delivered to all supported platforms simultaneously.&lt;br /&gt;
&lt;br /&gt;
This can be valuable when:&lt;br /&gt;
&lt;br /&gt;
* Launching new products&lt;br /&gt;
* Developing MVPs&lt;br /&gt;
* Building startup applications&lt;br /&gt;
* Working with limited development resources&lt;br /&gt;
&lt;br /&gt;
==== Simplified Team Structure ====&lt;br /&gt;
&lt;br /&gt;
A single team can typically support multiple platforms.&lt;br /&gt;
&lt;br /&gt;
Knowledge becomes concentrated rather than fragmented.&lt;br /&gt;
&lt;br /&gt;
=== Disadvantages ===&lt;br /&gt;
&lt;br /&gt;
==== Reduced Platform Individuality ====&lt;br /&gt;
&lt;br /&gt;
Android and Apple users often expect different experiences.&lt;br /&gt;
&lt;br /&gt;
A highly standardised interface may feel less natural on one or both platforms.&lt;br /&gt;
&lt;br /&gt;
==== Additional Framework Dependency ====&lt;br /&gt;
&lt;br /&gt;
The application becomes dependent upon an intermediate framework.&lt;br /&gt;
&lt;br /&gt;
This introduces another component that must be:&lt;br /&gt;
&lt;br /&gt;
* Maintained&lt;br /&gt;
* Updated&lt;br /&gt;
* Supported&lt;br /&gt;
&lt;br /&gt;
==== Platform-Specific Workarounds ====&lt;br /&gt;
&lt;br /&gt;
Not everything can be perfectly shared.&lt;br /&gt;
&lt;br /&gt;
Applications frequently require:&lt;br /&gt;
&lt;br /&gt;
* Native integrations&lt;br /&gt;
* Platform-specific fixes&lt;br /&gt;
* Device-specific adaptations&lt;br /&gt;
&lt;br /&gt;
The promise of &amp;quot;write once, run anywhere&amp;quot; should be viewed as an aspiration rather than a guarantee.&lt;br /&gt;
&lt;br /&gt;
== Shared Logic Architectures ==&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
&lt;br /&gt;
Shared Logic architectures focus on sharing the behaviour of the application rather than its appearance.&lt;br /&gt;
&lt;br /&gt;
Business rules, data models, networking code, validation, and application services are shared.&lt;br /&gt;
&lt;br /&gt;
The user interface remains native to each platform.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared Business Logic&lt;br /&gt;
&lt;br /&gt;
Shared Validation&lt;br /&gt;
&lt;br /&gt;
Shared Networking&lt;br /&gt;
&lt;br /&gt;
Shared Data Access&lt;br /&gt;
&lt;br /&gt;
        ↓&lt;br /&gt;
&lt;br /&gt;
Native Android UI&lt;br /&gt;
&lt;br /&gt;
Native Apple UI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Kotlin Multiplatform&lt;br /&gt;
* Certain Xamarin architectures&lt;br /&gt;
* Enterprise service-layer architectures&lt;br /&gt;
* Custom shared-library approaches&lt;br /&gt;
&lt;br /&gt;
=== Advantages ===&lt;br /&gt;
&lt;br /&gt;
==== Native User Experience ====&lt;br /&gt;
&lt;br /&gt;
Each platform retains its own conventions.&lt;br /&gt;
&lt;br /&gt;
Applications feel natural to their users.&lt;br /&gt;
&lt;br /&gt;
Navigation, controls, and interactions align with platform standards.&lt;br /&gt;
&lt;br /&gt;
==== Reduced Business Logic Duplication ====&lt;br /&gt;
&lt;br /&gt;
Critical application behaviour is implemented once.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Authentication&lt;br /&gt;
* Pricing rules&lt;br /&gt;
* Calculations&lt;br /&gt;
* Validation logic&lt;br /&gt;
* Security controls&lt;br /&gt;
&lt;br /&gt;
This reduces the risk of inconsistent behaviour between platforms.&lt;br /&gt;
&lt;br /&gt;
==== Easier Platform Evolution ====&lt;br /&gt;
&lt;br /&gt;
Operating systems evolve independently.&lt;br /&gt;
&lt;br /&gt;
Because user interfaces remain native, adapting to platform changes is often simpler.&lt;br /&gt;
&lt;br /&gt;
==== Strong Long-Term Flexibility ====&lt;br /&gt;
&lt;br /&gt;
The user interface can evolve without affecting shared business logic.&lt;br /&gt;
&lt;br /&gt;
Similarly, business logic can evolve without redesigning the presentation layer.&lt;br /&gt;
&lt;br /&gt;
=== Disadvantages ===&lt;br /&gt;
&lt;br /&gt;
==== Dual User Interface Development ====&lt;br /&gt;
&lt;br /&gt;
Android and Apple interfaces still require separate implementation.&lt;br /&gt;
&lt;br /&gt;
Although duplication is reduced, it is not eliminated.&lt;br /&gt;
&lt;br /&gt;
==== Increased Architectural Complexity ====&lt;br /&gt;
&lt;br /&gt;
Shared Logic solutions frequently require more architectural planning.&lt;br /&gt;
&lt;br /&gt;
Additional effort may be needed to:&lt;br /&gt;
&lt;br /&gt;
* Define interfaces&lt;br /&gt;
* Manage dependencies&lt;br /&gt;
* Coordinate platform teams&lt;br /&gt;
&lt;br /&gt;
==== Higher Initial Investment ====&lt;br /&gt;
&lt;br /&gt;
The architecture often requires greater discipline and planning before development begins.&lt;br /&gt;
&lt;br /&gt;
== A Physical Analogy ==&lt;br /&gt;
&lt;br /&gt;
The difference between these approaches can be visualised using a restaurant franchise.&lt;br /&gt;
&lt;br /&gt;
=== Shared UI Architecture ===&lt;br /&gt;
&lt;br /&gt;
Imagine a chain restaurant where every branch is identical.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Same Building&lt;br /&gt;
&lt;br /&gt;
Same Layout&lt;br /&gt;
&lt;br /&gt;
Same Menu&lt;br /&gt;
&lt;br /&gt;
Same Decor&lt;br /&gt;
&lt;br /&gt;
Same Procedures&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Customers receive an almost identical experience regardless of location.&lt;br /&gt;
&lt;br /&gt;
Consistency is prioritised.&lt;br /&gt;
&lt;br /&gt;
=== Shared Logic Architecture ===&lt;br /&gt;
&lt;br /&gt;
Now imagine a franchise model.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared Recipes&lt;br /&gt;
&lt;br /&gt;
Shared Ingredients&lt;br /&gt;
&lt;br /&gt;
Shared Food Safety Rules&lt;br /&gt;
&lt;br /&gt;
Shared Management Processes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
However:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Different Buildings&lt;br /&gt;
&lt;br /&gt;
Different Decor&lt;br /&gt;
&lt;br /&gt;
Different Seating Layouts&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Customers experience local variations whilst the underlying business processes remain consistent.&lt;br /&gt;
&lt;br /&gt;
This is much closer to the philosophy of Shared Logic architectures.&lt;br /&gt;
&lt;br /&gt;
== Architectural Comparison ==&lt;br /&gt;
&lt;br /&gt;
=== Development Speed ===&lt;br /&gt;
&lt;br /&gt;
Shared UI architectures typically provide the fastest initial development experience.&lt;br /&gt;
&lt;br /&gt;
A single implementation can support multiple platforms simultaneously.&lt;br /&gt;
&lt;br /&gt;
Shared Logic architectures usually require additional interface development for each supported platform.&lt;br /&gt;
&lt;br /&gt;
=== Platform Consistency ===&lt;br /&gt;
&lt;br /&gt;
Shared UI architectures excel at maintaining consistency.&lt;br /&gt;
&lt;br /&gt;
Users encounter similar workflows regardless of device.&lt;br /&gt;
&lt;br /&gt;
Shared Logic architectures allow experiences to diverge where appropriate.&lt;br /&gt;
&lt;br /&gt;
=== User Experience ===&lt;br /&gt;
&lt;br /&gt;
Shared UI prioritises consistency.&lt;br /&gt;
&lt;br /&gt;
Shared Logic prioritises platform familiarity.&lt;br /&gt;
&lt;br /&gt;
Neither objective is inherently superior.&lt;br /&gt;
&lt;br /&gt;
The appropriate choice depends on project goals.&lt;br /&gt;
&lt;br /&gt;
=== Maintenance ===&lt;br /&gt;
&lt;br /&gt;
Shared UI architectures often reduce maintenance effort by centralising application behaviour.&lt;br /&gt;
&lt;br /&gt;
Shared Logic architectures reduce duplication whilst preserving flexibility.&lt;br /&gt;
&lt;br /&gt;
The optimal balance depends upon how frequently each layer changes.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
&lt;br /&gt;
Both approaches can achieve excellent results.&lt;br /&gt;
&lt;br /&gt;
Performance is often determined more by implementation quality than architectural category.&lt;br /&gt;
&lt;br /&gt;
== Understanding Business Requirements ==&lt;br /&gt;
&lt;br /&gt;
Before selecting an architecture, organisations should identify what is genuinely unique.&lt;br /&gt;
&lt;br /&gt;
=== Consumer Applications ===&lt;br /&gt;
&lt;br /&gt;
Applications competing for user engagement may place significant value on platform-specific experiences.&lt;br /&gt;
&lt;br /&gt;
Shared Logic architectures can be attractive where user experience differentiation matters.&lt;br /&gt;
&lt;br /&gt;
=== Enterprise Applications ===&lt;br /&gt;
&lt;br /&gt;
Many enterprise systems contain large amounts of shared functionality.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Authentication&lt;br /&gt;
* Workflow processing&lt;br /&gt;
* Reporting&lt;br /&gt;
* Data access&lt;br /&gt;
&lt;br /&gt;
Shared UI solutions may provide substantial efficiencies.&lt;br /&gt;
&lt;br /&gt;
=== Internal Business Applications ===&lt;br /&gt;
&lt;br /&gt;
Where users are trained and workflows are controlled, consistency often provides greater value than platform individuality.&lt;br /&gt;
&lt;br /&gt;
=== Complex Multi-Platform Ecosystems ===&lt;br /&gt;
&lt;br /&gt;
Applications targeting:&lt;br /&gt;
&lt;br /&gt;
* Mobile&lt;br /&gt;
* Desktop&lt;br /&gt;
* Web&lt;br /&gt;
&lt;br /&gt;
may benefit from extensive sharing where user requirements are broadly similar.&lt;br /&gt;
&lt;br /&gt;
== Common Misconceptions ==&lt;br /&gt;
&lt;br /&gt;
=== Shared UI Is Not Automatically Inferior ===&lt;br /&gt;
&lt;br /&gt;
Some developers incorrectly assume shared interfaces are inherently less professional.&lt;br /&gt;
&lt;br /&gt;
Many successful commercial applications use Shared UI architectures.&lt;br /&gt;
&lt;br /&gt;
The architecture should be judged by results rather than ideology.&lt;br /&gt;
&lt;br /&gt;
=== Shared Logic Is Not Purely Native ===&lt;br /&gt;
&lt;br /&gt;
Although the presentation layer remains native, significant portions of the application remain shared.&lt;br /&gt;
&lt;br /&gt;
It is best viewed as a hybrid approach rather than a fully native strategy.&lt;br /&gt;
&lt;br /&gt;
=== More Sharing Is Not Always Better ===&lt;br /&gt;
&lt;br /&gt;
Excessive standardisation can introduce complexity.&lt;br /&gt;
&lt;br /&gt;
Sometimes duplication is cheaper than abstraction.&lt;br /&gt;
&lt;br /&gt;
Good architects recognise the difference.&lt;br /&gt;
&lt;br /&gt;
== Design and Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
When evaluating either approach, consideration should be given to:&lt;br /&gt;
&lt;br /&gt;
* Long-term maintainability&lt;br /&gt;
* Team structure&lt;br /&gt;
* Platform roadmap requirements&lt;br /&gt;
* User experience expectations&lt;br /&gt;
* Hiring considerations&lt;br /&gt;
* Vendor lock-in&lt;br /&gt;
* Testing requirements&lt;br /&gt;
&lt;br /&gt;
Technology selection should be guided by business objectives rather than industry trends.&lt;br /&gt;
&lt;br /&gt;
== Practical Guidance ==&lt;br /&gt;
&lt;br /&gt;
=== Shared UI Makes Sense When ===&lt;br /&gt;
&lt;br /&gt;
* Consistency is important&lt;br /&gt;
* Development speed is critical&lt;br /&gt;
* Resources are limited&lt;br /&gt;
* Multiple platforms are required&lt;br /&gt;
* User experience differences are relatively minor&lt;br /&gt;
&lt;br /&gt;
=== Shared Logic Makes Sense When ===&lt;br /&gt;
&lt;br /&gt;
* Platform-specific experiences matter&lt;br /&gt;
* Business logic is highly complex&lt;br /&gt;
* Long-term maintainability is a priority&lt;br /&gt;
* Platform evolution is expected&lt;br /&gt;
* Native integration requirements are significant&lt;br /&gt;
&lt;br /&gt;
=== Either Approach Can Succeed When ===&lt;br /&gt;
&lt;br /&gt;
* Requirements are clearly understood&lt;br /&gt;
* The architecture is implemented well&lt;br /&gt;
* Teams possess appropriate skills&lt;br /&gt;
* Maintenance requirements are considered from the outset&lt;br /&gt;
&lt;br /&gt;
== The Real Question ==&lt;br /&gt;
&lt;br /&gt;
Many architecture discussions focus on selecting technologies.&lt;br /&gt;
&lt;br /&gt;
Experienced architects often begin elsewhere.&lt;br /&gt;
&lt;br /&gt;
They ask:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;What part of the system changes least frequently?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The answer frequently determines what should be shared.&lt;br /&gt;
&lt;br /&gt;
For some applications, the user interface remains relatively stable.&lt;br /&gt;
&lt;br /&gt;
For others, the business rules represent the true long-term asset.&lt;br /&gt;
&lt;br /&gt;
Identifying these characteristics early can significantly improve architectural decisions.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Shared UI and Shared Logic architectures are not competing versions of the same idea.&lt;br /&gt;
&lt;br /&gt;
They represent different philosophies regarding standardisation.&lt;br /&gt;
&lt;br /&gt;
Shared UI architectures seek to standardise the entire application experience.&lt;br /&gt;
&lt;br /&gt;
Shared Logic architectures seek to standardise application behaviour while respecting platform differences.&lt;br /&gt;
&lt;br /&gt;
Neither approach is universally superior.&lt;br /&gt;
&lt;br /&gt;
The most successful solutions emerge when architects understand what should remain consistent, what should remain flexible, and where the organisation derives the greatest long-term value.&lt;br /&gt;
&lt;br /&gt;
Good architecture is rarely about maximising code reuse.&lt;br /&gt;
&lt;br /&gt;
It is about sharing the parts of a system that provide the greatest benefit whilst allowing the rest of the system to evolve naturally.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Native_vs_Cross-Platform_Mobile_Development&amp;diff=454</id>
		<title>Native vs Cross-Platform Mobile Development</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Native_vs_Cross-Platform_Mobile_Development&amp;diff=454"/>
		<updated>2026-07-13T08:35:03Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; One of the most common decisions faced by organisations developing mobile applications is whether to adopt a native or cross-platform development strategy. Both approaches are capable of producing excellent applications, yet they optimise for different objectives. This article explores the characteristics, advantages, disadvantages, and architectural implications of each approach, providing practical guidance for selecting the most appropriate solution.  =...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
One of the most common decisions faced by organisations developing mobile applications is whether to adopt a native or cross-platform development strategy. Both approaches are capable of producing excellent applications, yet they optimise for different objectives. This article explores the characteristics, advantages, disadvantages, and architectural implications of each approach, providing practical guidance for selecting the most appropriate solution.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Since the emergence of smartphones, organisations have sought ways to deliver applications to both Android and Apple devices.&lt;br /&gt;
&lt;br /&gt;
Initially, this required completely separate development projects for each platform. As application complexity increased, so did the cost of maintaining multiple teams, codebases, testing processes, and release cycles.&lt;br /&gt;
&lt;br /&gt;
Cross-platform technologies emerged as an attempt to reduce duplication and improve development efficiency.&lt;br /&gt;
&lt;br /&gt;
Today, organisations must often decide between:&lt;br /&gt;
&lt;br /&gt;
* Native development&lt;br /&gt;
* Cross-platform development&lt;br /&gt;
* Hybrid approaches combining elements of both&lt;br /&gt;
&lt;br /&gt;
The debate is frequently framed as a technical argument. In reality, it is usually an architectural and business decision.&lt;br /&gt;
&lt;br /&gt;
The question is rarely:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Which technology is best?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
More often it is:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;What are we trying to optimise?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Defining Native Development ==&lt;br /&gt;
&lt;br /&gt;
Native development involves creating separate applications for each platform using the platform&#039;s preferred languages, frameworks, and development tools.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Swift for iOS and iPadOS&lt;br /&gt;
* Kotlin for Android&lt;br /&gt;
&lt;br /&gt;
Applications developed natively communicate directly with the operating system and use the platform&#039;s own controls and user interface conventions.&lt;br /&gt;
&lt;br /&gt;
=== Native Advantages ===&lt;br /&gt;
&lt;br /&gt;
==== Full Platform Access ====&lt;br /&gt;
&lt;br /&gt;
Native applications can immediately take advantage of the latest platform features as soon as they are released.&lt;br /&gt;
&lt;br /&gt;
This is particularly valuable when integrating with:&lt;br /&gt;
&lt;br /&gt;
* Biometric authentication&lt;br /&gt;
* Cameras&lt;br /&gt;
* Sensors&lt;br /&gt;
* Artificial intelligence services&lt;br /&gt;
* Operating system enhancements&lt;br /&gt;
&lt;br /&gt;
==== Optimised User Experience ====&lt;br /&gt;
&lt;br /&gt;
Native applications naturally inherit the look and behaviour users expect on their chosen platform.&lt;br /&gt;
&lt;br /&gt;
Buttons feel familiar.&lt;br /&gt;
&lt;br /&gt;
Menus behave predictably.&lt;br /&gt;
&lt;br /&gt;
Accessibility support is generally excellent.&lt;br /&gt;
&lt;br /&gt;
==== Performance ====&lt;br /&gt;
&lt;br /&gt;
Native applications operate with minimal abstraction between the application and the operating system.&lt;br /&gt;
&lt;br /&gt;
This can be beneficial for:&lt;br /&gt;
&lt;br /&gt;
* High-performance graphics&lt;br /&gt;
* Video processing&lt;br /&gt;
* Real-time communication&lt;br /&gt;
* Gaming applications&lt;br /&gt;
* Computationally intensive workloads&lt;br /&gt;
&lt;br /&gt;
==== Platform Integration ====&lt;br /&gt;
&lt;br /&gt;
Deep integration with operating system services is often easier when developing natively.&lt;br /&gt;
&lt;br /&gt;
=== Native Disadvantages ===&lt;br /&gt;
&lt;br /&gt;
==== Duplicate Effort ====&lt;br /&gt;
&lt;br /&gt;
Features frequently need to be implemented separately for Android and iOS.&lt;br /&gt;
&lt;br /&gt;
This can result in:&lt;br /&gt;
&lt;br /&gt;
* Duplicate development effort&lt;br /&gt;
* Duplicate testing effort&lt;br /&gt;
* Duplicate maintenance effort&lt;br /&gt;
&lt;br /&gt;
==== Increased Operational Costs ====&lt;br /&gt;
&lt;br /&gt;
Organisations often require:&lt;br /&gt;
&lt;br /&gt;
* Android specialists&lt;br /&gt;
* iOS specialists&lt;br /&gt;
* Separate testing processes&lt;br /&gt;
* Separate release management&lt;br /&gt;
&lt;br /&gt;
The technical advantages of native development are sometimes offset by increased operational overhead.&lt;br /&gt;
&lt;br /&gt;
==== Longer Development Cycles ====&lt;br /&gt;
&lt;br /&gt;
Maintaining two independent codebases often increases the time required to deliver new functionality.&lt;br /&gt;
&lt;br /&gt;
== Defining Cross-Platform Development ==&lt;br /&gt;
&lt;br /&gt;
Cross-platform development focuses on sharing code between platforms.&lt;br /&gt;
&lt;br /&gt;
Rather than maintaining separate implementations, developers create a common application that targets multiple operating systems.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Flutter&lt;br /&gt;
* React Native&lt;br /&gt;
* .NET MAUI&lt;br /&gt;
* Ionic&lt;br /&gt;
* Kotlin Multiplatform (partially shared)&lt;br /&gt;
&lt;br /&gt;
The amount of sharing varies by framework.&lt;br /&gt;
&lt;br /&gt;
Some share only business logic.&lt;br /&gt;
&lt;br /&gt;
Others attempt to share the entire application.&lt;br /&gt;
&lt;br /&gt;
=== Cross-Platform Advantages ===&lt;br /&gt;
&lt;br /&gt;
==== Reduced Duplication ====&lt;br /&gt;
&lt;br /&gt;
A single feature may only need to be developed once.&lt;br /&gt;
&lt;br /&gt;
This can significantly reduce development effort and improve consistency between platforms.&lt;br /&gt;
&lt;br /&gt;
==== Faster Delivery ====&lt;br /&gt;
&lt;br /&gt;
Startups and product teams frequently favour cross-platform frameworks because they can reach multiple device types more quickly.&lt;br /&gt;
&lt;br /&gt;
This is particularly valuable when validating new products.&lt;br /&gt;
&lt;br /&gt;
==== Shared Knowledge ====&lt;br /&gt;
&lt;br /&gt;
A unified codebase means:&lt;br /&gt;
&lt;br /&gt;
* Less duplicated documentation&lt;br /&gt;
* Fewer implementation differences&lt;br /&gt;
* Easier onboarding&lt;br /&gt;
* Greater knowledge sharing&lt;br /&gt;
&lt;br /&gt;
==== Lower Maintenance Costs ====&lt;br /&gt;
&lt;br /&gt;
Depending on the framework, a single modification may update behaviour across multiple platforms simultaneously.&lt;br /&gt;
&lt;br /&gt;
=== Cross-Platform Disadvantages ===&lt;br /&gt;
&lt;br /&gt;
==== Additional Abstraction Layers ====&lt;br /&gt;
&lt;br /&gt;
Cross-platform frameworks introduce software layers between the application and the operating system.&lt;br /&gt;
&lt;br /&gt;
These layers must themselves be:&lt;br /&gt;
&lt;br /&gt;
* Maintained&lt;br /&gt;
* Updated&lt;br /&gt;
* Supported&lt;br /&gt;
&lt;br /&gt;
==== Platform-Specific Challenges ====&lt;br /&gt;
&lt;br /&gt;
No two platforms are identical.&lt;br /&gt;
&lt;br /&gt;
Differences remain in:&lt;br /&gt;
&lt;br /&gt;
* User interface conventions&lt;br /&gt;
* Hardware capabilities&lt;br /&gt;
* Security models&lt;br /&gt;
* Operating system behaviour&lt;br /&gt;
&lt;br /&gt;
Platform-specific code often still exists.&lt;br /&gt;
&lt;br /&gt;
==== Delayed Feature Adoption ====&lt;br /&gt;
&lt;br /&gt;
New operating system capabilities may take time to appear within a framework.&lt;br /&gt;
&lt;br /&gt;
Native development typically receives access first.&lt;br /&gt;
&lt;br /&gt;
== The Real Trade-Off ==&lt;br /&gt;
&lt;br /&gt;
Many discussions attempt to answer whether native or cross-platform development is superior.&lt;br /&gt;
&lt;br /&gt;
This is the wrong question.&lt;br /&gt;
&lt;br /&gt;
The more useful question is:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;What are we optimising?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Native development optimises for:&lt;br /&gt;
&lt;br /&gt;
* Platform capability&lt;br /&gt;
* Control&lt;br /&gt;
* Integration&lt;br /&gt;
* Performance&lt;br /&gt;
&lt;br /&gt;
Cross-platform development optimises for:&lt;br /&gt;
&lt;br /&gt;
* Efficiency&lt;br /&gt;
* Consistency&lt;br /&gt;
* Reduced duplication&lt;br /&gt;
* Speed of delivery&lt;br /&gt;
&lt;br /&gt;
Neither objective is inherently better.&lt;br /&gt;
&lt;br /&gt;
Each represents a legitimate engineering decision.&lt;br /&gt;
&lt;br /&gt;
== A Physical Analogy ==&lt;br /&gt;
&lt;br /&gt;
Consider two vehicle manufacturers.&lt;br /&gt;
&lt;br /&gt;
=== Native Development ===&lt;br /&gt;
&lt;br /&gt;
Imagine operating two independent workshops.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Workshop A&lt;br /&gt;
    Builds Android Vehicles&lt;br /&gt;
&lt;br /&gt;
Workshop B&lt;br /&gt;
    Builds Apple Vehicles&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each workshop produces a vehicle perfectly adapted to its environment.&lt;br /&gt;
&lt;br /&gt;
However, both workshops require:&lt;br /&gt;
&lt;br /&gt;
* Staff&lt;br /&gt;
* Equipment&lt;br /&gt;
* Management&lt;br /&gt;
* Maintenance&lt;br /&gt;
&lt;br /&gt;
The result is highly optimised but expensive.&lt;br /&gt;
&lt;br /&gt;
=== Cross-Platform Development ===&lt;br /&gt;
&lt;br /&gt;
Now imagine a shared factory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared Chassis&lt;br /&gt;
    Engine&lt;br /&gt;
    Transmission&lt;br /&gt;
    Steering&lt;br /&gt;
&lt;br /&gt;
Platform Adaptations&lt;br /&gt;
    Android Variant&lt;br /&gt;
&lt;br /&gt;
Platform Adaptations&lt;br /&gt;
    Apple Variant&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Much of the vehicle is built once and reused.&lt;br /&gt;
&lt;br /&gt;
Manufacturing becomes more efficient.&lt;br /&gt;
&lt;br /&gt;
Some compromises are necessary, but duplication is significantly reduced.&lt;br /&gt;
&lt;br /&gt;
== Understanding Application Requirements ==&lt;br /&gt;
&lt;br /&gt;
=== Consumer Applications ===&lt;br /&gt;
&lt;br /&gt;
Applications competing directly for user engagement often place great importance on:&lt;br /&gt;
&lt;br /&gt;
* Responsiveness&lt;br /&gt;
* Platform integration&lt;br /&gt;
* User experience&lt;br /&gt;
&lt;br /&gt;
Native development may be advantageous where differentiation is critical.&lt;br /&gt;
&lt;br /&gt;
=== Enterprise Applications ===&lt;br /&gt;
&lt;br /&gt;
Enterprise systems frequently prioritise:&lt;br /&gt;
&lt;br /&gt;
* Reliability&lt;br /&gt;
* Maintainability&lt;br /&gt;
* Integration&lt;br /&gt;
* Cost control&lt;br /&gt;
&lt;br /&gt;
Cross-platform approaches can be highly effective in these environments.&lt;br /&gt;
&lt;br /&gt;
=== Internal Business Applications ===&lt;br /&gt;
&lt;br /&gt;
Applications used by employees often have modest performance requirements.&lt;br /&gt;
&lt;br /&gt;
In many cases, rapid delivery and ease of maintenance provide greater value than platform-specific optimisation.&lt;br /&gt;
&lt;br /&gt;
=== Startups and MVPs ===&lt;br /&gt;
&lt;br /&gt;
Startups frequently need to validate ideas quickly.&lt;br /&gt;
&lt;br /&gt;
A working application delivered to users today may be more valuable than a technically perfect application delivered six months later.&lt;br /&gt;
&lt;br /&gt;
Cross-platform development is often attractive in these scenarios.&lt;br /&gt;
&lt;br /&gt;
== Performance Myths ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Native Is Always Faster&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Sometimes.&lt;br /&gt;
&lt;br /&gt;
Not always.&lt;br /&gt;
&lt;br /&gt;
For highly demanding workloads such as advanced gaming, high-end graphics processing, or intensive real-time systems, native development may offer measurable benefits.&lt;br /&gt;
&lt;br /&gt;
However, many business applications spend most of their time:&lt;br /&gt;
&lt;br /&gt;
* Displaying forms&lt;br /&gt;
* Retrieving data&lt;br /&gt;
* Calling APIs&lt;br /&gt;
* Processing user input&lt;br /&gt;
&lt;br /&gt;
In these situations, the difference may be negligible to end users.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Cross-Platform Is Slow&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
This perception often originates from older technologies.&lt;br /&gt;
&lt;br /&gt;
Modern frameworks can deliver excellent performance for many application types.&lt;br /&gt;
&lt;br /&gt;
The suitability of a framework should be determined through measurement rather than assumption.&lt;br /&gt;
&lt;br /&gt;
== Team and Organisational Considerations ==&lt;br /&gt;
&lt;br /&gt;
Technology selection should consider organisational realities.&lt;br /&gt;
&lt;br /&gt;
=== Existing Skills ===&lt;br /&gt;
&lt;br /&gt;
If the team already possesses significant expertise in:&lt;br /&gt;
&lt;br /&gt;
* JavaScript&lt;br /&gt;
* C#&lt;br /&gt;
* Kotlin&lt;br /&gt;
* Swift&lt;br /&gt;
&lt;br /&gt;
This may influence the optimal solution.&lt;br /&gt;
&lt;br /&gt;
=== Hiring Requirements ===&lt;br /&gt;
&lt;br /&gt;
Technology choices affect recruitment.&lt;br /&gt;
&lt;br /&gt;
An architecture requiring multiple specialist teams may be more difficult to scale than one based on a common skill set.&lt;br /&gt;
&lt;br /&gt;
=== Long-Term Maintenance ===&lt;br /&gt;
&lt;br /&gt;
Applications often live far longer than expected.&lt;br /&gt;
&lt;br /&gt;
Maintenance costs typically exceed initial development costs.&lt;br /&gt;
&lt;br /&gt;
A maintainable solution is frequently more valuable than a theoretically ideal one.&lt;br /&gt;
&lt;br /&gt;
== Architecture Models ==&lt;br /&gt;
&lt;br /&gt;
=== Shared UI ===&lt;br /&gt;
&lt;br /&gt;
Frameworks such as Flutter attempt to share both user interface and business logic.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared UI&lt;br /&gt;
Shared Logic&lt;br /&gt;
Shared Data Layer&lt;br /&gt;
&lt;br /&gt;
Android&lt;br /&gt;
iOS&lt;br /&gt;
Desktop&lt;br /&gt;
Web&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Shared Logic ===&lt;br /&gt;
&lt;br /&gt;
Frameworks such as Kotlin Multiplatform primarily share application logic while retaining native user interfaces.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared Logic&lt;br /&gt;
    Authentication&lt;br /&gt;
    Business Rules&lt;br /&gt;
    Data Access&lt;br /&gt;
&lt;br /&gt;
Native Android UI&lt;br /&gt;
&lt;br /&gt;
Native Apple UI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Hybrid Approaches ===&lt;br /&gt;
&lt;br /&gt;
Many organisations adopt a mixed strategy.&lt;br /&gt;
&lt;br /&gt;
Some components remain native.&lt;br /&gt;
&lt;br /&gt;
Others are shared.&lt;br /&gt;
&lt;br /&gt;
These solutions often seek balance rather than purity.&lt;br /&gt;
&lt;br /&gt;
== Cost Considerations ==&lt;br /&gt;
&lt;br /&gt;
Technology decisions have financial consequences.&lt;br /&gt;
&lt;br /&gt;
=== Development Costs ===&lt;br /&gt;
&lt;br /&gt;
Cross-platform approaches typically reduce initial implementation effort.&lt;br /&gt;
&lt;br /&gt;
=== Maintenance Costs ===&lt;br /&gt;
&lt;br /&gt;
Shared code can reduce the cost of long-term support.&lt;br /&gt;
&lt;br /&gt;
=== Training Costs ===&lt;br /&gt;
&lt;br /&gt;
Adopting unfamiliar frameworks introduces learning curves and operational risk.&lt;br /&gt;
&lt;br /&gt;
These costs should be considered during planning.&lt;br /&gt;
&lt;br /&gt;
== Practical Guidance ==&lt;br /&gt;
&lt;br /&gt;
=== Native Development Makes Sense When ===&lt;br /&gt;
&lt;br /&gt;
* Maximum performance is required&lt;br /&gt;
* Deep platform integration is essential&lt;br /&gt;
* Platform-specific experiences provide competitive advantage&lt;br /&gt;
* Sufficient specialist skills are available&lt;br /&gt;
&lt;br /&gt;
=== Cross-Platform Development Makes Sense When ===&lt;br /&gt;
&lt;br /&gt;
* Rapid delivery is important&lt;br /&gt;
* Multiple platforms must be supported&lt;br /&gt;
* Shared development effort is desirable&lt;br /&gt;
* Consistency between platforms is important&lt;br /&gt;
&lt;br /&gt;
=== Either Approach Can Work When ===&lt;br /&gt;
&lt;br /&gt;
* Requirements are relatively straightforward&lt;br /&gt;
* Organisational constraints matter more than technical limitations&lt;br /&gt;
* The team has strong expertise in the chosen technology&lt;br /&gt;
&lt;br /&gt;
== Common Mistakes ==&lt;br /&gt;
&lt;br /&gt;
* Choosing technology based on hype&lt;br /&gt;
* Ignoring operational costs&lt;br /&gt;
* Underestimating maintenance effort&lt;br /&gt;
* Assuming &amp;quot;write once, run anywhere&amp;quot; is literal&lt;br /&gt;
* Optimising for problems that do not exist&lt;br /&gt;
&lt;br /&gt;
The best architecture is not always the most technically sophisticated architecture.&lt;br /&gt;
&lt;br /&gt;
Often it is simply the architecture that solves the actual business problem.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The debate between native and cross-platform mobile development is often presented as a contest with a single winner.&lt;br /&gt;
&lt;br /&gt;
In practice, both approaches are mature, capable, and widely used.&lt;br /&gt;
&lt;br /&gt;
Native development prioritises platform capability, integration, and control.&lt;br /&gt;
&lt;br /&gt;
Cross-platform development prioritises efficiency, consistency, and reduced duplication.&lt;br /&gt;
&lt;br /&gt;
Neither is universally superior.&lt;br /&gt;
&lt;br /&gt;
Successful architects understand the trade-offs involved and select the approach that aligns with the application&#039;s requirements, the organisation&#039;s capabilities, and the long-term maintenance strategy.&lt;br /&gt;
&lt;br /&gt;
Good developers often ask:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Which technology is best?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Good architects ask:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Which compromise best fits the problem we are trying to solve?&amp;quot;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Mobile_Programming_Languages_and_Frameworks&amp;diff=453</id>
		<title>Mobile Programming Languages and Frameworks</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Mobile_Programming_Languages_and_Frameworks&amp;diff=453"/>
		<updated>2026-07-13T07:45:22Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Mobile application development has evolved significantly since the early days of smartphones. What was once divided into separate Android and iPhone development teams now includes a diverse ecosystem of native, cross-platform, and web-based technologies. This article examines the major mobile programming languages and frameworks in use today, explores the architectural approaches they represent, and discusses the trade-offs involved in selecting a platform...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Mobile application development has evolved significantly since the early days of smartphones. What was once divided into separate Android and iPhone development teams now includes a diverse ecosystem of native, cross-platform, and web-based technologies. This article examines the major mobile programming languages and frameworks in use today, explores the architectural approaches they represent, and discusses the trade-offs involved in selecting a platform for new projects.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
In the early years of smartphone development, organisations typically built separate applications for each platform.&lt;br /&gt;
&lt;br /&gt;
Android applications were commonly developed using Java, while iPhone applications were written in Objective-C. Each platform required its own specialist developers, tooling, testing procedures, and release processes.&lt;br /&gt;
&lt;br /&gt;
As mobile applications became increasingly important to businesses, the cost of maintaining multiple codebases grew significantly. This led to the emergence of technologies designed to share code, reduce duplication, and accelerate development.&lt;br /&gt;
&lt;br /&gt;
The result is a modern mobile ecosystem where organisations must choose not only a programming language, but also an architectural strategy.&lt;br /&gt;
&lt;br /&gt;
The question is no longer:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Which language should we use?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It is often:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;How much of our application should be shared across platforms?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== The Evolution of Mobile Development ==&lt;br /&gt;
&lt;br /&gt;
=== First Generation: Platform-Specific Applications ===&lt;br /&gt;
&lt;br /&gt;
The earliest mobile applications were entirely platform-specific.&lt;br /&gt;
&lt;br /&gt;
Each operating system exposed its own APIs, user interface controls, development tools, and design standards.&lt;br /&gt;
&lt;br /&gt;
This approach provided the best possible integration with the device and operating system but required duplicate development effort.&lt;br /&gt;
&lt;br /&gt;
Today&#039;s native development model remains conceptually similar, although the languages and frameworks have changed substantially.&lt;br /&gt;
&lt;br /&gt;
=== Second Generation: Shared Business Logic ===&lt;br /&gt;
&lt;br /&gt;
As applications became more sophisticated, developers began seeking ways to share common components such as:&lt;br /&gt;
&lt;br /&gt;
* Networking&lt;br /&gt;
* Authentication&lt;br /&gt;
* Data processing&lt;br /&gt;
* Business rules&lt;br /&gt;
* API integrations&lt;br /&gt;
&lt;br /&gt;
This led to architectures that retain a native user interface while sharing underlying application logic.&lt;br /&gt;
&lt;br /&gt;
=== Third Generation: Shared User Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Frameworks later emerged that allowed both logic and user interface components to be shared across platforms.&lt;br /&gt;
&lt;br /&gt;
This significantly reduced development effort but introduced new considerations around performance, platform integration, and maintenance.&lt;br /&gt;
&lt;br /&gt;
=== Fourth Generation: Mobile as Part of a Unified Platform ===&lt;br /&gt;
&lt;br /&gt;
Modern application development increasingly treats mobile devices as one endpoint among many.&lt;br /&gt;
&lt;br /&gt;
Applications may now target:&lt;br /&gt;
&lt;br /&gt;
* Phones&lt;br /&gt;
* Tablets&lt;br /&gt;
* Desktops&lt;br /&gt;
* Web browsers&lt;br /&gt;
* Smart TVs&lt;br /&gt;
* Wearables&lt;br /&gt;
* Embedded devices&lt;br /&gt;
&lt;br /&gt;
This has driven demand for technologies capable of supporting multiple environments from a single codebase.&lt;br /&gt;
&lt;br /&gt;
== Native Mobile Development ==&lt;br /&gt;
&lt;br /&gt;
=== Swift ===&lt;br /&gt;
&lt;br /&gt;
Swift is Apple&#039;s modern programming language for developing applications on:&lt;br /&gt;
&lt;br /&gt;
* iOS&lt;br /&gt;
* iPadOS&lt;br /&gt;
* macOS&lt;br /&gt;
* watchOS&lt;br /&gt;
* visionOS&lt;br /&gt;
&lt;br /&gt;
Swift replaced Objective-C as Apple&#039;s preferred development language and is typically used alongside SwiftUI for modern user interface development.&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Excellent performance&lt;br /&gt;
* Immediate access to new Apple features&lt;br /&gt;
* Strong security model&lt;br /&gt;
* Consistent tooling&lt;br /&gt;
* High-quality user experience&lt;br /&gt;
&lt;br /&gt;
==== Considerations ====&lt;br /&gt;
&lt;br /&gt;
* Limited to Apple platforms&lt;br /&gt;
* Separate Android development required&lt;br /&gt;
* Requires familiarity with Apple&#039;s ecosystem&lt;br /&gt;
&lt;br /&gt;
=== Kotlin ===&lt;br /&gt;
&lt;br /&gt;
Kotlin is Google&#039;s preferred language for Android application development.&lt;br /&gt;
&lt;br /&gt;
Designed as a modern alternative to Java, it offers improved language features while remaining fully interoperable with existing Java libraries.&lt;br /&gt;
&lt;br /&gt;
Modern Android development is typically performed using Kotlin alongside Jetpack Compose.&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Official Android support&lt;br /&gt;
* Mature ecosystem&lt;br /&gt;
* Excellent performance&lt;br /&gt;
* Strong tooling&lt;br /&gt;
* Seamless integration with Android APIs&lt;br /&gt;
&lt;br /&gt;
==== Considerations ====&lt;br /&gt;
&lt;br /&gt;
* Primarily Android-focused&lt;br /&gt;
* Native iOS support requires additional technologies&lt;br /&gt;
&lt;br /&gt;
== Cross-Platform Development ==&lt;br /&gt;
&lt;br /&gt;
Cross-platform development attempts to reduce duplication by sharing code between platforms.&lt;br /&gt;
&lt;br /&gt;
Different frameworks achieve this in different ways.&lt;br /&gt;
&lt;br /&gt;
=== Flutter ===&lt;br /&gt;
&lt;br /&gt;
Flutter is a cross-platform framework developed by Google using the Dart programming language.&lt;br /&gt;
&lt;br /&gt;
Rather than using native user interface controls, Flutter renders its own interface using a high-performance graphics engine.&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Consistent user experience&lt;br /&gt;
* Single codebase&lt;br /&gt;
* Fast development cycle&lt;br /&gt;
* Excellent tooling&lt;br /&gt;
* Strong support for custom interfaces&lt;br /&gt;
&lt;br /&gt;
==== Considerations ====&lt;br /&gt;
&lt;br /&gt;
* Larger application size&lt;br /&gt;
* Additional abstraction layer&lt;br /&gt;
* New platform features may require framework updates&lt;br /&gt;
&lt;br /&gt;
=== React Native ===&lt;br /&gt;
&lt;br /&gt;
React Native allows applications to be built using JavaScript or TypeScript.&lt;br /&gt;
&lt;br /&gt;
It is particularly attractive to organisations with existing web development teams.&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Large developer ecosystem&lt;br /&gt;
* Shared skills with web development&lt;br /&gt;
* Extensive third-party libraries&lt;br /&gt;
* Rapid development&lt;br /&gt;
&lt;br /&gt;
==== Considerations ====&lt;br /&gt;
&lt;br /&gt;
* Dependency management complexity&lt;br /&gt;
* Platform-specific code often still required&lt;br /&gt;
* Ecosystem changes can be frequent&lt;br /&gt;
&lt;br /&gt;
=== .NET MAUI ===&lt;br /&gt;
&lt;br /&gt;
.NET MAUI is Microsoft&#039;s modern cross-platform application framework.&lt;br /&gt;
&lt;br /&gt;
Applications are developed using C# and .NET technologies.&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Familiar to Microsoft developers&lt;br /&gt;
* Strong enterprise tooling&lt;br /&gt;
* Shared codebase&lt;br /&gt;
* Integration with Microsoft technologies&lt;br /&gt;
&lt;br /&gt;
==== Considerations ====&lt;br /&gt;
&lt;br /&gt;
* Smaller ecosystem than some competitors&lt;br /&gt;
* Less common in consumer application development&lt;br /&gt;
&lt;br /&gt;
=== Kotlin Multiplatform ===&lt;br /&gt;
&lt;br /&gt;
Kotlin Multiplatform takes a different approach.&lt;br /&gt;
&lt;br /&gt;
Instead of attempting to make everything cross-platform, it focuses primarily on sharing application logic while retaining native platform experiences.&lt;br /&gt;
&lt;br /&gt;
==== Advantages ====&lt;br /&gt;
&lt;br /&gt;
* Native user interfaces&lt;br /&gt;
* Shared business logic&lt;br /&gt;
* Excellent performance&lt;br /&gt;
* Reduced code duplication&lt;br /&gt;
&lt;br /&gt;
==== Considerations ====&lt;br /&gt;
&lt;br /&gt;
* More complex architecture&lt;br /&gt;
* Smaller talent pool&lt;br /&gt;
* Additional learning curve&lt;br /&gt;
&lt;br /&gt;
== Architectural Approaches ==&lt;br /&gt;
&lt;br /&gt;
=== The Two Vehicle Model ===&lt;br /&gt;
&lt;br /&gt;
Native development can be visualised as building two separate vehicles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Android Vehicle&lt;br /&gt;
    Engine&lt;br /&gt;
    Controls&lt;br /&gt;
    Dashboard&lt;br /&gt;
&lt;br /&gt;
Apple Vehicle&lt;br /&gt;
    Engine&lt;br /&gt;
    Controls&lt;br /&gt;
    Dashboard&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both vehicles perform similar tasks but are built independently.&lt;br /&gt;
&lt;br /&gt;
This provides maximum flexibility at the cost of increased effort.&lt;br /&gt;
&lt;br /&gt;
=== The Shared Chassis Model ===&lt;br /&gt;
&lt;br /&gt;
Cross-platform development resembles a shared chassis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared Chassis&lt;br /&gt;
    Business Logic&lt;br /&gt;
    Networking&lt;br /&gt;
    Data Processing&lt;br /&gt;
&lt;br /&gt;
Platform Layer&lt;br /&gt;
    Android Presentation&lt;br /&gt;
&lt;br /&gt;
Platform Layer&lt;br /&gt;
    Apple Presentation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Much of the underlying system is reused while preserving platform-specific experiences.&lt;br /&gt;
&lt;br /&gt;
=== The Single Vehicle Model ===&lt;br /&gt;
&lt;br /&gt;
Frameworks such as Flutter often resemble a single vehicle designed to operate on multiple roads.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Shared Application&lt;br /&gt;
    UI&lt;br /&gt;
    Logic&lt;br /&gt;
    Data&lt;br /&gt;
&lt;br /&gt;
Runs On:&lt;br /&gt;
    Android&lt;br /&gt;
    iOS&lt;br /&gt;
    Desktop&lt;br /&gt;
    Web&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This maximises code reuse but may sacrifice some platform-specific behaviour.&lt;br /&gt;
&lt;br /&gt;
== Performance Considerations ==&lt;br /&gt;
&lt;br /&gt;
Performance discussions often generate more heat than light.&lt;br /&gt;
&lt;br /&gt;
A common misconception is that cross-platform applications are inherently slow.&lt;br /&gt;
&lt;br /&gt;
In practice, modern frameworks are often capable of delivering excellent user experiences for most business applications.&lt;br /&gt;
&lt;br /&gt;
Performance should be evaluated according to actual requirements.&lt;br /&gt;
&lt;br /&gt;
Important considerations include:&lt;br /&gt;
&lt;br /&gt;
* Startup time&lt;br /&gt;
* Memory consumption&lt;br /&gt;
* Battery usage&lt;br /&gt;
* Rendering performance&lt;br /&gt;
* Network efficiency&lt;br /&gt;
* Access to device-specific APIs&lt;br /&gt;
&lt;br /&gt;
For many applications, maintainability and development speed have a greater impact on overall project success than marginal performance differences.&lt;br /&gt;
&lt;br /&gt;
== Skills and Team Considerations ==&lt;br /&gt;
&lt;br /&gt;
Technology selection should align with organisational capabilities.&lt;br /&gt;
&lt;br /&gt;
A highly capable team using a familiar technology is often more productive than a team using a theoretically superior framework they do not fully understand.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* JavaScript-heavy organisations adopting React Native&lt;br /&gt;
* Microsoft-focused organisations adopting .NET MAUI&lt;br /&gt;
* Android-focused teams adopting Kotlin Multiplatform&lt;br /&gt;
* Product-focused startups choosing Flutter&lt;br /&gt;
&lt;br /&gt;
The best technology choice is frequently determined by available skills rather than technical specifications alone.&lt;br /&gt;
&lt;br /&gt;
== Common Misconceptions ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Write Once, Run Anywhere&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
No framework entirely eliminates platform differences.&lt;br /&gt;
&lt;br /&gt;
Devices vary.&lt;br /&gt;
&lt;br /&gt;
Operating systems vary.&lt;br /&gt;
&lt;br /&gt;
User expectations vary.&lt;br /&gt;
&lt;br /&gt;
Cross-platform development reduces duplication but does not remove platform-specific considerations.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Native Is Always Better&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
Native development offers advantages, but those advantages are not always relevant.&lt;br /&gt;
&lt;br /&gt;
A line-of-business application used by a hundred employees has different requirements from a global social media platform.&lt;br /&gt;
&lt;br /&gt;
Architecture should be driven by business goals rather than marketing claims.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;One Framework Will Win&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
The mobile ecosystem has matured.&lt;br /&gt;
&lt;br /&gt;
Different technologies solve different problems.&lt;br /&gt;
&lt;br /&gt;
The industry increasingly supports multiple successful approaches rather than a single dominant solution.&lt;br /&gt;
&lt;br /&gt;
== Design and Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
When selecting a mobile technology, consideration should be given to:&lt;br /&gt;
&lt;br /&gt;
* Team capabilities&lt;br /&gt;
* Long-term maintainability&lt;br /&gt;
* Vendor dependency&lt;br /&gt;
* Future roadmap requirements&lt;br /&gt;
* Security requirements&lt;br /&gt;
* Offline capabilities&lt;br /&gt;
* Integration complexity&lt;br /&gt;
* Deployment targets&lt;br /&gt;
&lt;br /&gt;
Projects often fail not because the chosen technology was incapable, but because organisational realities were ignored during planning.&lt;br /&gt;
&lt;br /&gt;
== Practical Guidance ==&lt;br /&gt;
&lt;br /&gt;
=== Choose Swift When ===&lt;br /&gt;
&lt;br /&gt;
* Apple devices are the primary target&lt;br /&gt;
* Deep platform integration is required&lt;br /&gt;
* User experience is a critical differentiator&lt;br /&gt;
&lt;br /&gt;
=== Choose Kotlin When ===&lt;br /&gt;
&lt;br /&gt;
* Android is the primary platform&lt;br /&gt;
* Full Android capability is required&lt;br /&gt;
* Existing Android expertise exists&lt;br /&gt;
&lt;br /&gt;
=== Choose Flutter When ===&lt;br /&gt;
&lt;br /&gt;
* Rapid cross-platform delivery is important&lt;br /&gt;
* Consistent visual design is required&lt;br /&gt;
* Development efficiency is a priority&lt;br /&gt;
&lt;br /&gt;
=== Choose React Native When ===&lt;br /&gt;
&lt;br /&gt;
* Existing React expertise exists&lt;br /&gt;
* Web and mobile teams overlap&lt;br /&gt;
* Fast delivery is required&lt;br /&gt;
&lt;br /&gt;
=== Choose .NET MAUI When ===&lt;br /&gt;
&lt;br /&gt;
* The organisation is heavily invested in Microsoft technologies&lt;br /&gt;
* Existing .NET developers are available&lt;br /&gt;
* Enterprise integration is important&lt;br /&gt;
&lt;br /&gt;
=== Choose Kotlin Multiplatform When ===&lt;br /&gt;
&lt;br /&gt;
* Native experiences are desired&lt;br /&gt;
* Business logic can be shared&lt;br /&gt;
* Long-term maintainability is a priority&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Mobile development is no longer a simple choice between Android and iPhone development.&lt;br /&gt;
&lt;br /&gt;
Modern organisations can choose from a range of architectural approaches that balance performance, productivity, maintainability, and platform integration.&lt;br /&gt;
&lt;br /&gt;
Every framework represents a compromise.&lt;br /&gt;
&lt;br /&gt;
Native platforms maximise control.&lt;br /&gt;
&lt;br /&gt;
Cross-platform frameworks maximise code sharing.&lt;br /&gt;
&lt;br /&gt;
Shared-logic architectures attempt to balance both.&lt;br /&gt;
&lt;br /&gt;
Understanding these trade-offs is more valuable than identifying a single &amp;quot;best&amp;quot; technology.&lt;br /&gt;
&lt;br /&gt;
The most successful mobile projects are rarely the result of selecting the newest framework.&lt;br /&gt;
&lt;br /&gt;
They are usually the result of selecting the framework that best aligns with the skills, objectives, and long-term strategy of the organisation building it.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=From_ISA_Server_to_Modern_Reverse_Proxies:_The_Evolution_of_Microsoft%27s_Application_Publishing_Solutions&amp;diff=452</id>
		<title>From ISA Server to Modern Reverse Proxies: The Evolution of Microsoft&#039;s Application Publishing Solutions</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=From_ISA_Server_to_Modern_Reverse_Proxies:_The_Evolution_of_Microsoft%27s_Application_Publishing_Solutions&amp;diff=452"/>
		<updated>2026-07-12T20:09:26Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; For over a decade, Microsoft&amp;#039;s Internet Security and Acceleration (ISA) Server and later Forefront Threat Management Gateway (TMG) were widely deployed at the edge of corporate networks. They provided firewalling, reverse proxy services, web publishing, VPN access and application-aware security features that were particularly popular in Microsoft-centric environments.  Although TMG reached end-of-life many years ago, the architectural concepts behind it re...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
For over a decade, Microsoft&#039;s Internet Security and Acceleration (ISA) Server and later Forefront Threat Management Gateway (TMG) were widely deployed at the edge of corporate networks. They provided firewalling, reverse proxy services, web publishing, VPN access and application-aware security features that were particularly popular in Microsoft-centric environments.&lt;br /&gt;
&lt;br /&gt;
Although TMG reached end-of-life many years ago, the architectural concepts behind it remain highly relevant. Modern reverse proxies, identity-aware gateways and Zero Trust access solutions have inherited many of the responsibilities once handled by ISA and TMG.&lt;br /&gt;
&lt;br /&gt;
This article examines the history, evolution and eventual retirement of Microsoft&#039;s application publishing platforms, and explores the technologies that have replaced them.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Every organisation faces the same challenge:&lt;br /&gt;
&lt;br /&gt;
How can internal applications be made accessible to external users without exposing the internal network to unnecessary risk?&lt;br /&gt;
&lt;br /&gt;
Today, administrators may reach for products such as Nginx, HAProxy, Cloudflare Tunnel, Web Application Proxy or Microsoft Entra Application Proxy. Twenty years ago, however, the answer was often Microsoft&#039;s Internet Security and Acceleration Server.&lt;br /&gt;
&lt;br /&gt;
ISA Server and its successor, Forefront Threat Management Gateway (TMG), became staples of Microsoft infrastructure environments. They were particularly popular for publishing Exchange, SharePoint, Outlook Web Access, Remote Desktop Services and custom IIS applications.&lt;br /&gt;
&lt;br /&gt;
While these products have long since disappeared, the problems they solved have not.&lt;br /&gt;
&lt;br /&gt;
== The Problem ISA Was Designed to Solve ==&lt;br /&gt;
&lt;br /&gt;
=== The Early Internet Era ===&lt;br /&gt;
&lt;br /&gt;
During the late 1990s and early 2000s, organisations increasingly needed to expose services to the Internet.&lt;br /&gt;
&lt;br /&gt;
Common examples included:&lt;br /&gt;
&lt;br /&gt;
* Corporate websites&lt;br /&gt;
* Webmail systems&lt;br /&gt;
* Partner portals&lt;br /&gt;
* Remote access solutions&lt;br /&gt;
* Intranet applications&lt;br /&gt;
&lt;br /&gt;
At the same time, security concerns were growing rapidly.&lt;br /&gt;
&lt;br /&gt;
Administrators needed a method of exposing selected services without placing internal servers directly on the Internet.&lt;br /&gt;
&lt;br /&gt;
=== Beyond Traditional Firewalls ===&lt;br /&gt;
&lt;br /&gt;
Traditional packet-filtering firewalls could permit or deny network traffic based on:&lt;br /&gt;
&lt;br /&gt;
* Source address&lt;br /&gt;
* Destination address&lt;br /&gt;
* Port number&lt;br /&gt;
* Protocol&lt;br /&gt;
&lt;br /&gt;
However, they lacked an understanding of the applications themselves.&lt;br /&gt;
&lt;br /&gt;
Web traffic is not simply TCP port 80 or 443. Modern applications involve:&lt;br /&gt;
&lt;br /&gt;
* Authentication&lt;br /&gt;
* Encrypted communications&lt;br /&gt;
* Session management&lt;br /&gt;
* URL routing&lt;br /&gt;
* Identity awareness&lt;br /&gt;
&lt;br /&gt;
A new type of security device was required—one that understood applications rather than merely packets.&lt;br /&gt;
&lt;br /&gt;
== Microsoft Proxy Server ==&lt;br /&gt;
&lt;br /&gt;
=== Origins ===&lt;br /&gt;
&lt;br /&gt;
Before ISA Server existed, Microsoft offered &#039;&#039;Microsoft Proxy Server&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Released in the late 1990s, Proxy Server primarily focused on:&lt;br /&gt;
&lt;br /&gt;
* Web caching&lt;br /&gt;
* Internet access control&lt;br /&gt;
* Basic proxy services&lt;br /&gt;
&lt;br /&gt;
At the time, Internet bandwidth was expensive and often limited.&lt;br /&gt;
&lt;br /&gt;
Caching frequently accessed web content significantly reduced external bandwidth usage.&lt;br /&gt;
&lt;br /&gt;
=== Capabilities ===&lt;br /&gt;
&lt;br /&gt;
Microsoft Proxy Server offered:&lt;br /&gt;
&lt;br /&gt;
* Forward proxy services&lt;br /&gt;
* Web caching&lt;br /&gt;
* User access control&lt;br /&gt;
* Reporting and logging&lt;br /&gt;
&lt;br /&gt;
For many organisations, this was their first exposure to proxy-based security architectures.&lt;br /&gt;
&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
As web applications became increasingly complex, Proxy Server struggled to keep pace.&lt;br /&gt;
&lt;br /&gt;
Administrators required:&lt;br /&gt;
&lt;br /&gt;
* Improved security controls&lt;br /&gt;
* Reverse proxy functionality&lt;br /&gt;
* VPN integration&lt;br /&gt;
* Application-aware publishing&lt;br /&gt;
&lt;br /&gt;
The result was ISA Server.&lt;br /&gt;
&lt;br /&gt;
== Internet Security and Acceleration (ISA) Server ==&lt;br /&gt;
&lt;br /&gt;
=== ISA Server 2000 ===&lt;br /&gt;
&lt;br /&gt;
Released as part of Microsoft&#039;s BackOffice family, ISA Server combined several previously separate technologies.&lt;br /&gt;
&lt;br /&gt;
It provided:&lt;br /&gt;
&lt;br /&gt;
* Firewall functionality&lt;br /&gt;
* Proxy services&lt;br /&gt;
* Web caching&lt;br /&gt;
* VPN services&lt;br /&gt;
* Application publishing&lt;br /&gt;
&lt;br /&gt;
For many Microsoft-focused organisations, it became the primary Internet gateway.&lt;br /&gt;
&lt;br /&gt;
=== ISA Server 2004 ===&lt;br /&gt;
&lt;br /&gt;
ISA Server 2004 represented a major architectural improvement.&lt;br /&gt;
&lt;br /&gt;
New features included:&lt;br /&gt;
&lt;br /&gt;
* Enhanced reverse proxy capabilities&lt;br /&gt;
* SSL bridging&lt;br /&gt;
* Improved authentication options&lt;br /&gt;
* Better logging and monitoring&lt;br /&gt;
* Granular publishing rules&lt;br /&gt;
&lt;br /&gt;
This version significantly improved Microsoft&#039;s application publishing story.&lt;br /&gt;
&lt;br /&gt;
=== ISA Server 2006 ===&lt;br /&gt;
&lt;br /&gt;
ISA Server 2006 refined the platform further.&lt;br /&gt;
&lt;br /&gt;
It became especially popular for:&lt;br /&gt;
&lt;br /&gt;
* Outlook Web Access&lt;br /&gt;
* Exchange publishing&lt;br /&gt;
* SharePoint publishing&lt;br /&gt;
* Remote access services&lt;br /&gt;
&lt;br /&gt;
The management interface was widely praised for its clarity and consistency with other Microsoft management tools.&lt;br /&gt;
&lt;br /&gt;
=== Why ISA Became So Popular ===&lt;br /&gt;
&lt;br /&gt;
Several characteristics set ISA apart from competing products.&lt;br /&gt;
&lt;br /&gt;
==== Exchange Publishing ====&lt;br /&gt;
&lt;br /&gt;
ISA understood Microsoft Exchange exceptionally well.&lt;br /&gt;
&lt;br /&gt;
Publishing Outlook Web Access became largely wizard-driven, reducing deployment complexity.&lt;br /&gt;
&lt;br /&gt;
==== SSL Bridging ====&lt;br /&gt;
&lt;br /&gt;
ISA could terminate, inspect and re-establish SSL connections.&lt;br /&gt;
&lt;br /&gt;
This allowed:&lt;br /&gt;
&lt;br /&gt;
* Security inspection&lt;br /&gt;
* Authentication&lt;br /&gt;
* Traffic filtering&lt;br /&gt;
&lt;br /&gt;
without exposing backend systems directly to the Internet.&lt;br /&gt;
&lt;br /&gt;
==== Integrated Authentication ====&lt;br /&gt;
&lt;br /&gt;
ISA offered tight integration with:&lt;br /&gt;
&lt;br /&gt;
* Active Directory&lt;br /&gt;
* Forms-Based Authentication&lt;br /&gt;
* Windows Authentication&lt;br /&gt;
&lt;br /&gt;
Identity was becoming increasingly important.&lt;br /&gt;
&lt;br /&gt;
==== Application Awareness ====&lt;br /&gt;
&lt;br /&gt;
Unlike traditional firewalls, ISA understood HTTP and HTTPS traffic.&lt;br /&gt;
&lt;br /&gt;
This enabled more intelligent publishing and security decisions.&lt;br /&gt;
&lt;br /&gt;
== Forefront Threat Management Gateway (TMG) ==&lt;br /&gt;
&lt;br /&gt;
=== Microsoft&#039;s Security Vision ===&lt;br /&gt;
&lt;br /&gt;
During the late 2000s Microsoft reorganised numerous security products under the &#039;&#039;Forefront&#039;&#039; brand.&lt;br /&gt;
&lt;br /&gt;
ISA Server evolved into:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Forefront Threat Management Gateway (TMG)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
TMG retained ISA&#039;s strengths while adding additional security capabilities.&lt;br /&gt;
&lt;br /&gt;
=== New Features ===&lt;br /&gt;
&lt;br /&gt;
TMG introduced:&lt;br /&gt;
&lt;br /&gt;
* Enhanced malware inspection&lt;br /&gt;
* URL filtering&lt;br /&gt;
* Improved reporting&lt;br /&gt;
* Network inspection services&lt;br /&gt;
* Better HTTPS handling&lt;br /&gt;
&lt;br /&gt;
Microsoft positioned TMG as a comprehensive edge security platform.&lt;br /&gt;
&lt;br /&gt;
=== Strengths of TMG ===&lt;br /&gt;
&lt;br /&gt;
TMG remained particularly valuable in environments running:&lt;br /&gt;
&lt;br /&gt;
* Exchange Server&lt;br /&gt;
* SharePoint Server&lt;br /&gt;
* Office Communications Server&lt;br /&gt;
* Lync Server&lt;br /&gt;
* IIS Web Applications&lt;br /&gt;
&lt;br /&gt;
Templates and publishing wizards simplified deployment considerably.&lt;br /&gt;
&lt;br /&gt;
=== Why Administrators Loved It ===&lt;br /&gt;
&lt;br /&gt;
TMG occupied a unique position within many infrastructures.&lt;br /&gt;
&lt;br /&gt;
It combined:&lt;br /&gt;
&lt;br /&gt;
* Firewall functionality&lt;br /&gt;
* Reverse proxying&lt;br /&gt;
* Authentication&lt;br /&gt;
* VPN services&lt;br /&gt;
* Application publishing&lt;br /&gt;
&lt;br /&gt;
all within a single management console.&lt;br /&gt;
&lt;br /&gt;
For administrators already comfortable with Windows Server and MMC-based tools, the learning curve was remarkably low.&lt;br /&gt;
&lt;br /&gt;
== The Beginning of the End ==&lt;br /&gt;
&lt;br /&gt;
=== Changing Industry Trends ===&lt;br /&gt;
&lt;br /&gt;
During the early 2010s, the industry began shifting toward:&lt;br /&gt;
&lt;br /&gt;
* Cloud services&lt;br /&gt;
* Software-as-a-Service&lt;br /&gt;
* Federated identity&lt;br /&gt;
* Mobile access&lt;br /&gt;
* Zero Trust principles&lt;br /&gt;
&lt;br /&gt;
Microsoft&#039;s strategic focus increasingly moved towards Azure and Microsoft 365.&lt;br /&gt;
&lt;br /&gt;
=== The Forefront Retrenchment ===&lt;br /&gt;
&lt;br /&gt;
Over time, several Forefront products were discontinued or repositioned.&lt;br /&gt;
&lt;br /&gt;
TMG&#039;s development effectively ceased as Microsoft&#039;s security investments moved elsewhere.&lt;br /&gt;
&lt;br /&gt;
=== End of Life ===&lt;br /&gt;
&lt;br /&gt;
Mainstream support ended in 2015.&lt;br /&gt;
&lt;br /&gt;
Many organisations continued running TMG for years afterwards, often because it &amp;quot;just worked.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, unsupported Internet-facing infrastructure eventually becomes a security liability.&lt;br /&gt;
&lt;br /&gt;
== Life After TMG ==&lt;br /&gt;
&lt;br /&gt;
=== Web Application Proxy (WAP) ===&lt;br /&gt;
&lt;br /&gt;
Microsoft introduced Web Application Proxy as part of Windows Server 2012 R2.&lt;br /&gt;
&lt;br /&gt;
Rather than replacing every feature of TMG, WAP focused specifically on:&lt;br /&gt;
&lt;br /&gt;
* Reverse proxying&lt;br /&gt;
* Application publishing&lt;br /&gt;
* AD FS integration&lt;br /&gt;
* Authentication&lt;br /&gt;
&lt;br /&gt;
It represented a much narrower scope than TMG.&lt;br /&gt;
&lt;br /&gt;
==== Strengths ====&lt;br /&gt;
&lt;br /&gt;
* Microsoft-supported&lt;br /&gt;
* Integrated with AD FS&lt;br /&gt;
* Suitable for Exchange and SharePoint publishing&lt;br /&gt;
* Familiar Windows administration experience&lt;br /&gt;
&lt;br /&gt;
==== Limitations ====&lt;br /&gt;
&lt;br /&gt;
WAP is not a firewall.&lt;br /&gt;
&lt;br /&gt;
It lacks many features formerly provided by ISA and TMG, including:&lt;br /&gt;
&lt;br /&gt;
* URL filtering&lt;br /&gt;
* Malware inspection&lt;br /&gt;
* Forward proxy services&lt;br /&gt;
* Comprehensive edge security functions&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Entra Application Proxy ===&lt;br /&gt;
&lt;br /&gt;
Microsoft&#039;s modern replacement strategy revolves around identity-centric access.&lt;br /&gt;
&lt;br /&gt;
Entra Application Proxy enables internal applications to be securely published using outbound connectors.&lt;br /&gt;
&lt;br /&gt;
Advantages include:&lt;br /&gt;
&lt;br /&gt;
* No inbound firewall ports&lt;br /&gt;
* Multi-factor authentication&lt;br /&gt;
* Conditional Access&lt;br /&gt;
* Identity-aware access control&lt;br /&gt;
* Zero Trust alignment&lt;br /&gt;
&lt;br /&gt;
This reflects a significant shift in architectural thinking.&lt;br /&gt;
&lt;br /&gt;
== Modern Alternatives ==&lt;br /&gt;
&lt;br /&gt;
=== Nginx ===&lt;br /&gt;
&lt;br /&gt;
Nginx has become one of the most widely deployed reverse proxies worldwide.&lt;br /&gt;
&lt;br /&gt;
Common uses include:&lt;br /&gt;
&lt;br /&gt;
* SSL termination&lt;br /&gt;
* Load balancing&lt;br /&gt;
* API gateways&lt;br /&gt;
* Application publishing&lt;br /&gt;
&lt;br /&gt;
For many organisations, Nginx now fulfils the reverse-proxy role previously occupied by TMG.&lt;br /&gt;
&lt;br /&gt;
=== HAProxy ===&lt;br /&gt;
&lt;br /&gt;
HAProxy is renowned for:&lt;br /&gt;
&lt;br /&gt;
* Performance&lt;br /&gt;
* Reliability&lt;br /&gt;
* Layer-7 routing&lt;br /&gt;
* Load balancing&lt;br /&gt;
&lt;br /&gt;
It is frequently used in enterprise and cloud-scale environments.&lt;br /&gt;
&lt;br /&gt;
=== Apache HTTP Server ===&lt;br /&gt;
&lt;br /&gt;
Apache remains a capable reverse-proxy solution through modules such as:&lt;br /&gt;
&lt;br /&gt;
* mod_proxy&lt;br /&gt;
* mod_ssl&lt;br /&gt;
* mod_rewrite&lt;br /&gt;
&lt;br /&gt;
=== Kemp LoadMaster ===&lt;br /&gt;
&lt;br /&gt;
Kemp LoadMaster became a particularly popular choice among former TMG administrators.&lt;br /&gt;
&lt;br /&gt;
Features include:&lt;br /&gt;
&lt;br /&gt;
* Reverse proxying&lt;br /&gt;
* Authentication integration&lt;br /&gt;
* SSL offloading&lt;br /&gt;
* Load balancing&lt;br /&gt;
* Application publishing&lt;br /&gt;
&lt;br /&gt;
It is especially strong within Microsoft environments.&lt;br /&gt;
&lt;br /&gt;
=== F5 BIG-IP ===&lt;br /&gt;
&lt;br /&gt;
F5 appliances provide enterprise-grade:&lt;br /&gt;
&lt;br /&gt;
* Reverse proxy services&lt;br /&gt;
* Web application firewall capabilities&lt;br /&gt;
* Authentication services&lt;br /&gt;
* Traffic management&lt;br /&gt;
&lt;br /&gt;
Many large organisations migrated from TMG to F5 platforms.&lt;br /&gt;
&lt;br /&gt;
=== Citrix NetScaler ===&lt;br /&gt;
&lt;br /&gt;
NetScaler offers:&lt;br /&gt;
&lt;br /&gt;
* Application delivery&lt;br /&gt;
* Remote access&lt;br /&gt;
* Reverse proxying&lt;br /&gt;
* Authentication services&lt;br /&gt;
&lt;br /&gt;
It became another common TMG successor.&lt;br /&gt;
&lt;br /&gt;
=== Cloudflare Tunnel ===&lt;br /&gt;
&lt;br /&gt;
Cloud-native publishing solutions have grown increasingly popular.&lt;br /&gt;
&lt;br /&gt;
Cloudflare Tunnel enables secure application publishing without exposing inbound services directly.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Entra Application Proxy ===&lt;br /&gt;
&lt;br /&gt;
For organisations heavily invested in Microsoft 365, Entra Application Proxy is often the most Microsoft-aligned modern solution.&lt;br /&gt;
&lt;br /&gt;
== Comparing Architectural Approaches ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Capability&lt;br /&gt;
! ISA/TMG&lt;br /&gt;
! WAP&lt;br /&gt;
! Nginx&lt;br /&gt;
! Kemp&lt;br /&gt;
! Entra App Proxy&lt;br /&gt;
|-&lt;br /&gt;
| Reverse Proxy&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| Pre-Authentication&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Optional&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| SSL Offload&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Managed by Service&lt;br /&gt;
|-&lt;br /&gt;
| Integrated Firewall&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Limited&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Identity-Aware Access&lt;br /&gt;
| Limited&lt;br /&gt;
| AD FS&lt;br /&gt;
| Optional&lt;br /&gt;
| Optional&lt;br /&gt;
| Native&lt;br /&gt;
|-&lt;br /&gt;
| Zero Trust Alignment&lt;br /&gt;
| No&lt;br /&gt;
| Partial&lt;br /&gt;
| Partial&lt;br /&gt;
| Partial&lt;br /&gt;
| Strong&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Design Lessons from ISA and TMG ==&lt;br /&gt;
&lt;br /&gt;
=== Security Has Moved Up the Stack ===&lt;br /&gt;
&lt;br /&gt;
Traditional security models focused on network boundaries.&lt;br /&gt;
&lt;br /&gt;
Modern architectures increasingly focus on:&lt;br /&gt;
&lt;br /&gt;
* Users&lt;br /&gt;
* Devices&lt;br /&gt;
* Identities&lt;br /&gt;
* Applications&lt;br /&gt;
&lt;br /&gt;
rather than simply IP addresses.&lt;br /&gt;
&lt;br /&gt;
=== Identity Has Become the New Perimeter ===&lt;br /&gt;
&lt;br /&gt;
TMG represented an early step toward identity-aware access.&lt;br /&gt;
&lt;br /&gt;
Modern solutions have expanded this approach considerably.&lt;br /&gt;
&lt;br /&gt;
Authentication, authorisation and conditional access now drive many security decisions that were once made at the network layer.&lt;br /&gt;
&lt;br /&gt;
=== Application Awareness Matters ===&lt;br /&gt;
&lt;br /&gt;
One of ISA&#039;s greatest strengths was its understanding of applications.&lt;br /&gt;
&lt;br /&gt;
Modern reverse proxies continue this philosophy through:&lt;br /&gt;
&lt;br /&gt;
* Layer-7 inspection&lt;br /&gt;
* API awareness&lt;br /&gt;
* Authentication integration&lt;br /&gt;
* Traffic routing intelligence&lt;br /&gt;
&lt;br /&gt;
=== Technology First, Models Later ===&lt;br /&gt;
&lt;br /&gt;
Administrators often remember ISA Server as a firewall product.&lt;br /&gt;
&lt;br /&gt;
In reality, ISA and TMG reflected the practical needs of organisations at the time. Networks increasingly revolved around web applications, identity systems and encrypted communications.&lt;br /&gt;
&lt;br /&gt;
Long before terms such as &#039;&#039;Zero Trust&#039;&#039; became popular, ISA and TMG were already applying application-aware and identity-aware concepts at the network edge.&lt;br /&gt;
&lt;br /&gt;
The technologies came first.&lt;br /&gt;
&lt;br /&gt;
The models and buzzwords arrived later.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Although ISA Server and Forefront TMG have been retired for many years, their influence remains visible throughout modern infrastructure design.&lt;br /&gt;
&lt;br /&gt;
The products solved a genuine problem: providing secure access to internal applications while reducing exposure to risk.&lt;br /&gt;
&lt;br /&gt;
Today&#039;s solutions may look different, but they continue the same evolutionary journey.&lt;br /&gt;
&lt;br /&gt;
The path from Proxy Server to ISA, TMG, Web Application Proxy and modern identity-aware access platforms tells the story of a broader shift in security architecture—from protecting networks to protecting applications, identities and data.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Reverse Proxy]]&lt;br /&gt;
* [[Web Application Proxy]]&lt;br /&gt;
* [[Microsoft Entra ID]]&lt;br /&gt;
* [[Zero Trust Architecture]]&lt;br /&gt;
* [[Load Balancing]]&lt;br /&gt;
* [[SSL Offloading]]&lt;br /&gt;
* [[Application Publishing]]&lt;br /&gt;
* [[Identity-Aware Proxy]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* Microsoft ISA Server Documentation&lt;br /&gt;
* Microsoft Forefront TMG Documentation&lt;br /&gt;
* Microsoft Web Application Proxy Documentation&lt;br /&gt;
* Microsoft Entra Application Proxy Documentation&lt;br /&gt;
* Nginx Documentation&lt;br /&gt;
* HAProxy Documentation&lt;br /&gt;
* Kemp LoadMaster Documentation&lt;br /&gt;
* F5 BIG-IP Documentation&lt;br /&gt;
* Citrix NetScaler Documentation&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=HTML5_Feature_Detection:_Presence_vs_Behaviour&amp;diff=451</id>
		<title>HTML5 Feature Detection: Presence vs Behaviour</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=HTML5_Feature_Detection:_Presence_vs_Behaviour&amp;diff=451"/>
		<updated>2026-07-12T20:06:13Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;Most HTML5 feature detection articles get it wrong.  The classic approach was:  &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt; if(document.createElement(&amp;quot;canvas&amp;quot;).getContext) {     // Canvas supported } &amp;lt;/syntaxhighlight&amp;gt;  Or even worse:  &amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt; if(window.localStorage) {     // LocalStorage supported } &amp;lt;/syntaxhighlight&amp;gt;  The problem is that these tests only prove that an API exists. They do &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; prove that it is functional.  A browser may:  * Expo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Most HTML5 feature detection articles get it wrong.&lt;br /&gt;
&lt;br /&gt;
The classic approach was:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(document.createElement(&amp;quot;canvas&amp;quot;).getContext)&lt;br /&gt;
{&lt;br /&gt;
    // Canvas supported&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or even worse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(window.localStorage)&lt;br /&gt;
{&lt;br /&gt;
    // LocalStorage supported&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The problem is that these tests only prove that an API exists. They do &#039;&#039;&#039;not&#039;&#039;&#039; prove that it is functional.&lt;br /&gt;
&lt;br /&gt;
A browser may:&lt;br /&gt;
&lt;br /&gt;
* Expose the object but not implement it correctly.&lt;br /&gt;
* Expose a partial implementation.&lt;br /&gt;
* Disable the feature via policy.&lt;br /&gt;
* Restrict the feature in private browsing mode.&lt;br /&gt;
* Provide a vendor stub.&lt;br /&gt;
* Fail at runtime despite passing existence checks.&lt;br /&gt;
&lt;br /&gt;
This was a common problem during the early HTML5 transition years.&lt;br /&gt;
&lt;br /&gt;
== The Wrong Question ==&lt;br /&gt;
&lt;br /&gt;
Many developers ask:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Does the browser support this feature?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What they should ask is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Can this browser successfully perform the operation I need?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are very different questions.&lt;br /&gt;
&lt;br /&gt;
== Example 1: Creating Elements ==&lt;br /&gt;
&lt;br /&gt;
A common test was:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var article = document.createElement(&amp;quot;article&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
if(article)&lt;br /&gt;
{&lt;br /&gt;
    // HTML5 semantic element supported&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this proves almost nothing.&lt;br /&gt;
&lt;br /&gt;
Every browser capable of executing JavaScript can create an unknown element.&lt;br /&gt;
&lt;br /&gt;
Even Internet Explorer 6 can do this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var unicorn = document.createElement(&amp;quot;unicorn&amp;quot;);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The object exists.&lt;br /&gt;
&lt;br /&gt;
That does not mean:&lt;br /&gt;
&lt;br /&gt;
* The element participates correctly in layout.&lt;br /&gt;
* CSS selectors work.&lt;br /&gt;
* Accessibility APIs understand it.&lt;br /&gt;
* The browser recognises its semantic meaning.&lt;br /&gt;
&lt;br /&gt;
A better test would be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var article = document.createElement(&amp;quot;article&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
document.body.appendChild(article);&lt;br /&gt;
&lt;br /&gt;
var display =&lt;br /&gt;
    window.getComputedStyle(article).display;&lt;br /&gt;
&lt;br /&gt;
document.body.removeChild(article);&lt;br /&gt;
&lt;br /&gt;
if(display === &amp;quot;block&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    // Behaviour resembles a modern browser&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we are testing behaviour rather than object creation.&lt;br /&gt;
&lt;br /&gt;
== Example 2: Canvas ==&lt;br /&gt;
&lt;br /&gt;
The traditional test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(document.createElement(&amp;quot;canvas&amp;quot;).getContext)&lt;br /&gt;
{&lt;br /&gt;
    // Canvas supported&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This only proves a method exists.&lt;br /&gt;
&lt;br /&gt;
A stronger test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var canvas = document.createElement(&amp;quot;canvas&amp;quot;);&lt;br /&gt;
var context = canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
if(context)&lt;br /&gt;
{&lt;br /&gt;
    context.fillStyle = &amp;quot;red&amp;quot;;&lt;br /&gt;
    context.fillRect(0,0,10,10);&lt;br /&gt;
&lt;br /&gt;
    var pixel =&lt;br /&gt;
        context.getImageData(5,5,1,1).data;&lt;br /&gt;
&lt;br /&gt;
    if(pixel[0] === 255)&lt;br /&gt;
    {&lt;br /&gt;
        // Drawing actually works&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we&#039;re validating actual rendering functionality.&lt;br /&gt;
&lt;br /&gt;
== Example 3: LocalStorage ==&lt;br /&gt;
&lt;br /&gt;
This one catches countless developers.&lt;br /&gt;
&lt;br /&gt;
They write:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(window.localStorage)&lt;br /&gt;
{&lt;br /&gt;
    // Supported&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yet some browsers expose the API while preventing usage.&lt;br /&gt;
&lt;br /&gt;
The correct test is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
try&lt;br /&gt;
{&lt;br /&gt;
    localStorage.setItem(&amp;quot;_test&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    var value =&lt;br /&gt;
        localStorage.getItem(&amp;quot;_test&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    localStorage.removeItem(&amp;quot;_test&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    if(value === &amp;quot;1&amp;quot;)&lt;br /&gt;
    {&lt;br /&gt;
        // Functional LocalStorage&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
catch(ex)&lt;br /&gt;
{&lt;br /&gt;
    // Not usable&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we&#039;re testing:&lt;br /&gt;
&lt;br /&gt;
# Write&lt;br /&gt;
# Read&lt;br /&gt;
# Delete&lt;br /&gt;
&lt;br /&gt;
The actual behaviour required by the application.&lt;br /&gt;
&lt;br /&gt;
== Example 4: Drag and Drop ==&lt;br /&gt;
&lt;br /&gt;
Many detection scripts do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(&amp;quot;draggable&amp;quot; in document.createElement(&amp;quot;div&amp;quot;))&lt;br /&gt;
{&lt;br /&gt;
    // Drag and drop support&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Yet actual drag operations may fail.&lt;br /&gt;
&lt;br /&gt;
A more useful validation might verify:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var element =&lt;br /&gt;
    document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
var supported =&lt;br /&gt;
    typeof element.ondragstart !==&lt;br /&gt;
    &amp;quot;undefined&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And even that is only a preliminary test.&lt;br /&gt;
&lt;br /&gt;
The true verification occurs when actual drag events fire during operation.&lt;br /&gt;
&lt;br /&gt;
== Example 5: Input Types ==&lt;br /&gt;
&lt;br /&gt;
A famous HTML5 detection trap.&lt;br /&gt;
&lt;br /&gt;
Developers test:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var input =&lt;br /&gt;
    document.createElement(&amp;quot;input&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
input.type = &amp;quot;date&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
if(input.type === &amp;quot;date&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    // Date picker supported&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is already better than existence testing because we&#039;re observing browser behaviour.&lt;br /&gt;
&lt;br /&gt;
Browsers that don&#039;t understand the type usually fall back to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;text&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
But even then:&lt;br /&gt;
&lt;br /&gt;
* Does a calendar appear?&lt;br /&gt;
* Is validation performed?&lt;br /&gt;
* Is localisation correct?&lt;br /&gt;
&lt;br /&gt;
Again, behaviour matters.&lt;br /&gt;
&lt;br /&gt;
== The Modern Principle ==&lt;br /&gt;
&lt;br /&gt;
HTML5 support should be viewed as a spectrum:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Level&lt;br /&gt;
! Test&lt;br /&gt;
|-&lt;br /&gt;
| API Exists&lt;br /&gt;
| Object present&lt;br /&gt;
|-&lt;br /&gt;
| API Usable&lt;br /&gt;
| Methods callable&lt;br /&gt;
|-&lt;br /&gt;
| Feature Works&lt;br /&gt;
| Expected behaviour&lt;br /&gt;
|-&lt;br /&gt;
| Feature Reliable&lt;br /&gt;
| Behaviour matches specification&lt;br /&gt;
|-&lt;br /&gt;
| Feature Suitable&lt;br /&gt;
| Meets application requirements&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Most detection libraries stop at Level 1 or 2.&lt;br /&gt;
&lt;br /&gt;
Applications actually need Level 3 or 4.&lt;br /&gt;
&lt;br /&gt;
== A Better Pattern ==&lt;br /&gt;
&lt;br /&gt;
Rather than:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
if(window.indexedDB)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use capability tests:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
async function testIndexedDB()&lt;br /&gt;
{&lt;br /&gt;
    try&lt;br /&gt;
    {&lt;br /&gt;
        const request =&lt;br /&gt;
            indexedDB.open(&amp;quot;test&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        return new Promise(function(resolve)&lt;br /&gt;
        {&lt;br /&gt;
            request.onsuccess =&lt;br /&gt;
                function()&lt;br /&gt;
                {&lt;br /&gt;
                    resolve(true);&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
            request.onerror =&lt;br /&gt;
                function()&lt;br /&gt;
                {&lt;br /&gt;
                    resolve(false);&lt;br /&gt;
                };&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
    catch(ex)&lt;br /&gt;
    {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This verifies that the browser can actually perform the capability required.&lt;br /&gt;
&lt;br /&gt;
== The Real Rule ==&lt;br /&gt;
&lt;br /&gt;
A good HTML5 feature detector should answer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;Can I successfully perform the operation I need right now?&amp;quot;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
not:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&amp;quot;Does some JavaScript object exist?&amp;quot;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The difference is the same as checking whether a hard drive appears in Device Manager versus actually reading and writing a file to it.&lt;br /&gt;
&lt;br /&gt;
One proves presence.&lt;br /&gt;
&lt;br /&gt;
The other proves functionality.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The web industry has historically focused on &#039;&#039;&#039;feature detection&#039;&#039;&#039;, but modern applications benefit far more from &#039;&#039;&#039;capability detection&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Rather than checking whether a browser exposes an API, applications should verify that the API can successfully perform the required task under real-world conditions.&lt;br /&gt;
&lt;br /&gt;
The safest approach is therefore:&lt;br /&gt;
&lt;br /&gt;
# Detect the feature.&lt;br /&gt;
# Test the capability.&lt;br /&gt;
# Validate the expected behaviour.&lt;br /&gt;
# Gracefully degrade where necessary.&lt;br /&gt;
&lt;br /&gt;
By shifting from presence testing to behavioural testing, developers can build applications that are more robust, more portable, and more resilient to browser quirks, partial implementations, privacy restrictions, and future platform changes.&lt;br /&gt;
&lt;br /&gt;
In short:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Don&#039;t test whether a browser claims to support HTML5.&lt;br /&gt;
&lt;br /&gt;
Test whether it can actually do the job.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=SharePoint_and_Microsoft_Teams:_Bringing_Resources_and_Collaboration_Together&amp;diff=450</id>
		<title>SharePoint and Microsoft Teams: Bringing Resources and Collaboration Together</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=SharePoint_and_Microsoft_Teams:_Bringing_Resources_and_Collaboration_Together&amp;diff=450"/>
		<updated>2026-07-12T20:04:45Z</updated>

		<summary type="html">&lt;p&gt;Dex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Microsoft SharePoint and Microsoft Teams are often viewed as separate products, each serving a distinct purpose within an organisation. In reality, they are complementary technologies that address different aspects of the same challenge: enabling people to work together effectively.&lt;br /&gt;
&lt;br /&gt;
SharePoint is traditionally centred on information, documents, and business processes, while Teams is centred on communication, conversations, and human interaction. Modern Microsoft 365 increasingly brings these capabilities together, reducing the distance between resources and collaboration and helping users achieve their goals with fewer interruptions and less context switching.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
For many years, organisations separated information from communication.&lt;br /&gt;
&lt;br /&gt;
Documents were stored in one system.&lt;br /&gt;
&lt;br /&gt;
Emails were exchanged in another.&lt;br /&gt;
&lt;br /&gt;
Meetings took place elsewhere.&lt;br /&gt;
&lt;br /&gt;
Business processes often existed in completely separate applications.&lt;br /&gt;
&lt;br /&gt;
A typical workflow looked like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Open Document&lt;br /&gt;
      ↓&lt;br /&gt;
Send Email&lt;br /&gt;
      ↓&lt;br /&gt;
Wait For Reply&lt;br /&gt;
      ↓&lt;br /&gt;
Open Meeting Invitation&lt;br /&gt;
      ↓&lt;br /&gt;
Discuss Changes&lt;br /&gt;
      ↓&lt;br /&gt;
Return To Document&lt;br /&gt;
      ↓&lt;br /&gt;
Update Information&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each transition required users to mentally switch contexts.&lt;br /&gt;
&lt;br /&gt;
Even when each individual action only took a few seconds, the cumulative impact on productivity could be significant.&lt;br /&gt;
&lt;br /&gt;
Modern collaboration platforms aim to reduce these interruptions by bringing information and communication closer together.&lt;br /&gt;
&lt;br /&gt;
== Two Approaches to the Same Goal ==&lt;br /&gt;
&lt;br /&gt;
Both SharePoint and Teams support collaboration, but they begin from different starting points.&lt;br /&gt;
&lt;br /&gt;
=== SharePoint: Resource First ===&lt;br /&gt;
&lt;br /&gt;
SharePoint was designed around the idea of organising and managing information.&lt;br /&gt;
&lt;br /&gt;
It provides a structured environment for:&lt;br /&gt;
&lt;br /&gt;
* Documents&lt;br /&gt;
* Lists&lt;br /&gt;
* Knowledgebases&lt;br /&gt;
* Business records&lt;br /&gt;
* Workflows&lt;br /&gt;
* Intranets&lt;br /&gt;
* Digital forms&lt;br /&gt;
* Governance and compliance&lt;br /&gt;
&lt;br /&gt;
The fundamental question SharePoint answers is:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Where does the information live?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A SharePoint site becomes the authoritative location for storing, organising, securing, and managing organisational knowledge.&lt;br /&gt;
&lt;br /&gt;
Collaboration exists within SharePoint through features such as:&lt;br /&gt;
&lt;br /&gt;
* Document co-authoring&lt;br /&gt;
* Version history&lt;br /&gt;
* Approval workflows&lt;br /&gt;
* Comments&lt;br /&gt;
* Alerts and notifications&lt;br /&gt;
&lt;br /&gt;
However, the primary focus remains the resource itself.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User&lt;br /&gt;
  ↓&lt;br /&gt;
Information&lt;br /&gt;
  ↓&lt;br /&gt;
Collaboration&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Teams: Conversation First ===&lt;br /&gt;
&lt;br /&gt;
Microsoft Teams approaches collaboration from the opposite direction.&lt;br /&gt;
&lt;br /&gt;
Rather than starting with information, Teams starts with people.&lt;br /&gt;
&lt;br /&gt;
Its core capabilities revolve around:&lt;br /&gt;
&lt;br /&gt;
* Chat&lt;br /&gt;
* Meetings&lt;br /&gt;
* Voice calls&lt;br /&gt;
* Video conferencing&lt;br /&gt;
* Team channels&lt;br /&gt;
* Presence awareness&lt;br /&gt;
* Real-time collaboration&lt;br /&gt;
&lt;br /&gt;
The fundamental question Teams answers is:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Where are the people?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Within Teams, communication becomes the starting point, while resources support the conversation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User&lt;br /&gt;
  ↓&lt;br /&gt;
Conversation&lt;br /&gt;
  ↓&lt;br /&gt;
Information&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Two Roads Leading to the Same Destination ==&lt;br /&gt;
&lt;br /&gt;
Although they appear different, SharePoint and Teams ultimately serve the same purpose.&lt;br /&gt;
&lt;br /&gt;
Both seek to enable productive collaboration.&lt;br /&gt;
&lt;br /&gt;
They simply approach the challenge from opposite directions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  Microsoft 365&lt;br /&gt;
&lt;br /&gt;
           +-----------------------+&lt;br /&gt;
           |                       |&lt;br /&gt;
           v                       v&lt;br /&gt;
&lt;br /&gt;
      SharePoint               Teams&lt;br /&gt;
&lt;br /&gt;
      Resource First      Conversation First&lt;br /&gt;
&lt;br /&gt;
           |                       |&lt;br /&gt;
           +-----------+-----------+&lt;br /&gt;
                       |&lt;br /&gt;
                       v&lt;br /&gt;
&lt;br /&gt;
             Collaborative Work&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One begins with information.&lt;br /&gt;
&lt;br /&gt;
The other begins with communication.&lt;br /&gt;
&lt;br /&gt;
Both aim to bring people and resources together.&lt;br /&gt;
&lt;br /&gt;
== The Evolution of Digital Collaboration ==&lt;br /&gt;
&lt;br /&gt;
Historically, collaboration often required users to leave the resource they were working on.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resource&lt;br /&gt;
    ↓&lt;br /&gt;
Leave Application&lt;br /&gt;
    ↓&lt;br /&gt;
Communicate&lt;br /&gt;
    ↓&lt;br /&gt;
Return To Resource&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As collaboration tools matured, systems began introducing communication features closer to the information.&lt;br /&gt;
&lt;br /&gt;
Features such as document comments, co-authoring, notifications, and workflow approvals reduced the need to leave the working context.&lt;br /&gt;
&lt;br /&gt;
Today&#039;s Microsoft 365 environment takes this a step further.&lt;br /&gt;
&lt;br /&gt;
The relationship between information and collaboration is becoming increasingly seamless.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Resource&lt;br /&gt;
    ↕&lt;br /&gt;
Collaboration&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The goal is no longer simply storing information or facilitating communication.&lt;br /&gt;
&lt;br /&gt;
The goal is enabling work to happen with minimal interruption.&lt;br /&gt;
&lt;br /&gt;
== Bringing Resources into Teams ==&lt;br /&gt;
&lt;br /&gt;
One of Teams&#039; greatest strengths is its ability to surface information directly within the collaborative workspace.&lt;br /&gt;
&lt;br /&gt;
Users can access:&lt;br /&gt;
&lt;br /&gt;
* SharePoint document libraries&lt;br /&gt;
* SharePoint lists&lt;br /&gt;
* Power BI reports&lt;br /&gt;
* Power Apps&lt;br /&gt;
* Project information&lt;br /&gt;
* Dashboards&lt;br /&gt;
* Knowledgebase content&lt;br /&gt;
* Third-party applications&lt;br /&gt;
&lt;br /&gt;
without leaving the conversation.&lt;br /&gt;
&lt;br /&gt;
Instead of saying:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Open another application and find the document.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Teams allows organisations to bring the document to where the discussion is already taking place.&lt;br /&gt;
&lt;br /&gt;
This reduces friction and helps maintain focus.&lt;br /&gt;
&lt;br /&gt;
The discussion and the supporting information become part of the same working environment.&lt;br /&gt;
&lt;br /&gt;
== Bringing Collaboration into SharePoint ==&lt;br /&gt;
&lt;br /&gt;
Historically, SharePoint focused more heavily on information management than communication.&lt;br /&gt;
&lt;br /&gt;
Collaboration features existed, but often remained secondary to the document or process itself.&lt;br /&gt;
&lt;br /&gt;
As Microsoft 365 has evolved, deeper integration between SharePoint and Teams has narrowed this gap.&lt;br /&gt;
&lt;br /&gt;
SharePoint users can now benefit from collaboration capabilities that were traditionally associated with Teams.&lt;br /&gt;
&lt;br /&gt;
Resources can sit alongside communication tools, collaborative experiences, meetings, discussions, and integrated applications.&lt;br /&gt;
&lt;br /&gt;
The distinction between the place where information lives and the place where people collaborate is becoming increasingly blurred.&lt;br /&gt;
&lt;br /&gt;
== The Real Benefit Is Not Embedding ==&lt;br /&gt;
&lt;br /&gt;
It is tempting to view these integrations primarily as embedding technologies.&lt;br /&gt;
&lt;br /&gt;
This misses the larger architectural goal.&lt;br /&gt;
&lt;br /&gt;
The real value is not that something can be embedded.&lt;br /&gt;
&lt;br /&gt;
The real value is that users no longer need to continually switch contexts.&lt;br /&gt;
&lt;br /&gt;
Traditional approach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Read Information&lt;br /&gt;
      ↓&lt;br /&gt;
Find Team&lt;br /&gt;
      ↓&lt;br /&gt;
Open Chat Tool&lt;br /&gt;
      ↓&lt;br /&gt;
Start Conversation&lt;br /&gt;
      ↓&lt;br /&gt;
Return To Information&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Integrated approach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Read Information&lt;br /&gt;
      ↓&lt;br /&gt;
Discuss Information&lt;br /&gt;
      ↓&lt;br /&gt;
Make Decision&lt;br /&gt;
      ↓&lt;br /&gt;
Update Information&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second workflow contains fewer interruptions.&lt;br /&gt;
&lt;br /&gt;
Work flows naturally.&lt;br /&gt;
&lt;br /&gt;
== Design Principle: Reducing the Distance to Value ==&lt;br /&gt;
&lt;br /&gt;
A common misconception is that productivity can be measured solely by counting clicks.&lt;br /&gt;
&lt;br /&gt;
A more useful measure is often the number of interruptions.&lt;br /&gt;
&lt;br /&gt;
Every interruption requires a user to:&lt;br /&gt;
&lt;br /&gt;
* Change applications&lt;br /&gt;
* Change context&lt;br /&gt;
* Locate information&lt;br /&gt;
* Rebuild concentration&lt;br /&gt;
* Resume the task&lt;br /&gt;
&lt;br /&gt;
Effective collaboration platforms reduce these interruptions.&lt;br /&gt;
&lt;br /&gt;
The ideal experience enables users to move naturally between:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
See Information&lt;br /&gt;
      ↓&lt;br /&gt;
Ask Questions&lt;br /&gt;
      ↓&lt;br /&gt;
Discuss&lt;br /&gt;
      ↓&lt;br /&gt;
Make Decisions&lt;br /&gt;
      ↓&lt;br /&gt;
Update Information&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
without feeling that they have left the workspace.&lt;br /&gt;
&lt;br /&gt;
== Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
When designing Microsoft 365 solutions, organisations should focus on user journeys rather than individual products.&lt;br /&gt;
&lt;br /&gt;
Key questions include:&lt;br /&gt;
&lt;br /&gt;
* Where does the information live?&lt;br /&gt;
* Where do conversations happen?&lt;br /&gt;
* How frequently do users switch between systems?&lt;br /&gt;
* Can collaboration be brought closer to the resource?&lt;br /&gt;
* Can resources be brought closer to the collaboration?&lt;br /&gt;
&lt;br /&gt;
Successful solutions rarely choose SharePoint or Teams.&lt;br /&gt;
&lt;br /&gt;
Instead, they leverage the strengths of both.&lt;br /&gt;
&lt;br /&gt;
== The Future of the Digital Workplace ==&lt;br /&gt;
&lt;br /&gt;
The convergence of SharePoint and Microsoft Teams is part of a much broader evolution within Microsoft 365.&lt;br /&gt;
&lt;br /&gt;
For many years, organisations viewed their digital workplace as a collection of separate tools:&lt;br /&gt;
&lt;br /&gt;
* Document Management&lt;br /&gt;
* Email&lt;br /&gt;
* Team Chat&lt;br /&gt;
* Meetings&lt;br /&gt;
* Task Management&lt;br /&gt;
* Knowledgebases&lt;br /&gt;
* Business Applications&lt;br /&gt;
&lt;br /&gt;
Users were expected to move between these systems depending on the task they wished to perform.&lt;br /&gt;
&lt;br /&gt;
Modern workplace design is increasingly moving away from this model.&lt;br /&gt;
&lt;br /&gt;
Rather than forcing users to navigate between disconnected applications, Microsoft is working towards a unified experience where information, communication, tasks, business processes, and knowledge are available within a single working context.&lt;br /&gt;
&lt;br /&gt;
=== The Rise of Contextual Work ===&lt;br /&gt;
&lt;br /&gt;
Historically, users needed to know where information was stored before they could access it.&lt;br /&gt;
&lt;br /&gt;
A document might be stored in SharePoint.&lt;br /&gt;
&lt;br /&gt;
A discussion might take place in Teams.&lt;br /&gt;
&lt;br /&gt;
Tasks might exist in Planner.&lt;br /&gt;
&lt;br /&gt;
Knowledge might be held within a Wiki or Knowledgebase.&lt;br /&gt;
&lt;br /&gt;
The future digital workplace aims to make these distinctions less important.&lt;br /&gt;
&lt;br /&gt;
Instead, users focus on their objective, while the platform brings together the resources, conversations, and tools required to complete the task.&lt;br /&gt;
&lt;br /&gt;
The emphasis shifts from navigating systems to accomplishing outcomes.&lt;br /&gt;
&lt;br /&gt;
=== Microsoft Loop and Fluid Collaboration ===&lt;br /&gt;
&lt;br /&gt;
Microsoft Loop represents a significant step towards this vision.&lt;br /&gt;
&lt;br /&gt;
Rather than information being tied to a specific application, Loop components can exist simultaneously within multiple locations.&lt;br /&gt;
&lt;br /&gt;
A list, task, table, or piece of content can appear in:&lt;br /&gt;
&lt;br /&gt;
* Teams&lt;br /&gt;
* Outlook&lt;br /&gt;
* Loop Workspaces&lt;br /&gt;
* Microsoft 365 applications&lt;br /&gt;
&lt;br /&gt;
Changes made in one location are reflected everywhere the component exists.&lt;br /&gt;
&lt;br /&gt;
The focus moves away from where content is stored and towards how people collaborate with it.&lt;br /&gt;
&lt;br /&gt;
=== Viva Connections and Organisational Knowledge ===&lt;br /&gt;
&lt;br /&gt;
Viva Connections builds upon SharePoint&#039;s strengths as an organisational knowledge platform.&lt;br /&gt;
&lt;br /&gt;
Rather than requiring users to visit an intranet site separately, organisational resources can be surfaced directly within the flow of daily work.&lt;br /&gt;
&lt;br /&gt;
News, policies, communications, training materials, and business applications become accessible without requiring users to leave their collaborative workspace.&lt;br /&gt;
&lt;br /&gt;
This further reduces the distance between information and the people who need it.&lt;br /&gt;
&lt;br /&gt;
=== Copilot and Intelligent Context ===&lt;br /&gt;
&lt;br /&gt;
Artificial intelligence introduces another layer of integration.&lt;br /&gt;
&lt;br /&gt;
Rather than simply locating documents or conversations, tools such as Microsoft Copilot can help users understand the relationships between information sources.&lt;br /&gt;
&lt;br /&gt;
A user may ask a question without knowing:&lt;br /&gt;
&lt;br /&gt;
* Which document contains the answer&lt;br /&gt;
* Which team discussed the topic&lt;br /&gt;
* Which meeting covered the decision&lt;br /&gt;
* Which task tracks the outcome&lt;br /&gt;
&lt;br /&gt;
The platform increasingly becomes responsible for assembling the relevant context.&lt;br /&gt;
&lt;br /&gt;
This represents a significant shift in the way users interact with business systems.&lt;br /&gt;
&lt;br /&gt;
=== From Applications to Workspaces ===&lt;br /&gt;
&lt;br /&gt;
Perhaps the most significant change is philosophical.&lt;br /&gt;
&lt;br /&gt;
Historically, users worked with applications.&lt;br /&gt;
&lt;br /&gt;
Tomorrow&#039;s digital workplace is increasingly focused on workspaces.&lt;br /&gt;
&lt;br /&gt;
A workspace combines:&lt;br /&gt;
&lt;br /&gt;
* Information&lt;br /&gt;
* Communication&lt;br /&gt;
* People&lt;br /&gt;
* Tasks&lt;br /&gt;
* Processes&lt;br /&gt;
* Knowledge&lt;br /&gt;
* Automation&lt;br /&gt;
* Artificial Intelligence&lt;br /&gt;
&lt;br /&gt;
into a cohesive environment centred around the work itself.&lt;br /&gt;
&lt;br /&gt;
The question is no longer:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Which application should I open?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Instead, users increasingly ask:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;What am I trying to achieve?&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The platform then brings together the resources required to support that objective.&lt;br /&gt;
&lt;br /&gt;
=== The Direction of Travel ===&lt;br /&gt;
&lt;br /&gt;
Viewed through this lens, the growing integration between SharePoint and Teams is not merely a collection of product features.&lt;br /&gt;
&lt;br /&gt;
It is part of a broader strategy to reduce friction, minimise context switching, and bring people closer to the information they need.&lt;br /&gt;
&lt;br /&gt;
The future digital workplace is unlikely to be defined by individual applications.&lt;br /&gt;
&lt;br /&gt;
Instead, it will be defined by connected experiences that allow information, collaboration, knowledge, and decision-making to exist together within a unified workspace.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
SharePoint and Microsoft Teams are increasingly two views of the same collaborative ecosystem.&lt;br /&gt;
&lt;br /&gt;
SharePoint provides structure, governance, knowledge management, and business processes.&lt;br /&gt;
&lt;br /&gt;
Teams provides conversation, presence, meetings, and real-time collaboration.&lt;br /&gt;
&lt;br /&gt;
Modern Microsoft 365 continues to bring these capabilities closer together, reducing the distance between information and communication.&lt;br /&gt;
&lt;br /&gt;
The objective is not simply to embed one product inside another.&lt;br /&gt;
&lt;br /&gt;
The objective is to help people move from information, to discussion, to decision, and back to information with as little friction as possible.&lt;br /&gt;
&lt;br /&gt;
When resources and collaboration exist together, users spend less time navigating systems and more time getting work done.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=SharePoint_and_Microsoft_Teams:_Bringing_Resources_and_Collaboration_Together&amp;diff=449</id>
		<title>SharePoint and Microsoft Teams: Bringing Resources and Collaboration Together</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=SharePoint_and_Microsoft_Teams:_Bringing_Resources_and_Collaboration_Together&amp;diff=449"/>
		<updated>2026-07-12T20:01:58Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Microsoft SharePoint and Microsoft Teams are often viewed as separate products, each serving a distinct purpose within an organisation. In reality, they are complementary technologies that address different aspects of the same challenge: enabling people to work together effectively.  SharePoint is traditionally centred on information, documents, and business processes, while Teams is centred on communication, conversations, and human interaction. Modern Mi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Microsoft SharePoint and Microsoft Teams are often viewed as separate products, each serving a distinct purpose within an organisation. In reality, they are complementary technologies that address different aspects of the same challenge: enabling people to work together effectively.&lt;br /&gt;
&lt;br /&gt;
SharePoint is traditionally centred on information, documents, and business processes, while Teams is centred on communication, conversations, and human interaction. Modern Microsoft 365 increasingly brings these capabilities together, reducing the distance between resources and collaboration and helping users achieve their goals with fewer interruptions and less context switching.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
For many years, organisations separated information from communication.&lt;br /&gt;
&lt;br /&gt;
Documents were stored in one system.&lt;br /&gt;
&lt;br /&gt;
Emails were exchanged in another.&lt;br /&gt;
&lt;br /&gt;
Meetings took place elsewhere.&lt;br /&gt;
&lt;br /&gt;
Business processes often existed in completely separate applications.&lt;br /&gt;
&lt;br /&gt;
A typical workflow looked like this:&lt;br /&gt;
&lt;br /&gt;
```text&lt;br /&gt;
Open Document&lt;br /&gt;
      ↓&lt;br /&gt;
Send Email&lt;br /&gt;
      ↓&lt;br /&gt;
Wait For Reply&lt;br /&gt;
      ↓&lt;br /&gt;
Open Meeting Invitation&lt;br /&gt;
      ↓&lt;br /&gt;
Discuss Changes&lt;br /&gt;
      ↓&lt;br /&gt;
Return To Document&lt;br /&gt;
      ↓&lt;br /&gt;
Update Information&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=PiRho_Lab:_Building_Three_Generations_of_Microsoft_Infrastructure&amp;diff=448</id>
		<title>PiRho Lab: Building Three Generations of Microsoft Infrastructure</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=PiRho_Lab:_Building_Three_Generations_of_Microsoft_Infrastructure&amp;diff=448"/>
		<updated>2026-07-12T19:56:55Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039;  Between the release of Windows 2000 and Windows Server 2012, Microsoft&amp;#039;s enterprise ecosystem underwent one of the most significant technological evolutions in modern computing.  What began as a collection of individual servers for directory services, messaging, web applications and databases gradually evolved into highly integrated platforms capable of supporting virtualised datacentres, unified communications, federated identity and eventually cloud com...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Between the release of Windows 2000 and Windows Server 2012, Microsoft&#039;s enterprise ecosystem underwent one of the most significant technological evolutions in modern computing.&lt;br /&gt;
&lt;br /&gt;
What began as a collection of individual servers for directory services, messaging, web applications and databases gradually evolved into highly integrated platforms capable of supporting virtualised datacentres, unified communications, federated identity and eventually cloud computing.&lt;br /&gt;
&lt;br /&gt;
This article explores three distinct generations of Microsoft&#039;s enterprise ecosystem:&lt;br /&gt;
&lt;br /&gt;
* Foundations (Windows 2000 Era)&lt;br /&gt;
* Unification (Windows Server 2003 Era)&lt;br /&gt;
* Cloud-Ready (Windows Server 2008 Era)&lt;br /&gt;
&lt;br /&gt;
Understanding these generations provides valuable context for modern technologies such as Microsoft 365, Azure, Entra ID and SharePoint Online, all of which have roots in technologies developed during these formative years.&lt;br /&gt;
&lt;br /&gt;
== Why These Generations Matter ==&lt;br /&gt;
&lt;br /&gt;
When looking back at Microsoft&#039;s server products, it is tempting to focus on individual applications such as Exchange Server, SQL Server or SharePoint.&lt;br /&gt;
&lt;br /&gt;
However, the more interesting story is how these technologies evolved together.&lt;br /&gt;
&lt;br /&gt;
Each generation solved different challenges.&lt;br /&gt;
&lt;br /&gt;
The Foundations generation established the core building blocks of the Microsoft enterprise.&lt;br /&gt;
&lt;br /&gt;
The Unification generation focused on integrating those building blocks into coherent platforms.&lt;br /&gt;
&lt;br /&gt;
The Cloud-Ready generation virtualised and consolidated those platforms whilst preparing organisations for the coming shift toward cloud computing.&lt;br /&gt;
&lt;br /&gt;
For anyone building a historical lab environment, these three generations provide natural boundaries around which infrastructure can be planned and deployed.&lt;br /&gt;
&lt;br /&gt;
== Generation 1: Foundations (Windows 2000 Era) ==&lt;br /&gt;
&lt;br /&gt;
=== The Birth of the Modern Microsoft Enterprise ===&lt;br /&gt;
&lt;br /&gt;
Windows 2000 introduced Active Directory and fundamentally changed how Microsoft infrastructures were built.&lt;br /&gt;
&lt;br /&gt;
For the first time, organisations could implement a directory-centric architecture where authentication, authorisation, policy management and application integration all revolved around a single identity store.&lt;br /&gt;
&lt;br /&gt;
Many technologies that are now considered standard first appeared during this era.&lt;br /&gt;
&lt;br /&gt;
=== Core Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
* Windows 2000 Server&lt;br /&gt;
* Active Directory&lt;br /&gt;
* DNS&lt;br /&gt;
* DHCP&lt;br /&gt;
* WINS&lt;br /&gt;
* Certificate Services&lt;br /&gt;
* IIS 5.0&lt;br /&gt;
&lt;br /&gt;
Together, these technologies established the basic services required by almost every Microsoft environment.&lt;br /&gt;
&lt;br /&gt;
=== Messaging and Collaboration ===&lt;br /&gt;
&lt;br /&gt;
* Exchange Server 5.5&lt;br /&gt;
* Exchange Server 2000&lt;br /&gt;
* Exchange Conferencing Server 2000&lt;br /&gt;
* SharePoint Portal Server 2001&lt;br /&gt;
* SharePoint Team Services&lt;br /&gt;
* Project Server 2002&lt;br /&gt;
&lt;br /&gt;
Exchange 2000 was particularly important because it integrated directly with Active Directory, eliminating the separate Exchange Directory found in Exchange 5.5.&lt;br /&gt;
&lt;br /&gt;
This decision established a pattern that Microsoft would follow for decades; enterprise applications would increasingly depend upon Active Directory as their central identity platform.&lt;br /&gt;
&lt;br /&gt;
=== Data and Integration ===&lt;br /&gt;
&lt;br /&gt;
* SQL Server 7.0&lt;br /&gt;
* SQL Server 2000&lt;br /&gt;
* BizTalk Server 2000&lt;br /&gt;
* BizTalk Server 2002&lt;br /&gt;
* Commerce Server 2000&lt;br /&gt;
* Commerce Server 2002&lt;br /&gt;
* Host Integration Server 2000&lt;br /&gt;
&lt;br /&gt;
These products enabled organisations to connect databases, applications, business processes and even IBM mainframe environments.&lt;br /&gt;
&lt;br /&gt;
Host Integration Server deserves special mention because it represented Microsoft&#039;s commitment to coexistence with enterprise systems that were already present in many large organisations.&lt;br /&gt;
&lt;br /&gt;
=== Management and Security ===&lt;br /&gt;
&lt;br /&gt;
* Systems Management Server (SMS) 2.0&lt;br /&gt;
* Microsoft Operations Manager (MOM) 2000&lt;br /&gt;
* ISA Server 2000&lt;br /&gt;
* Application Center 2000&lt;br /&gt;
&lt;br /&gt;
The foundations of modern systems management emerged during this period.&lt;br /&gt;
&lt;br /&gt;
Although primitive by today&#039;s standards, these products introduced the concepts that would eventually become the System Center suite.&lt;br /&gt;
&lt;br /&gt;
=== Characteristics of the Foundations Era ===&lt;br /&gt;
&lt;br /&gt;
The Foundations era was characterised by:&lt;br /&gt;
&lt;br /&gt;
* Physical servers&lt;br /&gt;
* Active Directory adoption&lt;br /&gt;
* Early web applications&lt;br /&gt;
* Centralised authentication&lt;br /&gt;
* Basic automation&lt;br /&gt;
* Limited virtualisation&lt;br /&gt;
* Individual server products operating largely independently&lt;br /&gt;
&lt;br /&gt;
The focus was on building infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Generation 2: Unification (Windows Server 2003 Era) ==&lt;br /&gt;
&lt;br /&gt;
=== The Platform Years ===&lt;br /&gt;
&lt;br /&gt;
By 2003, organisations had deployed the foundational technologies.&lt;br /&gt;
&lt;br /&gt;
The next challenge was integration.&lt;br /&gt;
&lt;br /&gt;
Microsoft began transforming individual products into tightly integrated platforms.&lt;br /&gt;
&lt;br /&gt;
Rather than simply connecting Exchange, SharePoint and SQL Server together, Microsoft began designing them as parts of a larger ecosystem.&lt;br /&gt;
&lt;br /&gt;
=== Messaging and Collaboration ===&lt;br /&gt;
&lt;br /&gt;
* Exchange Server 2003&lt;br /&gt;
* Exchange Server 2007&lt;br /&gt;
* SharePoint Portal Server 2003&lt;br /&gt;
* Windows SharePoint Services 2.0&lt;br /&gt;
* Windows SharePoint Services 3.0&lt;br /&gt;
* Microsoft Office SharePoint Server 2007&lt;br /&gt;
* Project Server 2003&lt;br /&gt;
* Project Server 2007&lt;br /&gt;
&lt;br /&gt;
SharePoint evolved dramatically during this period.&lt;br /&gt;
&lt;br /&gt;
What had previously been a document portal became an enterprise platform supporting collaboration, search, document management, workflow and business process automation.&lt;br /&gt;
&lt;br /&gt;
=== Database and Business Intelligence ===&lt;br /&gt;
&lt;br /&gt;
* SQL Server 2005&lt;br /&gt;
* SQL Server Reporting Services&lt;br /&gt;
* SQL Server Notification Services&lt;br /&gt;
* SQL Server Analysis Services&lt;br /&gt;
* SQL Server Integration Services&lt;br /&gt;
&lt;br /&gt;
SQL Server 2005 marked a major shift toward integrated data platforms.&lt;br /&gt;
&lt;br /&gt;
Reporting, analytics, ETL and business intelligence became part of a broader ecosystem rather than separate products.&lt;br /&gt;
&lt;br /&gt;
=== Systems Management ===&lt;br /&gt;
&lt;br /&gt;
* SMS 2003&lt;br /&gt;
* System Center Configuration Manager 2007&lt;br /&gt;
* MOM 2005&lt;br /&gt;
* System Center Operations Manager 2007&lt;br /&gt;
* Data Protection Manager 2006&lt;br /&gt;
* Data Protection Manager 2007&lt;br /&gt;
* Virtual Machine Manager 2007&lt;br /&gt;
&lt;br /&gt;
The transition from individual management tools toward System Center began here.&lt;br /&gt;
&lt;br /&gt;
The management products themselves started becoming a platform.&lt;br /&gt;
&lt;br /&gt;
=== Communications ===&lt;br /&gt;
&lt;br /&gt;
* Live Communications Server 2003&lt;br /&gt;
* Live Communications Server 2005&lt;br /&gt;
* Office Communications Server 2007&lt;br /&gt;
&lt;br /&gt;
Microsoft&#039;s unified communications strategy emerged during this generation.&lt;br /&gt;
&lt;br /&gt;
Presence, instant messaging, conferencing and collaboration became increasingly integrated.&lt;br /&gt;
&lt;br /&gt;
=== Security and Identity ===&lt;br /&gt;
&lt;br /&gt;
* MIIS 2003&lt;br /&gt;
* Identity Lifecycle Manager 2007&lt;br /&gt;
* ISA Server 2004&lt;br /&gt;
* ISA Server 2006&lt;br /&gt;
* Rights Management Services&lt;br /&gt;
&lt;br /&gt;
Identity became a strategic component rather than simply an Active Directory feature.&lt;br /&gt;
&lt;br /&gt;
=== Characteristics of the Unification Era ===&lt;br /&gt;
&lt;br /&gt;
The Unification era was characterised by:&lt;br /&gt;
&lt;br /&gt;
* Platform thinking&lt;br /&gt;
* Integrated products&lt;br /&gt;
* Enterprise workflows&lt;br /&gt;
* Document management&lt;br /&gt;
* Unified communications&lt;br /&gt;
* Business intelligence&lt;br /&gt;
* Centralised systems management&lt;br /&gt;
&lt;br /&gt;
The focus was on connecting infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Generation 3: Cloud-Ready (Windows Server 2008 Era) ==&lt;br /&gt;
&lt;br /&gt;
=== Preparing for the Future ===&lt;br /&gt;
&lt;br /&gt;
The arrival of Windows Server 2008 marked the beginning of a major architectural shift.&lt;br /&gt;
&lt;br /&gt;
Microsoft recognised that future infrastructures would be highly virtualised, automated and service oriented.&lt;br /&gt;
&lt;br /&gt;
Many technologies introduced during this era directly influenced Office 365 and Azure.&lt;br /&gt;
&lt;br /&gt;
=== Virtualisation Becomes Mainstream ===&lt;br /&gt;
&lt;br /&gt;
* Hyper-V&lt;br /&gt;
* Hyper-V Server&lt;br /&gt;
* Virtual Machine Manager 2008&lt;br /&gt;
* Virtual Machine Manager 2008 R2&lt;br /&gt;
* Virtual Machine Manager 2012&lt;br /&gt;
&lt;br /&gt;
For the first time, virtualisation moved from an optional technology to a core architectural principle.&lt;br /&gt;
&lt;br /&gt;
Datacentres increasingly became collections of virtual workloads rather than physical servers.&lt;br /&gt;
&lt;br /&gt;
=== Messaging and Collaboration ===&lt;br /&gt;
&lt;br /&gt;
* Exchange Server 2010&lt;br /&gt;
* SharePoint Server 2010&lt;br /&gt;
* SharePoint Foundation 2010&lt;br /&gt;
* Project Server 2010&lt;br /&gt;
* Lync Server 2010&lt;br /&gt;
&lt;br /&gt;
These products were designed with higher availability, improved scalability and virtualised deployments in mind.&lt;br /&gt;
&lt;br /&gt;
=== Database Platform ===&lt;br /&gt;
&lt;br /&gt;
* SQL Server 2008&lt;br /&gt;
* SQL Server 2008 R2&lt;br /&gt;
&lt;br /&gt;
The SQL platform expanded significantly and became increasingly integrated with reporting, analytics and management services.&lt;br /&gt;
&lt;br /&gt;
=== Security and Identity ===&lt;br /&gt;
&lt;br /&gt;
* Forefront Identity Manager 2010&lt;br /&gt;
* Forefront Threat Management Gateway 2010&lt;br /&gt;
* Forefront Unified Access Gateway 2010&lt;br /&gt;
* Active Directory Federation Services 2.0&lt;br /&gt;
&lt;br /&gt;
Identity federation and hybrid access began to emerge.&lt;br /&gt;
&lt;br /&gt;
These technologies laid important groundwork for the future cloud identity model.&lt;br /&gt;
&lt;br /&gt;
=== System Center Matures ===&lt;br /&gt;
&lt;br /&gt;
* Configuration Manager 2007 R2/R3&lt;br /&gt;
* Operations Manager 2007 R2&lt;br /&gt;
* Operations Manager 2012&lt;br /&gt;
* Data Protection Manager 2010&lt;br /&gt;
* Data Protection Manager 2012&lt;br /&gt;
* Service Manager 2010&lt;br /&gt;
&lt;br /&gt;
The management ecosystem became sophisticated enough to manage entire virtualised estates.&lt;br /&gt;
&lt;br /&gt;
=== Application Integration ===&lt;br /&gt;
&lt;br /&gt;
* BizTalk Server 2009&lt;br /&gt;
* BizTalk Server 2010&lt;br /&gt;
* Host Integration Server 2009&lt;br /&gt;
* Host Integration Server 2010&lt;br /&gt;
&lt;br /&gt;
Whilst cloud terminology was becoming common, enterprises still needed to integrate legacy systems and business processes.&lt;br /&gt;
&lt;br /&gt;
Microsoft continued investing heavily in integration technologies.&lt;br /&gt;
&lt;br /&gt;
=== Characteristics of the Cloud-Ready Era ===&lt;br /&gt;
&lt;br /&gt;
The Cloud-Ready era was characterised by:&lt;br /&gt;
&lt;br /&gt;
* Virtualisation&lt;br /&gt;
* High availability&lt;br /&gt;
* Service-oriented architecture&lt;br /&gt;
* Federated identity&lt;br /&gt;
* Advanced automation&lt;br /&gt;
* Integrated management&lt;br /&gt;
* Hybrid connectivity&lt;br /&gt;
&lt;br /&gt;
The focus was on preparing infrastructure for cloud computing.&lt;br /&gt;
&lt;br /&gt;
== Product Line Evolution ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Original Product&lt;br /&gt;
! Successor&lt;br /&gt;
! Modern Equivalent&lt;br /&gt;
|-&lt;br /&gt;
| SMS&lt;br /&gt;
| SCCM&lt;br /&gt;
| Microsoft Configuration Manager / Intune&lt;br /&gt;
|-&lt;br /&gt;
| MOM&lt;br /&gt;
| SCOM&lt;br /&gt;
| Azure Monitor&lt;br /&gt;
|-&lt;br /&gt;
| ISA Server&lt;br /&gt;
| TMG&lt;br /&gt;
| Microsoft Defender / Azure networking services&lt;br /&gt;
|-&lt;br /&gt;
| LCS&lt;br /&gt;
| OCS&lt;br /&gt;
| Lync / Teams&lt;br /&gt;
|-&lt;br /&gt;
| Site Server Commerce Edition&lt;br /&gt;
| Commerce Server&lt;br /&gt;
| Modern e-commerce platforms&lt;br /&gt;
|-&lt;br /&gt;
| SNA Server&lt;br /&gt;
| Host Integration Server&lt;br /&gt;
| Azure Integration Services&lt;br /&gt;
|-&lt;br /&gt;
| MIIS&lt;br /&gt;
| ILM / FIM&lt;br /&gt;
| Microsoft Entra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Building a PiRho Lab ==&lt;br /&gt;
&lt;br /&gt;
=== Foundations Lab ===&lt;br /&gt;
&lt;br /&gt;
Recommended focus:&lt;br /&gt;
&lt;br /&gt;
* Active Directory&lt;br /&gt;
* Exchange 2000&lt;br /&gt;
* SQL Server 2000&lt;br /&gt;
* ISA Server 2000&lt;br /&gt;
* SharePoint Portal Server 2001&lt;br /&gt;
&lt;br /&gt;
This environment demonstrates the emergence of Microsoft&#039;s enterprise ecosystem.&lt;br /&gt;
&lt;br /&gt;
=== Unification Lab ===&lt;br /&gt;
&lt;br /&gt;
Recommended focus:&lt;br /&gt;
&lt;br /&gt;
* Windows Server 2003&lt;br /&gt;
* Exchange 2003&lt;br /&gt;
* SQL Server 2005&lt;br /&gt;
* SharePoint 2007&lt;br /&gt;
* SCCM&lt;br /&gt;
* SCOM&lt;br /&gt;
&lt;br /&gt;
This environment demonstrates integrated enterprise platforms.&lt;br /&gt;
&lt;br /&gt;
=== Cloud-Ready Lab ===&lt;br /&gt;
&lt;br /&gt;
Recommended focus:&lt;br /&gt;
&lt;br /&gt;
* Windows Server 2008 R2&lt;br /&gt;
* Hyper-V&lt;br /&gt;
* Exchange 2010&lt;br /&gt;
* SharePoint 2010&lt;br /&gt;
* SQL Server 2008 R2&lt;br /&gt;
* Lync Server 2010&lt;br /&gt;
* System Center&lt;br /&gt;
&lt;br /&gt;
This environment demonstrates the final generation before Microsoft&#039;s cloud-first transition.&lt;br /&gt;
&lt;br /&gt;
== Lessons Learned ==&lt;br /&gt;
&lt;br /&gt;
Looking back across these three generations reveals a clear pattern.&lt;br /&gt;
&lt;br /&gt;
Microsoft spent the Windows 2000 era establishing the foundations of enterprise computing.&lt;br /&gt;
&lt;br /&gt;
The Windows Server 2003 era unified those technologies into coherent platforms.&lt;br /&gt;
&lt;br /&gt;
The Windows Server 2008 era transformed those platforms into highly virtualised, cloud-ready services.&lt;br /&gt;
&lt;br /&gt;
Modern Microsoft technologies such as Azure, Microsoft 365, Entra ID and Teams are not entirely new creations.&lt;br /&gt;
&lt;br /&gt;
They are the descendants of Exchange, SharePoint, Active Directory, Hyper-V and System Center.&lt;br /&gt;
&lt;br /&gt;
Understanding these generations provides valuable insight into how Microsoft&#039;s enterprise ecosystem evolved and why modern architectures look the way they do today.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* Active Directory&lt;br /&gt;
* Exchange Server&lt;br /&gt;
* SharePoint&lt;br /&gt;
* SQL Server&lt;br /&gt;
* Hyper-V&lt;br /&gt;
* System Center&lt;br /&gt;
* Microsoft Identity Technologies&lt;br /&gt;
* Unified Communications&lt;br /&gt;
* Microsoft Cloud Technologies&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* Microsoft Product Documentation&lt;br /&gt;
* Microsoft Learn&lt;br /&gt;
* Microsoft Knowledge Base Archives&lt;br /&gt;
* Product Release Documentation&lt;br /&gt;
* Historical Microsoft TechNet Resources&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=RAID:_Balancing_Capacity,_Performance_and_Resilience&amp;diff=447</id>
		<title>RAID: Balancing Capacity, Performance and Resilience</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=RAID:_Balancing_Capacity,_Performance_and_Resilience&amp;diff=447"/>
		<updated>2026-07-12T19:51:27Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; RAID (Redundant Array of Independent Disks) is a storage technology that combines multiple physical disks into a single logical storage system. While RAID is often associated with fault tolerance and increased capacity, it also influences read performance, write performance, availability, and operational risk. Understanding RAID requires examining the trade-offs between these competing objectives rather than focusing solely on redundancy.  == Context ==  R...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
RAID (Redundant Array of Independent Disks) is a storage technology that combines multiple physical disks into a single logical storage system. While RAID is often associated with fault tolerance and increased capacity, it also influences read performance, write performance, availability, and operational risk. Understanding RAID requires examining the trade-offs between these competing objectives rather than focusing solely on redundancy.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
RAID was developed to overcome the limitations of individual storage devices. A single disk presents several challenges:&lt;br /&gt;
&lt;br /&gt;
* Limited capacity&lt;br /&gt;
* Limited performance&lt;br /&gt;
* A single point of failure&lt;br /&gt;
* Limited scalability&lt;br /&gt;
&lt;br /&gt;
By combining multiple disks, RAID can improve one or more of these characteristics. However, every RAID level represents a compromise. Improvements in one area often come at the expense of another.&lt;br /&gt;
&lt;br /&gt;
A common misconception is that RAID automatically makes storage faster and safer. In reality, different RAID levels are optimized for different goals.&lt;br /&gt;
&lt;br /&gt;
== The Five Core RAID Metrics ==&lt;br /&gt;
&lt;br /&gt;
When evaluating a RAID solution, it is useful to consider five primary metrics:&lt;br /&gt;
&lt;br /&gt;
=== Capacity Efficiency ===&lt;br /&gt;
&lt;br /&gt;
How much of the total installed storage is actually usable?&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
* Four 1 TB disks provide 4 TB raw capacity.&lt;br /&gt;
* RAID 0 provides 4 TB usable capacity.&lt;br /&gt;
* RAID 1 provides 2 TB usable capacity.&lt;br /&gt;
* RAID 5 provides 3 TB usable capacity.&lt;br /&gt;
* RAID 6 provides 2 TB usable capacity.&lt;br /&gt;
&lt;br /&gt;
Capacity is often the easiest metric to understand, but it should never be considered in isolation.&lt;br /&gt;
&lt;br /&gt;
=== Fault Tolerance ===&lt;br /&gt;
&lt;br /&gt;
How many disks can fail before data becomes unavailable?&lt;br /&gt;
&lt;br /&gt;
Different RAID levels provide different levels of protection.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
* RAID 0 tolerates no failures.&lt;br /&gt;
* RAID 1 can survive failure of one disk per mirror pair.&lt;br /&gt;
* RAID 5 can survive one disk failure.&lt;br /&gt;
* RAID 6 can survive two disk failures.&lt;br /&gt;
* RAID 10 can survive multiple failures under certain conditions.&lt;br /&gt;
&lt;br /&gt;
Fault tolerance improves availability but usually reduces usable capacity.&lt;br /&gt;
&lt;br /&gt;
=== Read Performance ===&lt;br /&gt;
&lt;br /&gt;
Read performance is frequently overlooked during RAID discussions.&lt;br /&gt;
&lt;br /&gt;
Many RAID levels provide multiple physical paths from which data can be read.&lt;br /&gt;
&lt;br /&gt;
For example, when data is distributed across multiple disks, separate sections of a file can be read simultaneously.&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Higher throughput&lt;br /&gt;
* Increased parallelism&lt;br /&gt;
* Improved handling of concurrent workloads&lt;br /&gt;
* Reduced read latency in some scenarios&lt;br /&gt;
&lt;br /&gt;
A useful analogy is:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; A single disk is one person searching one filing cabinet.&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;gt; A RAID array can be several people searching several filing cabinets simultaneously.&lt;br /&gt;
&lt;br /&gt;
=== Write Performance ===&lt;br /&gt;
&lt;br /&gt;
Write performance is often more complex than read performance.&lt;br /&gt;
&lt;br /&gt;
While additional disks may increase write throughput, some RAID levels introduce overhead.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Data duplication in RAID 1&lt;br /&gt;
* Parity calculations in RAID 5&lt;br /&gt;
* Dual parity calculations in RAID 6&lt;br /&gt;
&lt;br /&gt;
As a result, write speeds vary significantly between RAID levels.&lt;br /&gt;
&lt;br /&gt;
=== Rebuild Behaviour ===&lt;br /&gt;
&lt;br /&gt;
A rebuild occurs when a failed disk is replaced and lost data must be reconstructed.&lt;br /&gt;
&lt;br /&gt;
Important considerations include:&lt;br /&gt;
&lt;br /&gt;
* Rebuild duration&lt;br /&gt;
* System performance during rebuild&lt;br /&gt;
* Additional stress on surviving disks&lt;br /&gt;
* Probability of a secondary failure&lt;br /&gt;
&lt;br /&gt;
As disk capacities increase, rebuild behaviour becomes increasingly important.&lt;br /&gt;
&lt;br /&gt;
A RAID level that appears attractive during normal operation may become risky during a prolonged rebuild process.&lt;br /&gt;
&lt;br /&gt;
== Understanding Read Paths ==&lt;br /&gt;
&lt;br /&gt;
One of RAID&#039;s lesser-known benefits is the ability to increase the number of available read paths.&lt;br /&gt;
&lt;br /&gt;
With a single disk:&lt;br /&gt;
&lt;br /&gt;
* One storage device performs all read operations.&lt;br /&gt;
&lt;br /&gt;
With RAID:&lt;br /&gt;
&lt;br /&gt;
* Multiple disks may participate in reading data.&lt;br /&gt;
* Read operations can occur in parallel.&lt;br /&gt;
* Separate requests can be serviced simultaneously.&lt;br /&gt;
&lt;br /&gt;
This does not create additional read requests. Instead, it allows the storage subsystem to service more requests concurrently.&lt;br /&gt;
&lt;br /&gt;
This distinction is important:&lt;br /&gt;
&lt;br /&gt;
* RAID increases potential read throughput.&lt;br /&gt;
* RAID increases the number of concurrent read operations that can be serviced.&lt;br /&gt;
* RAID does not inherently increase application demand.&lt;br /&gt;
&lt;br /&gt;
== Common RAID Levels ==&lt;br /&gt;
&lt;br /&gt;
=== RAID 0 (Striping) ===&lt;br /&gt;
&lt;br /&gt;
RAID 0 distributes data across multiple disks.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Maximum capacity efficiency&lt;br /&gt;
* Excellent read performance&lt;br /&gt;
* Excellent write performance&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* No fault tolerance&lt;br /&gt;
* Failure of any disk results in total data loss&lt;br /&gt;
&lt;br /&gt;
RAID 0 should only be used where performance is critical and data loss is acceptable or mitigated through other means.&lt;br /&gt;
&lt;br /&gt;
=== RAID 1 (Mirroring) ===&lt;br /&gt;
&lt;br /&gt;
RAID 1 stores identical copies of data on multiple disks.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Excellent redundancy&lt;br /&gt;
* Improved read performance&lt;br /&gt;
* Simple recovery process&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* 50% capacity efficiency&lt;br /&gt;
* Write performance similar to a single disk&lt;br /&gt;
&lt;br /&gt;
RAID 1 is commonly used for operating system volumes and critical workloads requiring simplicity and reliability.&lt;br /&gt;
&lt;br /&gt;
=== RAID 5 (Striping with Parity) ===&lt;br /&gt;
&lt;br /&gt;
RAID 5 distributes data and parity information across all disks.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Good capacity utilisation&lt;br /&gt;
* Good read performance&lt;br /&gt;
* Protection against a single disk failure&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Parity overhead&lt;br /&gt;
* Slower write performance&lt;br /&gt;
* Increased rebuild risk on large arrays&lt;br /&gt;
&lt;br /&gt;
RAID 5 was historically popular because it balanced capacity, redundancy, and performance.&lt;br /&gt;
&lt;br /&gt;
=== RAID 6 (Striping with Dual Parity) ===&lt;br /&gt;
&lt;br /&gt;
RAID 6 adds a second layer of parity protection.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Can survive two simultaneous disk failures&lt;br /&gt;
* Good read performance&lt;br /&gt;
* Better resilience than RAID 5&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Additional write overhead&lt;br /&gt;
* Reduced usable capacity&lt;br /&gt;
* Longer rebuild times&lt;br /&gt;
&lt;br /&gt;
RAID 6 is commonly used where large arrays require additional protection.&lt;br /&gt;
&lt;br /&gt;
=== RAID 10 (Mirrored Stripes) ===&lt;br /&gt;
&lt;br /&gt;
RAID 10 combines striping and mirroring.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Excellent read performance&lt;br /&gt;
* Excellent write performance&lt;br /&gt;
* Strong fault tolerance&lt;br /&gt;
* Fast rebuilds&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* 50% capacity efficiency&lt;br /&gt;
* Higher hardware costs&lt;br /&gt;
&lt;br /&gt;
RAID 10 is often considered the premium choice for high-performance transactional workloads.&lt;br /&gt;
&lt;br /&gt;
== RAID Comparison ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! RAID Level&lt;br /&gt;
! Capacity&lt;br /&gt;
! Fault Tolerance&lt;br /&gt;
! Read Performance&lt;br /&gt;
! Write Performance&lt;br /&gt;
! Rebuild Risk&lt;br /&gt;
|-&lt;br /&gt;
| RAID 0&lt;br /&gt;
| Excellent&lt;br /&gt;
| None&lt;br /&gt;
| Excellent&lt;br /&gt;
| Excellent&lt;br /&gt;
| Critical&lt;br /&gt;
|-&lt;br /&gt;
| RAID 1&lt;br /&gt;
| 50%&lt;br /&gt;
| High&lt;br /&gt;
| Very Good&lt;br /&gt;
| Moderate&lt;br /&gt;
| Low&lt;br /&gt;
|-&lt;br /&gt;
| RAID 5&lt;br /&gt;
| Good&lt;br /&gt;
| One Disk&lt;br /&gt;
| Good&lt;br /&gt;
| Moderate&lt;br /&gt;
| Moderate to High&lt;br /&gt;
|-&lt;br /&gt;
| RAID 6&lt;br /&gt;
| Fair&lt;br /&gt;
| Two Disks&lt;br /&gt;
| Good&lt;br /&gt;
| Moderate to Poor&lt;br /&gt;
| Moderate&lt;br /&gt;
|-&lt;br /&gt;
| RAID 10&lt;br /&gt;
| 50%&lt;br /&gt;
| High&lt;br /&gt;
| Excellent&lt;br /&gt;
| Very Good&lt;br /&gt;
| Low&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
When selecting a RAID level, avoid asking:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; Which RAID level is best?&lt;br /&gt;
&lt;br /&gt;
Instead ask:&lt;br /&gt;
&lt;br /&gt;
=== What Is Most Important? ===&lt;br /&gt;
&lt;br /&gt;
* Maximum capacity?&lt;br /&gt;
* Maximum performance?&lt;br /&gt;
* Maximum resilience?&lt;br /&gt;
* Lowest cost?&lt;br /&gt;
* Fastest recovery?&lt;br /&gt;
&lt;br /&gt;
Every environment has different priorities.&lt;br /&gt;
&lt;br /&gt;
A media archive may prioritise capacity.&lt;br /&gt;
&lt;br /&gt;
A database server may prioritise write performance.&lt;br /&gt;
&lt;br /&gt;
A virtualisation host may require a balance of all factors.&lt;br /&gt;
&lt;br /&gt;
=== RAID Is Not Backup ===&lt;br /&gt;
&lt;br /&gt;
One of the most dangerous misconceptions in storage design is believing RAID replaces backup.&lt;br /&gt;
&lt;br /&gt;
RAID protects against hardware failure.&lt;br /&gt;
&lt;br /&gt;
Backup protects against:&lt;br /&gt;
&lt;br /&gt;
* Accidental deletion&lt;br /&gt;
* Corruption&lt;br /&gt;
* Malware&lt;br /&gt;
* Ransomware&lt;br /&gt;
* Administrative mistakes&lt;br /&gt;
* Site-wide disasters&lt;br /&gt;
&lt;br /&gt;
A RAID array can fail with perfect redundancy if the wrong data is written to every disk.&lt;br /&gt;
&lt;br /&gt;
== The Six RAID Questions ==&lt;br /&gt;
&lt;br /&gt;
Before choosing any RAID level, ask:&lt;br /&gt;
&lt;br /&gt;
# How much usable capacity do I get?&lt;br /&gt;
# How many disks can fail?&lt;br /&gt;
# How fast are reads?&lt;br /&gt;
# How fast are writes?&lt;br /&gt;
# How difficult is recovery?&lt;br /&gt;
# What is the cost per usable terabyte?&lt;br /&gt;
&lt;br /&gt;
These questions transform RAID selection from a technical preference into an engineering decision.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
RAID is fundamentally about trade-offs.&lt;br /&gt;
&lt;br /&gt;
Every RAID level exchanges one characteristic for another:&lt;br /&gt;
&lt;br /&gt;
* Capacity for redundancy&lt;br /&gt;
* Redundancy for performance&lt;br /&gt;
* Performance for cost&lt;br /&gt;
* Cost for resilience&lt;br /&gt;
&lt;br /&gt;
The most successful storage designs are not those with the highest capacity or greatest fault tolerance, but those that balance performance, resilience, operational risk, and cost in a way that best supports the workload being served.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Storage Architecture]]&lt;br /&gt;
* [[Backup and Recovery]]&lt;br /&gt;
* [[High Availability]]&lt;br /&gt;
* [[SAN vs NAS]]&lt;br /&gt;
* [[Understanding IOPS]]&lt;br /&gt;
* [[Storage Performance Fundamentals]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* RAID Advisory Board (RAB)&lt;br /&gt;
* Various RAID Controller Vendor Documentation&lt;br /&gt;
* Storage Architecture Best Practices&lt;br /&gt;
* Enterprise Storage Design Principles&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Television_EPG_Data:_A_Case_Study_in_Legacy_Metadata&amp;diff=446</id>
		<title>Television EPG Data: A Case Study in Legacy Metadata</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Television_EPG_Data:_A_Case_Study_in_Legacy_Metadata&amp;diff=446"/>
		<updated>2026-07-12T19:45:28Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Electronic Programme Guide (EPG) data appears, at first glance, to be a solved problem. Television schedules have existed for decades, digital broadcasting has been commonplace since the 1990s, and modern IPTV platforms can deliver high-definition content to millions of users across multiple devices. Yet developers attempting to consume EPG data quickly discover a surprising reality: television metadata is often incomplete, inconsistent, poorly structured,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Electronic Programme Guide (EPG) data appears, at first glance, to be a solved problem. Television schedules have existed for decades, digital broadcasting has been commonplace since the 1990s, and modern IPTV platforms can deliver high-definition content to millions of users across multiple devices. Yet developers attempting to consume EPG data quickly discover a surprising reality: television metadata is often incomplete, inconsistent, poorly structured, and difficult to classify.&lt;br /&gt;
&lt;br /&gt;
This article explores why EPG data remains problematic, how the industry arrived at its current state, and why identifying something as simple as a movie can still require a combination of guesswork and heuristics.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
For many developers, the journey begins with a seemingly straightforward requirement:&lt;br /&gt;
&lt;br /&gt;
* Download an EPG feed&lt;br /&gt;
* Import programme listings&lt;br /&gt;
* Identify films&lt;br /&gt;
* Present the data to users&lt;br /&gt;
&lt;br /&gt;
The assumption is usually that every programme entry contains rich metadata describing its content.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;programme&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Jaws&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;Movie&amp;lt;/type&amp;gt;&lt;br /&gt;
    &amp;lt;genre&amp;gt;Thriller&amp;lt;/genre&amp;gt;&lt;br /&gt;
    &amp;lt;year&amp;gt;1975&amp;lt;/year&amp;gt;&lt;br /&gt;
&amp;lt;/programme&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In reality, many freely available EPG feeds look more like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;programme&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Jaws&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;desc&amp;gt;(1975) Roy Scheider stars as a police chief...&amp;lt;/desc&amp;gt;&lt;br /&gt;
&amp;lt;/programme&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The information exists, but it is embedded within human-readable text rather than exposed as structured data.&lt;br /&gt;
&lt;br /&gt;
This creates challenges for:&lt;br /&gt;
&lt;br /&gt;
* IPTV platforms&lt;br /&gt;
* PVR systems&lt;br /&gt;
* Media servers&lt;br /&gt;
* Search engines&lt;br /&gt;
* Recommendation engines&lt;br /&gt;
* Analytics systems&lt;br /&gt;
&lt;br /&gt;
== What is an EPG? ==&lt;br /&gt;
&lt;br /&gt;
An Electronic Programme Guide is a dataset describing television and radio schedules.&lt;br /&gt;
&lt;br /&gt;
At its simplest, an EPG contains:&lt;br /&gt;
&lt;br /&gt;
* Programme title&lt;br /&gt;
* Start time&lt;br /&gt;
* End time&lt;br /&gt;
* Channel&lt;br /&gt;
&lt;br /&gt;
Additional information may include:&lt;br /&gt;
&lt;br /&gt;
* Description&lt;br /&gt;
* Category&lt;br /&gt;
* Genre&lt;br /&gt;
* Cast&lt;br /&gt;
* Rating&lt;br /&gt;
* Episode details&lt;br /&gt;
* Images&lt;br /&gt;
* Series and season numbers&lt;br /&gt;
&lt;br /&gt;
The XMLTV format has become the de facto standard interchange format for EPG data within the open-source community.&lt;br /&gt;
&lt;br /&gt;
A typical XMLTV entry contains:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;programme start=&amp;quot;20260712190000 +0100&amp;quot;&lt;br /&gt;
    stop=&amp;quot;20260712210000 +0100&amp;quot;&lt;br /&gt;
    channel=&amp;quot;film4&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;title&amp;gt;The Great Escape&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;desc&amp;gt;(1963) Allied prisoners attempt a daring escape...&amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/programme&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The specification supports extensive metadata; however, the presence of that metadata depends entirely on the source providing the feed.&lt;br /&gt;
&lt;br /&gt;
== The Origins of the Problem ==&lt;br /&gt;
&lt;br /&gt;
To understand the shortcomings of modern EPG data, it is necessary to understand its origins.&lt;br /&gt;
&lt;br /&gt;
Electronic programme information was not originally designed to power search engines, recommendation systems, machine learning platforms, or content discovery applications.&lt;br /&gt;
&lt;br /&gt;
It was designed to power:&lt;br /&gt;
&lt;br /&gt;
* Teletext&lt;br /&gt;
* Set-top boxes&lt;br /&gt;
* Electronic programme guides&lt;br /&gt;
* Basic recording systems&lt;br /&gt;
&lt;br /&gt;
The primary requirements were simple:&lt;br /&gt;
&lt;br /&gt;
# What is currently on?&lt;br /&gt;
# What is on next?&lt;br /&gt;
# When does it start?&lt;br /&gt;
# When does it end?&lt;br /&gt;
&lt;br /&gt;
Everything else was considered optional.&lt;br /&gt;
&lt;br /&gt;
As a result, many metadata systems evolved around presentation rather than structured classification.&lt;br /&gt;
&lt;br /&gt;
== The Legacy Metadata Trap ==&lt;br /&gt;
&lt;br /&gt;
Many broadcasters maintain rich internal databases describing their content.&lt;br /&gt;
&lt;br /&gt;
Internally they may know:&lt;br /&gt;
&lt;br /&gt;
* Programme type&lt;br /&gt;
* Production company&lt;br /&gt;
* Genre&lt;br /&gt;
* Sub-genre&lt;br /&gt;
* Contributors&lt;br /&gt;
* Release year&lt;br /&gt;
* Awards&lt;br /&gt;
* Content warnings&lt;br /&gt;
&lt;br /&gt;
However, this information often passes through multiple systems before reaching end users.&lt;br /&gt;
&lt;br /&gt;
The pipeline typically resembles:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Broadcaster&lt;br /&gt;
    ↓&lt;br /&gt;
Metadata Supplier&lt;br /&gt;
    ↓&lt;br /&gt;
EPG Aggregator&lt;br /&gt;
    ↓&lt;br /&gt;
Platform Provider&lt;br /&gt;
    ↓&lt;br /&gt;
Consumer Application&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At each stage information may be:&lt;br /&gt;
&lt;br /&gt;
* Simplified&lt;br /&gt;
* Reformatted&lt;br /&gt;
* Lost&lt;br /&gt;
* Reinterpreted&lt;br /&gt;
&lt;br /&gt;
The result is that downstream consumers frequently receive a reduced version of the original metadata.&lt;br /&gt;
&lt;br /&gt;
== The Movie Identification Problem ==&lt;br /&gt;
&lt;br /&gt;
A practical example illustrates the issue.&lt;br /&gt;
&lt;br /&gt;
Suppose we wish to identify all movies in an EPG feed.&lt;br /&gt;
&lt;br /&gt;
Ideally we would simply query:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($programme-&amp;gt;type == &amp;quot;Movie&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    // Film detected&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately this field is often unavailable.&lt;br /&gt;
&lt;br /&gt;
Developers therefore resort to heuristics.&lt;br /&gt;
&lt;br /&gt;
=== Duration-Based Detection ===&lt;br /&gt;
&lt;br /&gt;
Movies are generally longer than television programmes.&lt;br /&gt;
&lt;br /&gt;
A simplistic approach might be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($duration &amp;gt; 90)&lt;br /&gt;
{&lt;br /&gt;
    $isMovie = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works surprisingly often.&lt;br /&gt;
&lt;br /&gt;
However, it also captures:&lt;br /&gt;
&lt;br /&gt;
* Sporting events&lt;br /&gt;
* Award ceremonies&lt;br /&gt;
* Concerts&lt;br /&gt;
* Extended documentaries&lt;br /&gt;
&lt;br /&gt;
=== Description Analysis ===&lt;br /&gt;
&lt;br /&gt;
Many listings include a release year.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(2019) Elton John&#039;s rise to fame...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(1989) Tom Hanks stars...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows detection using pattern matching:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(preg_match(&#039;/^\([0-9]{4}\)/&#039;, $description))&lt;br /&gt;
{&lt;br /&gt;
    $isMovie = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While effective, it remains a workaround rather than a reliable solution.&lt;br /&gt;
&lt;br /&gt;
=== Channel-Based Detection ===&lt;br /&gt;
&lt;br /&gt;
Movie-focused channels provide another clue.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Film4&lt;br /&gt;
* GREAT! Movies&lt;br /&gt;
* Movies24&lt;br /&gt;
* Talking Pictures TV&lt;br /&gt;
&lt;br /&gt;
A two-hour programme on a dedicated movie channel is highly likely to be a film.&lt;br /&gt;
&lt;br /&gt;
Again, however, this is inference rather than structured classification.&lt;br /&gt;
&lt;br /&gt;
== Why IPTV Did Not Solve the Problem ==&lt;br /&gt;
&lt;br /&gt;
Many people assume IPTV introduced a fresh start.&lt;br /&gt;
&lt;br /&gt;
In reality, IPTV largely inherited the metadata ecosystem created by traditional broadcasting.&lt;br /&gt;
&lt;br /&gt;
The primary innovation of IPTV was the transport mechanism rather than the programme information itself.&lt;br /&gt;
&lt;br /&gt;
An IPTV platform often receives schedule data from third-party suppliers rather than generating metadata independently.&lt;br /&gt;
&lt;br /&gt;
Consequently:&lt;br /&gt;
&lt;br /&gt;
* Poor metadata enters the platform.&lt;br /&gt;
* Poor metadata leaves the platform.&lt;br /&gt;
&lt;br /&gt;
The transport became modern.&lt;br /&gt;
&lt;br /&gt;
The metadata often remained legacy.&lt;br /&gt;
&lt;br /&gt;
This explains the curious situation where a service can stream:&lt;br /&gt;
&lt;br /&gt;
* 4K UHD&lt;br /&gt;
* HDR&lt;br /&gt;
* Dolby Atmos&lt;br /&gt;
* Multi-device playback&lt;br /&gt;
* Cloud recording&lt;br /&gt;
&lt;br /&gt;
while still struggling to reliably determine whether a programme is a movie.&lt;br /&gt;
&lt;br /&gt;
== Comparing Television and Music Metadata ==&lt;br /&gt;
&lt;br /&gt;
The contrast with music services is striking.&lt;br /&gt;
&lt;br /&gt;
Modern music platforms usually understand:&lt;br /&gt;
&lt;br /&gt;
* Artist&lt;br /&gt;
* Album&lt;br /&gt;
* Genre&lt;br /&gt;
* Track duration&lt;br /&gt;
* Composer&lt;br /&gt;
* Release date&lt;br /&gt;
* Label&lt;br /&gt;
&lt;br /&gt;
These attributes are well understood and consistently represented.&lt;br /&gt;
&lt;br /&gt;
Television metadata remains considerably less standardised.&lt;br /&gt;
&lt;br /&gt;
In many EPG feeds, the distinction between:&lt;br /&gt;
&lt;br /&gt;
* Film&lt;br /&gt;
* Drama&lt;br /&gt;
* Documentary&lt;br /&gt;
* Special Event&lt;br /&gt;
* Miniseries&lt;br /&gt;
&lt;br /&gt;
may exist only within free-text descriptions.&lt;br /&gt;
&lt;br /&gt;
== Why Free EPG Feeds Are Often Limited ==&lt;br /&gt;
&lt;br /&gt;
Free EPG providers face a difficult challenge.&lt;br /&gt;
&lt;br /&gt;
They must gather information from:&lt;br /&gt;
&lt;br /&gt;
* Broadcast streams&lt;br /&gt;
* Public listings&lt;br /&gt;
* Multiple regional variants&lt;br /&gt;
* Different metadata formats&lt;br /&gt;
&lt;br /&gt;
While maintaining a freely accessible service.&lt;br /&gt;
&lt;br /&gt;
As a result, many free feeds prioritise:&lt;br /&gt;
&lt;br /&gt;
* Accuracy of schedule times&lt;br /&gt;
* Broad channel coverage&lt;br /&gt;
* Automated generation&lt;br /&gt;
&lt;br /&gt;
over deep metadata enrichment.&lt;br /&gt;
&lt;br /&gt;
This is entirely understandable.&lt;br /&gt;
&lt;br /&gt;
Maintaining schedule accuracy across hundreds of channels is already a significant undertaking.&lt;br /&gt;
&lt;br /&gt;
== Practical Strategies for Developers ==&lt;br /&gt;
&lt;br /&gt;
When consuming EPG data, developers should assume metadata quality will vary.&lt;br /&gt;
&lt;br /&gt;
A robust solution typically combines several approaches:&lt;br /&gt;
&lt;br /&gt;
=== Layer 1: Explicit Metadata ===&lt;br /&gt;
&lt;br /&gt;
Use category and genre information when available.&lt;br /&gt;
&lt;br /&gt;
=== Layer 2: Description Parsing ===&lt;br /&gt;
&lt;br /&gt;
Extract:&lt;br /&gt;
&lt;br /&gt;
* Release years&lt;br /&gt;
* Keywords&lt;br /&gt;
* Content ratings&lt;br /&gt;
&lt;br /&gt;
from programme descriptions.&lt;br /&gt;
&lt;br /&gt;
=== Layer 3: Duration Analysis ===&lt;br /&gt;
&lt;br /&gt;
Use runtime thresholds to identify likely long-form content.&lt;br /&gt;
&lt;br /&gt;
=== Layer 4: Channel Classification ===&lt;br /&gt;
&lt;br /&gt;
Maintain channel-specific rules where appropriate.&lt;br /&gt;
&lt;br /&gt;
=== Layer 5: External Enrichment ===&lt;br /&gt;
&lt;br /&gt;
Supplement EPG data using:&lt;br /&gt;
&lt;br /&gt;
* Media databases&lt;br /&gt;
* Broadcaster APIs&lt;br /&gt;
* Content discovery platforms&lt;br /&gt;
&lt;br /&gt;
This transforms schedule data into a richer catalogue.&lt;br /&gt;
&lt;br /&gt;
== Design and Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
When building systems around EPG data:&lt;br /&gt;
&lt;br /&gt;
=== Expect Inconsistency ===&lt;br /&gt;
&lt;br /&gt;
Never assume every field exists.&lt;br /&gt;
&lt;br /&gt;
=== Preserve Original Data ===&lt;br /&gt;
&lt;br /&gt;
Store raw source data for auditing and reprocessing.&lt;br /&gt;
&lt;br /&gt;
=== Separate Classification Logic ===&lt;br /&gt;
&lt;br /&gt;
Avoid embedding assumptions throughout application code.&lt;br /&gt;
&lt;br /&gt;
Instead:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Raw EPG&lt;br /&gt;
    ↓&lt;br /&gt;
Normalisation&lt;br /&gt;
    ↓&lt;br /&gt;
Classification&lt;br /&gt;
    ↓&lt;br /&gt;
Presentation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This allows heuristics to evolve without re-importing data.&lt;br /&gt;
&lt;br /&gt;
=== Measure Confidence ===&lt;br /&gt;
&lt;br /&gt;
Rather than storing:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Movie = True&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
consider:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Movie Confidence = 92%&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This better reflects the uncertainty inherent in many EPG sources.&lt;br /&gt;
&lt;br /&gt;
== The Great Irony ==&lt;br /&gt;
&lt;br /&gt;
Perhaps the most interesting aspect of television metadata is that the content delivery systems have evolved dramatically while the descriptive data often has not.&lt;br /&gt;
&lt;br /&gt;
Over the last few decades we have moved from:&lt;br /&gt;
&lt;br /&gt;
* Analogue broadcasts&lt;br /&gt;
* Digital television&lt;br /&gt;
* Satellite platforms&lt;br /&gt;
* Cable systems&lt;br /&gt;
* IPTV&lt;br /&gt;
* Streaming&lt;br /&gt;
&lt;br /&gt;
Yet developers still frequently identify films using little more than:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$runtime &amp;gt; 90&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
strpos($description, &#039;(2024)&#039;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For an industry capable of delivering ultra-high-definition video globally, this can feel surprisingly primitive.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Electronic Programme Guide data is an excellent example of legacy metadata surviving within modern systems.&lt;br /&gt;
&lt;br /&gt;
The challenge is not the transport of television content. Modern platforms solved that problem years ago.&lt;br /&gt;
&lt;br /&gt;
The challenge is describing that content consistently.&lt;br /&gt;
&lt;br /&gt;
For developers, system architects, and data engineers, EPG data serves as a valuable reminder that structured information is often more difficult to obtain than the content itself.&lt;br /&gt;
&lt;br /&gt;
Sometimes the most challenging part of a television platform is not delivering the programme.&lt;br /&gt;
&lt;br /&gt;
It is simply determining what the programme actually is.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[XMLTV]]&lt;br /&gt;
* [[Electronic Programme Guides]]&lt;br /&gt;
* [[IPTV Architecture]]&lt;br /&gt;
* [[DVB Standards]]&lt;br /&gt;
* [[Metadata Normalisation]]&lt;br /&gt;
* [[Data Classification]]&lt;br /&gt;
* [[Media Information Systems]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* XMLTV Project&lt;br /&gt;
* DVB Service Information Specification&lt;br /&gt;
* Freeview Broadcast Metadata Standards&lt;br /&gt;
* BBC Programmes API&lt;br /&gt;
* IPTV Electronic Programme Guide Systems&lt;br /&gt;
* Digital Television Service Information Standards&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=The_Evolution_of_LTO,_Storage_Interfaces_and_the_Backup_Landscape&amp;diff=445</id>
		<title>The Evolution of LTO, Storage Interfaces and the Backup Landscape</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=The_Evolution_of_LTO,_Storage_Interfaces_and_the_Backup_Landscape&amp;diff=445"/>
		<updated>2026-07-12T19:40:41Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; The history of backup technology is a story of ever-growing data volumes, changing business requirements, and the constant need to protect information against failure, disaster, and human error. From magnetic tape reels and serial interfaces to modern LTO libraries connected via SAS and Fibre Channel, storage technology has evolved dramatically. Yet despite the rise of cloud storage, disk arrays, and object storage platforms, tape remains a cornerstone of...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
The history of backup technology is a story of ever-growing data volumes, changing business requirements, and the constant need to protect information against failure, disaster, and human error. From magnetic tape reels and serial interfaces to modern LTO libraries connected via SAS and Fibre Channel, storage technology has evolved dramatically. Yet despite the rise of cloud storage, disk arrays, and object storage platforms, tape remains a cornerstone of long-term data protection.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Every generation of computing has produced more data than the generation before it.&lt;br /&gt;
&lt;br /&gt;
Early systems measured storage in kilobytes and megabytes. Modern organisations routinely handle terabytes and petabytes. Alongside this growth came an equally important challenge:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
How do we preserve data safely, reliably, and economically?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Backup technology has continuously adapted to meet this requirement.&lt;br /&gt;
&lt;br /&gt;
The backup landscape has been shaped by three major factors:&lt;br /&gt;
&lt;br /&gt;
* Storage capacity growth&lt;br /&gt;
* Interface and connectivity improvements&lt;br /&gt;
* Changing disaster recovery requirements&lt;br /&gt;
&lt;br /&gt;
While the technologies have changed, the principles have remained remarkably consistent:&lt;br /&gt;
&lt;br /&gt;
* Maintain multiple copies&lt;br /&gt;
* Store copies on different media&lt;br /&gt;
* Keep at least one copy offline&lt;br /&gt;
&lt;br /&gt;
== A Brief History of Backup Media ==&lt;br /&gt;
&lt;br /&gt;
=== Reel-to-Reel Tape ===&lt;br /&gt;
&lt;br /&gt;
Long before hard drives became commonplace, computers used large magnetic tape reels.&lt;br /&gt;
&lt;br /&gt;
These systems offered:&lt;br /&gt;
&lt;br /&gt;
* Sequential storage&lt;br /&gt;
* Relatively high capacities for the era&lt;br /&gt;
* Low cost per megabyte&lt;br /&gt;
&lt;br /&gt;
The downside was access speed.&lt;br /&gt;
&lt;br /&gt;
Finding a file often involved physically winding through the tape to the correct position.&lt;br /&gt;
&lt;br /&gt;
Nevertheless, tape established itself as a trustworthy archival medium and laid the foundation for decades of backup practices.&lt;br /&gt;
&lt;br /&gt;
=== Cartridge Tape Systems ===&lt;br /&gt;
&lt;br /&gt;
As computing became more widespread, reel systems gradually gave way to cartridge-based formats.&lt;br /&gt;
&lt;br /&gt;
Examples included:&lt;br /&gt;
&lt;br /&gt;
* QIC (Quarter-Inch Cartridge)&lt;br /&gt;
* DAT (Digital Audio Tape)&lt;br /&gt;
* DLT (Digital Linear Tape)&lt;br /&gt;
* SDLT (Super DLT)&lt;br /&gt;
&lt;br /&gt;
These technologies improved:&lt;br /&gt;
&lt;br /&gt;
* Reliability&lt;br /&gt;
* Portability&lt;br /&gt;
* Capacity&lt;br /&gt;
* Ease of handling&lt;br /&gt;
&lt;br /&gt;
By the late 1990s, however, the industry faced a problem.&lt;br /&gt;
&lt;br /&gt;
Numerous competing tape standards existed, leading to compatibility and vendor lock-in concerns.&lt;br /&gt;
&lt;br /&gt;
== The Birth of LTO ==&lt;br /&gt;
&lt;br /&gt;
=== The Industry Collaboration ===&lt;br /&gt;
&lt;br /&gt;
Linear Tape-Open (LTO) was introduced in 2000.&lt;br /&gt;
&lt;br /&gt;
Unlike proprietary tape formats, LTO was created through collaboration between:&lt;br /&gt;
&lt;br /&gt;
* IBM&lt;br /&gt;
* Hewlett-Packard&lt;br /&gt;
* Seagate&lt;br /&gt;
&lt;br /&gt;
The objective was simple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create an open tape standard that multiple manufacturers could support.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This approach provided customers with:&lt;br /&gt;
&lt;br /&gt;
* Greater vendor choice&lt;br /&gt;
* Improved interoperability&lt;br /&gt;
* Long-term investment protection&lt;br /&gt;
&lt;br /&gt;
The tape cartridge became known as &#039;&#039;&#039;LTO Ultrium&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== LTO Generations ===&lt;br /&gt;
&lt;br /&gt;
One of LTO&#039;s greatest strengths has been its predictable roadmap.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Generation&lt;br /&gt;
! Native Capacity&lt;br /&gt;
! Compressed Capacity&lt;br /&gt;
|-&lt;br /&gt;
| LTO-1&lt;br /&gt;
| 100 GB&lt;br /&gt;
| 200 GB&lt;br /&gt;
|-&lt;br /&gt;
| LTO-2&lt;br /&gt;
| 200 GB&lt;br /&gt;
| 400 GB&lt;br /&gt;
|-&lt;br /&gt;
| LTO-3&lt;br /&gt;
| 400 GB&lt;br /&gt;
| 800 GB&lt;br /&gt;
|-&lt;br /&gt;
| LTO-4&lt;br /&gt;
| 800 GB&lt;br /&gt;
| 1.6 TB&lt;br /&gt;
|-&lt;br /&gt;
| LTO-5&lt;br /&gt;
| 1.5 TB&lt;br /&gt;
| 3 TB&lt;br /&gt;
|-&lt;br /&gt;
| LTO-6&lt;br /&gt;
| 2.5 TB&lt;br /&gt;
| 6.25 TB&lt;br /&gt;
|-&lt;br /&gt;
| LTO-7&lt;br /&gt;
| 6 TB&lt;br /&gt;
| 15 TB&lt;br /&gt;
|-&lt;br /&gt;
| LTO-8&lt;br /&gt;
| 12 TB&lt;br /&gt;
| 30 TB&lt;br /&gt;
|-&lt;br /&gt;
| LTO-9&lt;br /&gt;
| 18 TB&lt;br /&gt;
| 45 TB&lt;br /&gt;
|-&lt;br /&gt;
| LTO-10*&lt;br /&gt;
| 36 TB&lt;br /&gt;
| 90 TB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;small&amp;gt;*Roadmap figures may change as products reach market.&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What began as a 100 GB medium has evolved into a platform capable of storing tens of terabytes per cartridge.&lt;br /&gt;
&lt;br /&gt;
== Storage Interfaces Through the Years ==&lt;br /&gt;
&lt;br /&gt;
The evolution of backup media cannot be separated from the evolution of storage connectivity.&lt;br /&gt;
&lt;br /&gt;
A backup device is only as efficient as its connection to the host system.&lt;br /&gt;
&lt;br /&gt;
=== Serial and Parallel Interfaces ===&lt;br /&gt;
&lt;br /&gt;
Early storage devices relied on interfaces such as:&lt;br /&gt;
&lt;br /&gt;
* RS-232&lt;br /&gt;
* Parallel Port&lt;br /&gt;
* SCSI&lt;br /&gt;
&lt;br /&gt;
SCSI became particularly important.&lt;br /&gt;
&lt;br /&gt;
For many years, tape drives, scanners, disks, and optical storage all relied on SCSI.&lt;br /&gt;
&lt;br /&gt;
Data centre administrators became very familiar with:&lt;br /&gt;
&lt;br /&gt;
* SCSI IDs&lt;br /&gt;
* Termination&lt;br /&gt;
* Bus lengths&lt;br /&gt;
* Cable quality&lt;br /&gt;
&lt;br /&gt;
SCSI was powerful, but configuring it could be an art form.&lt;br /&gt;
&lt;br /&gt;
=== IDE and ATA ===&lt;br /&gt;
&lt;br /&gt;
Desktop systems largely adopted:&lt;br /&gt;
&lt;br /&gt;
* IDE&lt;br /&gt;
* ATA&lt;br /&gt;
* EIDE&lt;br /&gt;
&lt;br /&gt;
These technologies provided affordable mass storage but were rarely used for enterprise tape systems.&lt;br /&gt;
&lt;br /&gt;
They were designed primarily with hard drives in mind.&lt;br /&gt;
&lt;br /&gt;
=== SATA ===&lt;br /&gt;
&lt;br /&gt;
Serial ATA replaced traditional IDE.&lt;br /&gt;
&lt;br /&gt;
Benefits included:&lt;br /&gt;
&lt;br /&gt;
* Simpler cabling&lt;br /&gt;
* Higher transfer speeds&lt;br /&gt;
* Better airflow&lt;br /&gt;
* Lower cost&lt;br /&gt;
&lt;br /&gt;
SATA became dominant for consumer and entry-level business storage.&lt;br /&gt;
&lt;br /&gt;
For backup repositories and disk-based backup appliances, SATA proved transformative.&lt;br /&gt;
&lt;br /&gt;
=== SAS ===&lt;br /&gt;
&lt;br /&gt;
Serial Attached SCSI (SAS) became the natural successor to enterprise SCSI systems.&lt;br /&gt;
&lt;br /&gt;
Most modern standalone LTO drives use SAS connectivity.&lt;br /&gt;
&lt;br /&gt;
Advantages include:&lt;br /&gt;
&lt;br /&gt;
* High reliability&lt;br /&gt;
* Dual-port capabilities&lt;br /&gt;
* Long cable support&lt;br /&gt;
* Enterprise-grade performance&lt;br /&gt;
&lt;br /&gt;
For many years, if you purchased an internal LTO drive, you almost certainly needed a SAS HBA.&lt;br /&gt;
&lt;br /&gt;
Even today, most LTO-7, LTO-8 and LTO-9 drives remain SAS-based internally.&lt;br /&gt;
&lt;br /&gt;
=== USB and Thunderbolt ===&lt;br /&gt;
&lt;br /&gt;
The appearance of USB changed removable storage forever.&lt;br /&gt;
&lt;br /&gt;
USB 1.1 and USB 2.0 made external devices easy to connect but offered limited bandwidth.&lt;br /&gt;
&lt;br /&gt;
USB 3.0 was a genuine game changer.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Interface&lt;br /&gt;
! Theoretical Maximum&lt;br /&gt;
|-&lt;br /&gt;
| USB 2.0&lt;br /&gt;
| 480 Mbps&lt;br /&gt;
|-&lt;br /&gt;
| USB 3.0&lt;br /&gt;
| 5 Gbps&lt;br /&gt;
|-&lt;br /&gt;
| USB 3.1 Gen 2&lt;br /&gt;
| 10 Gbps&lt;br /&gt;
|-&lt;br /&gt;
| USB 3.2&lt;br /&gt;
| 20 Gbps&lt;br /&gt;
|-&lt;br /&gt;
| Thunderbolt 3&lt;br /&gt;
| 40 Gbps&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the first time, external storage could achieve speeds approaching internal devices.&lt;br /&gt;
&lt;br /&gt;
This enabled vendors to produce:&lt;br /&gt;
&lt;br /&gt;
* External LTO drives&lt;br /&gt;
* Portable RAID arrays&lt;br /&gt;
* High-performance backup appliances&lt;br /&gt;
&lt;br /&gt;
without relying on specialist server interfaces.&lt;br /&gt;
&lt;br /&gt;
=== Fibre Channel ===&lt;br /&gt;
&lt;br /&gt;
Large enterprises took a different path.&lt;br /&gt;
&lt;br /&gt;
Instead of direct-attached storage, they adopted Storage Area Networks (SANs).&lt;br /&gt;
&lt;br /&gt;
Fibre Channel provided:&lt;br /&gt;
&lt;br /&gt;
* Extremely low latency&lt;br /&gt;
* High throughput&lt;br /&gt;
* Large-scale connectivity&lt;br /&gt;
* Shared access to storage resources&lt;br /&gt;
&lt;br /&gt;
Many enterprise tape libraries continue to utilise Fibre Channel today.&lt;br /&gt;
&lt;br /&gt;
== The Rise of Disk-Based Backup ==&lt;br /&gt;
&lt;br /&gt;
For decades, tape was the backup medium.&lt;br /&gt;
&lt;br /&gt;
Then hard drives became inexpensive.&lt;br /&gt;
&lt;br /&gt;
Backup software vendors introduced:&lt;br /&gt;
&lt;br /&gt;
* Backup-to-disk&lt;br /&gt;
* Virtual tape libraries (VTLs)&lt;br /&gt;
* Deduplication appliances&lt;br /&gt;
&lt;br /&gt;
Products such as Data Domain transformed the market.&lt;br /&gt;
&lt;br /&gt;
Benefits included:&lt;br /&gt;
&lt;br /&gt;
* Faster restores&lt;br /&gt;
* Random access&lt;br /&gt;
* Shorter backup windows&lt;br /&gt;
&lt;br /&gt;
Organisations increasingly adopted a hybrid strategy:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Production Systems&lt;br /&gt;
        |&lt;br /&gt;
        v&lt;br /&gt;
 Backup Disk Repository&lt;br /&gt;
        |&lt;br /&gt;
        v&lt;br /&gt;
Long-Term Tape Archive&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This combined the speed of disk with the cost efficiency of tape.&lt;br /&gt;
&lt;br /&gt;
== Cloud Storage Changes Everything ==&lt;br /&gt;
&lt;br /&gt;
Cloud storage introduced another major shift.&lt;br /&gt;
&lt;br /&gt;
Services such as:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Azure&lt;br /&gt;
* Amazon S3&lt;br /&gt;
* Google Cloud Storage&lt;br /&gt;
&lt;br /&gt;
enabled off-site storage without transporting physical media.&lt;br /&gt;
&lt;br /&gt;
Advantages included:&lt;br /&gt;
&lt;br /&gt;
* Geographic redundancy&lt;br /&gt;
* Elastic scaling&lt;br /&gt;
* Simplified management&lt;br /&gt;
&lt;br /&gt;
However, cloud storage introduced its own concerns:&lt;br /&gt;
&lt;br /&gt;
* Ongoing operational costs&lt;br /&gt;
* Data egress fees&lt;br /&gt;
* Internet dependency&lt;br /&gt;
* Regulatory considerations&lt;br /&gt;
&lt;br /&gt;
Many organisations therefore use cloud alongside, rather than instead of, tape.&lt;br /&gt;
&lt;br /&gt;
== Why Tape Refuses to Die ==&lt;br /&gt;
&lt;br /&gt;
Every few years, someone predicts the death of tape.&lt;br /&gt;
&lt;br /&gt;
Tape continues to survive because it solves problems that other technologies struggle with.&lt;br /&gt;
&lt;br /&gt;
=== Air-Gapped Protection ===&lt;br /&gt;
&lt;br /&gt;
A tape cartridge disconnected from all networks cannot be encrypted by ransomware.&lt;br /&gt;
&lt;br /&gt;
No internet connection can attack a tape stored in a secure vault.&lt;br /&gt;
&lt;br /&gt;
=== Cost Per Terabyte ===&lt;br /&gt;
&lt;br /&gt;
For long-term retention, tape remains exceptionally economical.&lt;br /&gt;
&lt;br /&gt;
Particularly at petabyte scale, tape often provides the lowest storage cost.&lt;br /&gt;
&lt;br /&gt;
=== Longevity ===&lt;br /&gt;
&lt;br /&gt;
LTO media is commonly rated for decades of archival life when stored correctly.&lt;br /&gt;
&lt;br /&gt;
This makes it attractive for:&lt;br /&gt;
&lt;br /&gt;
* Legal archives&lt;br /&gt;
* Research data&lt;br /&gt;
* Healthcare records&lt;br /&gt;
* Media production&lt;br /&gt;
&lt;br /&gt;
=== Portability ===&lt;br /&gt;
&lt;br /&gt;
A tape cartridge can simply be removed and transported.&lt;br /&gt;
&lt;br /&gt;
No replication link required.&lt;br /&gt;
&lt;br /&gt;
No WAN connection required.&lt;br /&gt;
&lt;br /&gt;
Just a physical cartridge.&lt;br /&gt;
&lt;br /&gt;
== Modern Backup Strategy ==&lt;br /&gt;
&lt;br /&gt;
Today&#039;s best practice usually follows the 3-2-1 principle.&lt;br /&gt;
&lt;br /&gt;
=== Three Copies ===&lt;br /&gt;
&lt;br /&gt;
* Production data&lt;br /&gt;
* Local backup&lt;br /&gt;
* Secondary backup&lt;br /&gt;
&lt;br /&gt;
=== Two Different Media Types ===&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Disk and tape&lt;br /&gt;
* Disk and cloud&lt;br /&gt;
&lt;br /&gt;
=== One Copy Offsite ===&lt;br /&gt;
&lt;br /&gt;
Protection against:&lt;br /&gt;
&lt;br /&gt;
* Fire&lt;br /&gt;
* Flood&lt;br /&gt;
* Theft&lt;br /&gt;
* Infrastructure failure&lt;br /&gt;
&lt;br /&gt;
Many organisations now extend this further to &#039;&#039;&#039;3-2-1-1-0&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* One immutable copy&lt;br /&gt;
* Zero unrecoverable backup errors&lt;br /&gt;
&lt;br /&gt;
== Looking Forward ==&lt;br /&gt;
&lt;br /&gt;
Backup technology continues to evolve.&lt;br /&gt;
&lt;br /&gt;
Future developments may include:&lt;br /&gt;
&lt;br /&gt;
* Larger LTO capacities&lt;br /&gt;
* Greater automation&lt;br /&gt;
* Object-storage integration&lt;br /&gt;
* Cloud-tiered tape archives&lt;br /&gt;
* Enhanced ransomware protection&lt;br /&gt;
&lt;br /&gt;
Yet the fundamental requirement remains unchanged:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Data must survive failure.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Whether stored on tape reels, LTO cartridges, hard drives, SSDs, cloud object stores, or technologies yet to be invented, successful backup solutions will continue to balance three competing demands:&lt;br /&gt;
&lt;br /&gt;
* Capacity&lt;br /&gt;
* Performance&lt;br /&gt;
* Cost&lt;br /&gt;
&lt;br /&gt;
The history of LTO and storage interfaces demonstrates an important lesson:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Technology changes, but sound backup principles endure.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Linear Tape-Open (LTO)]]&lt;br /&gt;
* [[Backup Strategies]]&lt;br /&gt;
* [[Storage Area Networks]]&lt;br /&gt;
* [[Serial Attached SCSI]]&lt;br /&gt;
* [[Fibre Channel]]&lt;br /&gt;
* [[Cloud Storage]]&lt;br /&gt;
* [[Data Archiving]]&lt;br /&gt;
* [[Disaster Recovery]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* LTO Program Technology Roadmap&lt;br /&gt;
* IBM Storage Documentation&lt;br /&gt;
* HPE StoreEver Documentation&lt;br /&gt;
* Quantum LTO Documentation&lt;br /&gt;
* SNIA Storage Networking Industry Association&lt;br /&gt;
* Fibre Channel Industry Standards&lt;br /&gt;
* USB Implementers Forum Specifications&lt;br /&gt;
* Thunderbolt Technology Specifications&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=From_HTML_Template_to_Documentation_Framework&amp;diff=444</id>
		<title>From HTML Template to Documentation Framework</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=From_HTML_Template_to_Documentation_Framework&amp;diff=444"/>
		<updated>2026-07-12T19:37:27Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;= From HTML Template to Documentation Framework =  &amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039;  What began as an attempt to document a robust, standards-compliant HTML template evolved into something much larger: a complete documentation framework for designing web content. Along the way, the focus shifted from individual tags and syntax rules towards broader concerns such as accessibility, internationalization, security, performance, semantics, and machine-readable design. The result is not a singl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= From HTML Template to Documentation Framework =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
What began as an attempt to document a robust, standards-compliant HTML template evolved into something much larger: a complete documentation framework for designing web content. Along the way, the focus shifted from individual tags and syntax rules towards broader concerns such as accessibility, internationalization, security, performance, semantics, and machine-readable design. The result is not a single template, but a structured collection of design patterns intended to promote consistency, longevity, and standards compliance across web projects.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Most web projects start with a simple question:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;How should I structure my HTML page?&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
At first glance, the answer appears straightforward. Define a DOCTYPE, specify a character encoding, add a title, include some CSS and JavaScript, and begin writing content.&lt;br /&gt;
&lt;br /&gt;
However, once you begin investigating how and why these elements exist, things become considerably more interesting.&lt;br /&gt;
&lt;br /&gt;
Questions emerge:&lt;br /&gt;
&lt;br /&gt;
* Which specifications define these requirements?&lt;br /&gt;
* When were they introduced?&lt;br /&gt;
* Are they recommendations or requirements?&lt;br /&gt;
* What is the oldest authoritative reference?&lt;br /&gt;
* How can modern techniques be reconciled with legacy compatibility?&lt;br /&gt;
* What happens when JavaScript is unavailable?&lt;br /&gt;
* How should content be structured for accessibility tools?&lt;br /&gt;
* How can content remain understandable to both humans and machines?&lt;br /&gt;
&lt;br /&gt;
Answering these questions gradually transformed a simple HTML template into a comprehensive documentation framework.&lt;br /&gt;
&lt;br /&gt;
== The Original Goal ==&lt;br /&gt;
&lt;br /&gt;
The initial objective was modest:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Produce an HTML document that can be viewed by as many devices as possible while remaining consistent across products.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Several design principles emerged early:&lt;br /&gt;
&lt;br /&gt;
* Prefer long-established standards wherever possible.&lt;br /&gt;
* Use HTML elements with broad historical compatibility.&lt;br /&gt;
* Design for graceful degradation.&lt;br /&gt;
* Apply progressive enhancement where appropriate.&lt;br /&gt;
* Remain compatible with XHTML serialization.&lt;br /&gt;
* Prioritise machine readability alongside human readability.&lt;br /&gt;
* Support accessibility and internationalization from the outset.&lt;br /&gt;
&lt;br /&gt;
The resulting HTML Document Design Pattern established rules for:&lt;br /&gt;
&lt;br /&gt;
* Document type declarations&lt;br /&gt;
* Language declarations&lt;br /&gt;
* Character encoding&lt;br /&gt;
* XML namespaces&lt;br /&gt;
* Viewport configuration&lt;br /&gt;
* Script loading&lt;br /&gt;
* CSS inclusion&lt;br /&gt;
* Polyglot-compatible markup&lt;br /&gt;
* Fallback behaviour&lt;br /&gt;
&lt;br /&gt;
Rather than relying on convention, each decision was investigated against authoritative specifications.&lt;br /&gt;
&lt;br /&gt;
== Discovering the Importance of Sources ==&lt;br /&gt;
&lt;br /&gt;
One of the most valuable lessons throughout the process was learning the distinction between different types of authority.&lt;br /&gt;
&lt;br /&gt;
=== Specifications ===&lt;br /&gt;
&lt;br /&gt;
Normative requirements published by standards bodies.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* W3C Recommendations&lt;br /&gt;
* HTML Specifications&lt;br /&gt;
* XHTML Specifications&lt;br /&gt;
* WAI-ARIA Specifications&lt;br /&gt;
* RFC Documents&lt;br /&gt;
&lt;br /&gt;
=== Recommendations ===&lt;br /&gt;
&lt;br /&gt;
Guidance published by recognised authorities.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* W3C Internationalization Guidance&lt;br /&gt;
* WAI Accessibility Techniques&lt;br /&gt;
* Browser Vendor Recommendations&lt;br /&gt;
&lt;br /&gt;
=== Conventions ===&lt;br /&gt;
&lt;br /&gt;
Practices that became common through widespread adoption but are not necessarily specified.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Certain SEO techniques&lt;br /&gt;
* Development workflows&lt;br /&gt;
* Coding style preferences&lt;br /&gt;
&lt;br /&gt;
=== Vendor Behaviour ===&lt;br /&gt;
&lt;br /&gt;
Features implemented by browsers before standardisation.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Early viewport meta behaviour&lt;br /&gt;
* Browser-specific extensions&lt;br /&gt;
* Proprietary CSS properties&lt;br /&gt;
&lt;br /&gt;
Understanding these distinctions prevented assumptions from becoming rules.&lt;br /&gt;
&lt;br /&gt;
A recurring theme throughout development became:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If a rule exists, find the specification.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Researching the Foundations ==&lt;br /&gt;
&lt;br /&gt;
A surprising amount of time was spent tracing the origins of common web development practices.&lt;br /&gt;
&lt;br /&gt;
=== The &amp;lt;noscript&amp;gt; Element ===&lt;br /&gt;
&lt;br /&gt;
Many developers know that &amp;lt;code&amp;gt;&amp;lt;noscript&amp;gt;&amp;lt;/code&amp;gt; provides fallback content when scripting is unavailable.&lt;br /&gt;
&lt;br /&gt;
Far fewer know that it appears in HTML 4.01 and was formally defined as an alternate content container for user agents that cannot execute client-side scripts.&lt;br /&gt;
&lt;br /&gt;
=== UTF-8 Character Encoding ===&lt;br /&gt;
&lt;br /&gt;
UTF-8 is often adopted without question.&lt;br /&gt;
&lt;br /&gt;
Investigating its history revealed strong recommendations from the W3C Internationalization Activity, citing worldwide usability, interoperability, and Unicode support as primary reasons for its adoption.&lt;br /&gt;
&lt;br /&gt;
=== Viewport Meta Configuration ===&lt;br /&gt;
&lt;br /&gt;
The viewport meta tag is now considered essential for responsive design.&lt;br /&gt;
&lt;br /&gt;
However, tracing its origins reveals a progression from vendor-specific implementations to later formalisation through CSS Device Adaptation and viewport-related specifications.&lt;br /&gt;
&lt;br /&gt;
=== Boolean Attributes ===&lt;br /&gt;
&lt;br /&gt;
Even seemingly simple syntax choices such as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input disabled=&amp;quot;disabled&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
required investigation.&lt;br /&gt;
&lt;br /&gt;
The distinction between HTML minimised attributes and XML-compliant attribute-value pairs ultimately revealed important XHTML and polyglot compatibility considerations.&lt;br /&gt;
&lt;br /&gt;
== A Natural Separation of Concerns ==&lt;br /&gt;
&lt;br /&gt;
As more topics were documented, another challenge emerged.&lt;br /&gt;
&lt;br /&gt;
The HTML Document Design Pattern was growing rapidly.&lt;br /&gt;
&lt;br /&gt;
Originally intended to describe how to construct a document, it was beginning to accumulate concerns such as:&lt;br /&gt;
&lt;br /&gt;
* Accessibility&lt;br /&gt;
* Semantics&lt;br /&gt;
* Security&lt;br /&gt;
* Internationalization&lt;br /&gt;
* Metadata&lt;br /&gt;
* SEO&lt;br /&gt;
&lt;br /&gt;
It became clear that a single document would eventually become difficult to maintain.&lt;br /&gt;
&lt;br /&gt;
The solution was simple:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Separate concerns into individual design patterns.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This mirrors many established engineering principles.&lt;br /&gt;
&lt;br /&gt;
Just as applications are divided into modules, documentation can be divided into focused patterns.&lt;br /&gt;
&lt;br /&gt;
== The Emerging Framework ==&lt;br /&gt;
&lt;br /&gt;
The original HTML Template document became the foundation of a much larger ecosystem.&lt;br /&gt;
&lt;br /&gt;
=== HTML Document Design Pattern ===&lt;br /&gt;
&lt;br /&gt;
Defines the document itself:&lt;br /&gt;
&lt;br /&gt;
* DOCTYPE&lt;br /&gt;
* Language declarations&lt;br /&gt;
* Namespaces&lt;br /&gt;
* Encoding&lt;br /&gt;
* Scripts&lt;br /&gt;
* Stylesheets&lt;br /&gt;
* Compatibility requirements&lt;br /&gt;
&lt;br /&gt;
=== Structure &amp;amp; Semantics ===&lt;br /&gt;
&lt;br /&gt;
Defines:&lt;br /&gt;
&lt;br /&gt;
* Page hierarchy&lt;br /&gt;
* Document landmarks&lt;br /&gt;
* Heading structures&lt;br /&gt;
* Semantic meaning&lt;br /&gt;
* ARIA role mapping&lt;br /&gt;
&lt;br /&gt;
=== Accessibility ===&lt;br /&gt;
&lt;br /&gt;
Defines:&lt;br /&gt;
&lt;br /&gt;
* WCAG considerations&lt;br /&gt;
* Keyboard navigation&lt;br /&gt;
* Screen-reader compatibility&lt;br /&gt;
* Focus management&lt;br /&gt;
* Alternative content strategies&lt;br /&gt;
&lt;br /&gt;
=== Internationalization &amp;amp; Localization ===&lt;br /&gt;
&lt;br /&gt;
Defines:&lt;br /&gt;
&lt;br /&gt;
* Language declaration rules&lt;br /&gt;
* Bidirectional content&lt;br /&gt;
* Cultural adaptation&lt;br /&gt;
* Regional formatting&lt;br /&gt;
&lt;br /&gt;
=== Metadata, Structured Data &amp;amp; SEO ===&lt;br /&gt;
&lt;br /&gt;
Defines:&lt;br /&gt;
&lt;br /&gt;
* Metadata standards&lt;br /&gt;
* Schema usage&lt;br /&gt;
* Search optimisation&lt;br /&gt;
* Machine-readable content&lt;br /&gt;
&lt;br /&gt;
=== Performance &amp;amp; Loading Optimization ===&lt;br /&gt;
&lt;br /&gt;
Defines:&lt;br /&gt;
&lt;br /&gt;
* Script loading strategies&lt;br /&gt;
* Resource prioritisation&lt;br /&gt;
* Critical rendering optimisation&lt;br /&gt;
* Performance measurement&lt;br /&gt;
&lt;br /&gt;
=== Security Best Practices ===&lt;br /&gt;
&lt;br /&gt;
Defines:&lt;br /&gt;
&lt;br /&gt;
* Content Security Policy&lt;br /&gt;
* Safe markup practices&lt;br /&gt;
* Secure resource loading&lt;br /&gt;
* Attack surface reduction&lt;br /&gt;
&lt;br /&gt;
=== Forms &amp;amp; Input Handling ===&lt;br /&gt;
&lt;br /&gt;
Defines:&lt;br /&gt;
&lt;br /&gt;
* Accessible forms&lt;br /&gt;
* Validation strategies&lt;br /&gt;
* User feedback patterns&lt;br /&gt;
* Data quality considerations&lt;br /&gt;
&lt;br /&gt;
=== Error Handling &amp;amp; Fallbacks ===&lt;br /&gt;
&lt;br /&gt;
Defines:&lt;br /&gt;
&lt;br /&gt;
* Graceful degradation&lt;br /&gt;
* Progressive enhancement&lt;br /&gt;
* Fallback content&lt;br /&gt;
* Recovery mechanisms&lt;br /&gt;
&lt;br /&gt;
=== Testing &amp;amp; Validation ===&lt;br /&gt;
&lt;br /&gt;
Defines:&lt;br /&gt;
&lt;br /&gt;
* Standards compliance&lt;br /&gt;
* Accessibility testing&lt;br /&gt;
* Performance validation&lt;br /&gt;
* Quality assurance procedures&lt;br /&gt;
&lt;br /&gt;
== From Documentation to Knowledgebase ==&lt;br /&gt;
&lt;br /&gt;
At some point, the objective changed.&lt;br /&gt;
&lt;br /&gt;
The goal was no longer:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Create a good HTML template.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The goal became:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&amp;quot;Capture the collective knowledge required to create robust, maintainable, standards-compliant web content.&amp;quot;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The distinction is important.&lt;br /&gt;
&lt;br /&gt;
A template solves a single problem.&lt;br /&gt;
&lt;br /&gt;
A framework captures understanding.&lt;br /&gt;
&lt;br /&gt;
By documenting not only &#039;&#039;what&#039;&#039; should be done, but also &#039;&#039;why&#039;&#039; it should be done and &#039;&#039;where&#039;&#039; those requirements originate, the resulting knowledge becomes portable, maintainable, and teachable.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
What began as a simple effort to document a well-structured HTML page evolved into a standards-first documentation framework.&lt;br /&gt;
&lt;br /&gt;
Tracing specifications, validating assumptions, and separating concerns revealed that modern web development is not merely about writing markup. It is about designing content that remains accessible, understandable, interoperable, and maintainable over time.&lt;br /&gt;
&lt;br /&gt;
The resulting framework provides a roadmap for building web content that serves both people and machines, honours established standards, and remains resilient as technologies continue to evolve.&lt;br /&gt;
&lt;br /&gt;
In the end, the most valuable outcome was not the HTML template itself.&lt;br /&gt;
&lt;br /&gt;
It was the framework of knowledge that grew around it.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[HTML Document Design Pattern]]&lt;br /&gt;
* [[Structure &amp;amp; Semantics]]&lt;br /&gt;
* [[Accessibility]]&lt;br /&gt;
* [[Internationalization &amp;amp; Localization]]&lt;br /&gt;
* [[Metadata, Structured Data &amp;amp; SEO]]&lt;br /&gt;
* [[Performance &amp;amp; Loading Optimization]]&lt;br /&gt;
* [[Security Best Practices]]&lt;br /&gt;
* [[Forms &amp;amp; Input Handling]]&lt;br /&gt;
* [[Error Handling &amp;amp; Fallbacks]]&lt;br /&gt;
* [[Testing &amp;amp; Validation]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Programmatically_Determining_the_Distance_to_the_Sea&amp;diff=443</id>
		<title>Programmatically Determining the Distance to the Sea</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Programmatically_Determining_the_Distance_to_the_Sea&amp;diff=443"/>
		<updated>2026-07-12T19:32:50Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;Determining how far a location is from the sea may appear to be a simple geographical question, but from a software engineering perspective it is an interesting spatial analysis problem. By combining coastline datasets with Geographic Information System (GIS) techniques, it is possible to accurately calculate the shortest distance between any coordinate on Earth and the nearest coastline.  This article explores the datasets, concepts, algorithms, and practical considerat...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Determining how far a location is from the sea may appear to be a simple geographical question, but from a software engineering perspective it is an interesting spatial analysis problem. By combining coastline datasets with Geographic Information System (GIS) techniques, it is possible to accurately calculate the shortest distance between any coordinate on Earth and the nearest coastline.&lt;br /&gt;
&lt;br /&gt;
This article explores the datasets, concepts, algorithms, and practical considerations involved in calculating the distance to the sea programmatically.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Many systems can benefit from knowing how far a location is from the coast.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Property and real estate analysis&lt;br /&gt;
* Flood risk assessment&lt;br /&gt;
* Environmental and wildlife modelling&lt;br /&gt;
* Maritime and logistics systems&lt;br /&gt;
* Tourism applications&lt;br /&gt;
* Geographic reporting and statistics&lt;br /&gt;
* Site suitability studies&lt;br /&gt;
&lt;br /&gt;
At first glance, the problem may seem to require knowledge of beaches, ports, harbours, or place names. In reality, none of these are required.&lt;br /&gt;
&lt;br /&gt;
The challenge can be reduced to a geometry problem:&lt;br /&gt;
&lt;br /&gt;
 Given a coordinate,&lt;br /&gt;
 find the shortest distance to the nearest coastline.&lt;br /&gt;
&lt;br /&gt;
Once the coastline is represented as geographical data, the problem becomes significantly easier to solve.&lt;br /&gt;
&lt;br /&gt;
== Understanding Coastline Data ==&lt;br /&gt;
&lt;br /&gt;
A GIS does not understand the concept of &amp;quot;the beach at Whitstable&amp;quot; or &amp;quot;the Kent coastline&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Instead, it works with coordinates.&lt;br /&gt;
&lt;br /&gt;
Coastline datasets represent the boundary between land and sea using collections of points connected together to form lines and polygons.&lt;br /&gt;
&lt;br /&gt;
Common sources include:&lt;br /&gt;
&lt;br /&gt;
=== Natural Earth ===&lt;br /&gt;
&lt;br /&gt;
A free and widely used mapping dataset suitable for most analytical and visualisation tasks.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Small download size&lt;br /&gt;
* Easy to work with&lt;br /&gt;
* Available in multiple resolutions&lt;br /&gt;
* Suitable for global analysis&lt;br /&gt;
&lt;br /&gt;
=== GSHHG ===&lt;br /&gt;
&lt;br /&gt;
The Global Self-consistent Hierarchical High-resolution Geography Database.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Very high accuracy&lt;br /&gt;
* Suitable for scientific use&lt;br /&gt;
* Multiple resolution levels&lt;br /&gt;
* Includes coastline, rivers, lakes and political boundaries&lt;br /&gt;
&lt;br /&gt;
== How GIS Represents a Coastline ==&lt;br /&gt;
&lt;br /&gt;
A coastline is typically represented using one of the following geometry types:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Coordinate Pair&lt;br /&gt;
       ↓&lt;br /&gt;
&lt;br /&gt;
Point&lt;br /&gt;
       ↓&lt;br /&gt;
&lt;br /&gt;
LineString&lt;br /&gt;
       ↓&lt;br /&gt;
&lt;br /&gt;
MultiLineString&lt;br /&gt;
       ↓&lt;br /&gt;
&lt;br /&gt;
Polygon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Every geometry ultimately consists of latitude and longitude pairs.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(51.283, 1.078)&lt;br /&gt;
(51.284, 1.081)&lt;br /&gt;
(51.285, 1.085)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A complete coastline may contain thousands or even millions of such coordinates.&lt;br /&gt;
&lt;br /&gt;
== The Naive Approach ==&lt;br /&gt;
&lt;br /&gt;
The simplest possible solution is:&lt;br /&gt;
&lt;br /&gt;
# Load every coastline coordinate.&lt;br /&gt;
# Calculate the distance from the target position to every coordinate.&lt;br /&gt;
# Keep the shortest result.&lt;br /&gt;
&lt;br /&gt;
Conceptually:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Target Point&lt;br /&gt;
     │&lt;br /&gt;
     ├── Coast Point 1&lt;br /&gt;
     ├── Coast Point 2&lt;br /&gt;
     ├── Coast Point 3&lt;br /&gt;
     ├── Coast Point 4&lt;br /&gt;
     └── Coast Point n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This approach works.&lt;br /&gt;
&lt;br /&gt;
However, it becomes increasingly inefficient as dataset size grows.&lt;br /&gt;
&lt;br /&gt;
A high-resolution global coastline may contain millions of vertices, resulting in millions of distance calculations per query.&lt;br /&gt;
&lt;br /&gt;
For small projects this may be acceptable.&lt;br /&gt;
&lt;br /&gt;
For large-scale systems it quickly becomes impractical.&lt;br /&gt;
&lt;br /&gt;
== Point-to-Line Distance ==&lt;br /&gt;
&lt;br /&gt;
One of the most important concepts in GIS is understanding that the nearest point on a coastline is often not a stored coordinate.&lt;br /&gt;
&lt;br /&gt;
Consider the following line segment:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
A ---------------- B&lt;br /&gt;
&lt;br /&gt;
         *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The nearest point to the coordinate represented by &amp;quot;*&amp;quot; is unlikely to be either A or B.&lt;br /&gt;
&lt;br /&gt;
Instead, it exists somewhere along the line itself.&lt;br /&gt;
&lt;br /&gt;
Modern GIS software calculates the shortest distance to the geometry rather than simply comparing vertices.&lt;br /&gt;
&lt;br /&gt;
This significantly improves accuracy.&lt;br /&gt;
&lt;br /&gt;
== Spatial Indexing ==&lt;br /&gt;
&lt;br /&gt;
Professional GIS systems rarely examine every coastline coordinate.&lt;br /&gt;
&lt;br /&gt;
Instead, they use spatial indexing.&lt;br /&gt;
&lt;br /&gt;
A spatial index functions similarly to a database index.&lt;br /&gt;
&lt;br /&gt;
Rather than searching every feature, the software uses bounding boxes to quickly eliminate regions that cannot possibly contain the nearest coastline.&lt;br /&gt;
&lt;br /&gt;
A simplified view:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------+&lt;br /&gt;
| Coastline A |&lt;br /&gt;
+-------------+&lt;br /&gt;
&lt;br /&gt;
+-------------+&lt;br /&gt;
| Coastline B |&lt;br /&gt;
+-------------+&lt;br /&gt;
&lt;br /&gt;
+-------------+&lt;br /&gt;
| Coastline C |&lt;br /&gt;
+-------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a target point exists near Coastline C, there is little value in examining Coastline A on the other side of the world.&lt;br /&gt;
&lt;br /&gt;
The spatial index dramatically reduces the number of calculations required.&lt;br /&gt;
&lt;br /&gt;
Common indexing structures include:&lt;br /&gt;
&lt;br /&gt;
* R-Trees&lt;br /&gt;
* Quad Trees&lt;br /&gt;
* KD Trees&lt;br /&gt;
&lt;br /&gt;
These structures allow proximity searches to be performed efficiently, even against very large datasets.&lt;br /&gt;
&lt;br /&gt;
== Coordinate Systems Matter ==&lt;br /&gt;
&lt;br /&gt;
A common mistake is assuming latitude and longitude are distance measurements.&lt;br /&gt;
&lt;br /&gt;
They are not.&lt;br /&gt;
&lt;br /&gt;
Coordinates in WGS84 represent angular positions on a spheroid.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.1°&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
does not represent the same physical distance everywhere on Earth.&lt;br /&gt;
&lt;br /&gt;
The distance represented by one degree of longitude decreases as latitude approaches the poles.&lt;br /&gt;
&lt;br /&gt;
Because of this, distance calculations generally fall into one of two categories.&lt;br /&gt;
&lt;br /&gt;
=== Geographic Coordinates ===&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* WGS84&lt;br /&gt;
* EPSG:4326&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Universal&lt;br /&gt;
* Convenient for storage&lt;br /&gt;
* Works globally&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Distances require geodesic calculations&lt;br /&gt;
&lt;br /&gt;
=== Projected Coordinates ===&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* British National Grid&lt;br /&gt;
* UTM&lt;br /&gt;
* State Plane systems&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Distances can be measured directly&lt;br /&gt;
* Easier for local analysis&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Projection-specific&lt;br /&gt;
* Less suitable for worldwide datasets&lt;br /&gt;
&lt;br /&gt;
For accurate results, care must be taken to select an appropriate coordinate reference system.&lt;br /&gt;
&lt;br /&gt;
== Practical QGIS Workflow ==&lt;br /&gt;
&lt;br /&gt;
QGIS provides several methods for determining the distance to the nearest coastline.&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
Download a coastline dataset.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Natural Earth Coastlines&lt;br /&gt;
* GSHHG Coastlines&lt;br /&gt;
&lt;br /&gt;
=== Step 2 ===&lt;br /&gt;
&lt;br /&gt;
Load the coastline shapefile into QGIS.&lt;br /&gt;
&lt;br /&gt;
=== Step 3 ===&lt;br /&gt;
&lt;br /&gt;
Create or import a point layer containing your target coordinates.&lt;br /&gt;
&lt;br /&gt;
=== Step 4 ===&lt;br /&gt;
&lt;br /&gt;
Use a nearest-neighbour or distance calculation tool.&lt;br /&gt;
&lt;br /&gt;
Possible tools include:&lt;br /&gt;
&lt;br /&gt;
* Distance to Nearest Hub&lt;br /&gt;
* Join Attributes by Nearest&lt;br /&gt;
* Distance Matrix&lt;br /&gt;
&lt;br /&gt;
=== Step 5 ===&lt;br /&gt;
&lt;br /&gt;
Review the calculated distance field.&lt;br /&gt;
&lt;br /&gt;
The result can then be exported as:&lt;br /&gt;
&lt;br /&gt;
* CSV&lt;br /&gt;
* GeoJSON&lt;br /&gt;
* Shapefile&lt;br /&gt;
* Database records&lt;br /&gt;
&lt;br /&gt;
== Programmatic Implementation ==&lt;br /&gt;
&lt;br /&gt;
The workflow followed by most software solutions is straightforward.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Load Coastline Dataset&lt;br /&gt;
          ↓&lt;br /&gt;
&lt;br /&gt;
Load Target Coordinate&lt;br /&gt;
          ↓&lt;br /&gt;
&lt;br /&gt;
Build Spatial Index&lt;br /&gt;
          ↓&lt;br /&gt;
&lt;br /&gt;
Find Nearest Geometry&lt;br /&gt;
          ↓&lt;br /&gt;
&lt;br /&gt;
Calculate Distance&lt;br /&gt;
          ↓&lt;br /&gt;
&lt;br /&gt;
Return Result&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modern GIS libraries such as GeoPandas, Shapely, GDAL and PostGIS provide built-in functionality for these operations.&lt;br /&gt;
&lt;br /&gt;
The application developer typically spends more effort managing projections and data quality than implementing the actual distance calculations.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
When implementing this functionality within production systems, several architectural concerns emerge.&lt;br /&gt;
&lt;br /&gt;
=== Dataset Resolution ===&lt;br /&gt;
&lt;br /&gt;
Higher-resolution coastlines provide greater accuracy.&lt;br /&gt;
&lt;br /&gt;
However:&lt;br /&gt;
&lt;br /&gt;
* Storage requirements increase&lt;br /&gt;
* Processing time increases&lt;br /&gt;
* Memory consumption increases&lt;br /&gt;
&lt;br /&gt;
The appropriate resolution depends upon business requirements.&lt;br /&gt;
&lt;br /&gt;
=== Caching ===&lt;br /&gt;
&lt;br /&gt;
Frequently requested locations may benefit from caching.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* City centres&lt;br /&gt;
* Property searches&lt;br /&gt;
* Popular tourist destinations&lt;br /&gt;
&lt;br /&gt;
Caching can significantly improve performance.&lt;br /&gt;
&lt;br /&gt;
=== Batch Processing ===&lt;br /&gt;
&lt;br /&gt;
Many applications calculate distances for thousands of locations simultaneously.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Environmental surveys&lt;br /&gt;
* Property databases&lt;br /&gt;
* Population studies&lt;br /&gt;
&lt;br /&gt;
Such scenarios often benefit from scheduled batch processing rather than real-time calculations.&lt;br /&gt;
&lt;br /&gt;
=== API Design ===&lt;br /&gt;
&lt;br /&gt;
Distance calculations can be exposed through:&lt;br /&gt;
&lt;br /&gt;
* REST APIs&lt;br /&gt;
* GIS services&lt;br /&gt;
* Database functions&lt;br /&gt;
* Internal application services&lt;br /&gt;
&lt;br /&gt;
Careful API design allows the coastline dataset and processing logic to remain centralised.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Treating Degrees as Distance ===&lt;br /&gt;
&lt;br /&gt;
Latitude and longitude are angular measurements, not linear measurements.&lt;br /&gt;
&lt;br /&gt;
Always ensure calculations use an appropriate geodesic method or projected coordinate system.&lt;br /&gt;
&lt;br /&gt;
=== Ignoring Islands ===&lt;br /&gt;
&lt;br /&gt;
The nearest coastline may belong to an island rather than the mainland.&lt;br /&gt;
&lt;br /&gt;
If the requirement is &amp;quot;distance to the sea&amp;quot;, islands usually matter.&lt;br /&gt;
&lt;br /&gt;
If the requirement is &amp;quot;distance to the mainland&amp;quot;, additional filtering may be required.&lt;br /&gt;
&lt;br /&gt;
=== Using Low Resolution Datasets ===&lt;br /&gt;
&lt;br /&gt;
A heavily simplified coastline may differ significantly from reality.&lt;br /&gt;
&lt;br /&gt;
Errors of several kilometres are possible in some regions.&lt;br /&gt;
&lt;br /&gt;
=== Ignoring Datum Differences ===&lt;br /&gt;
&lt;br /&gt;
Different coordinate systems can introduce subtle positional errors.&lt;br /&gt;
&lt;br /&gt;
Always verify your coordinate reference system.&lt;br /&gt;
&lt;br /&gt;
=== Defining the Coastline Incorrectly ===&lt;br /&gt;
&lt;br /&gt;
A surprisingly difficult question is:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;What exactly counts as the coastline?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Possibilities include:&lt;br /&gt;
&lt;br /&gt;
* Mean sea level&lt;br /&gt;
* High tide line&lt;br /&gt;
* Low tide line&lt;br /&gt;
* Administrative coastline&lt;br /&gt;
* Hydrographic coastline&lt;br /&gt;
&lt;br /&gt;
The answer depends upon the purpose of the analysis.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
When results appear incorrect, investigate:&lt;br /&gt;
&lt;br /&gt;
* Coordinate reference systems&lt;br /&gt;
* Projection settings&lt;br /&gt;
* Input coordinate accuracy&lt;br /&gt;
* Dataset resolution&lt;br /&gt;
* Spatial index configuration&lt;br /&gt;
* Datum transformations&lt;br /&gt;
&lt;br /&gt;
Useful checks include:&lt;br /&gt;
&lt;br /&gt;
* Visualising results on a map&lt;br /&gt;
* Comparing against known locations&lt;br /&gt;
* Testing with coastal and inland points&lt;br /&gt;
* Validating against alternative datasets&lt;br /&gt;
&lt;br /&gt;
== Design Philosophy ==&lt;br /&gt;
&lt;br /&gt;
The interesting aspect of this problem is that it initially appears geographical but is fundamentally geometrical.&lt;br /&gt;
&lt;br /&gt;
The sea itself is not being analysed.&lt;br /&gt;
&lt;br /&gt;
Instead, software is determining the shortest distance between a point and a collection of geometries representing the boundary between land and water.&lt;br /&gt;
&lt;br /&gt;
Once viewed in this way, the problem becomes less about geography and more about data structures, coordinate systems, and spatial mathematics.&lt;br /&gt;
&lt;br /&gt;
This shift in perspective is often the key insight that transforms a seemingly complex GIS challenge into a straightforward engineering problem.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Geographic Information Systems]]&lt;br /&gt;
* [[Coordinate Reference Systems]]&lt;br /&gt;
* [[Spatial Indexing]]&lt;br /&gt;
* [[Geodesic Distance Calculations]]&lt;br /&gt;
* [[Point-in-Polygon Analysis]]&lt;br /&gt;
* [[Reverse Geocoding]]&lt;br /&gt;
* [[Digital Elevation Models]]&lt;br /&gt;
* [[PostGIS]]&lt;br /&gt;
* [[GeoPandas]]&lt;br /&gt;
* [[Shapely]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* Natural Earth Data&lt;br /&gt;
* GSHHG – Global Self-consistent Hierarchical High-resolution Geography Database&lt;br /&gt;
* QGIS Documentation&lt;br /&gt;
* GeoPandas Documentation&lt;br /&gt;
* Shapely Documentation&lt;br /&gt;
* GDAL Documentation&lt;br /&gt;
* PostGIS Documentation&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Not_Everything_Belongs_in_a_Database&amp;diff=442</id>
		<title>Not Everything Belongs in a Database</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Not_Everything_Belongs_in_a_Database&amp;diff=442"/>
		<updated>2026-07-12T19:30:03Z</updated>

		<summary type="html">&lt;p&gt;Dex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039; Understanding Storage Repositories in Enterprise and Cloud Systems &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
One of the most common architectural mistakes made by developers is assuming that every piece of information should be stored in a database.&lt;br /&gt;
&lt;br /&gt;
Need users?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create a Users table.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need files?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create a Files table.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need logs?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create a Logs table.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need permissions?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Add some more tables.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While this approach may work for smaller applications, enterprise and cloud systems quickly reveal its limitations.&lt;br /&gt;
&lt;br /&gt;
The reality is that modern systems rarely rely on a single storage technology. Instead, they employ multiple repositories, each selected because it excels at a particular task.&lt;br /&gt;
&lt;br /&gt;
A large cloud platform might simultaneously use:&lt;br /&gt;
&lt;br /&gt;
* LDAP for identity management&lt;br /&gt;
* SQL databases for business transactions&lt;br /&gt;
* Object storage for files and documents&lt;br /&gt;
* Search indexes for discovery&lt;br /&gt;
* Graph databases for relationships&lt;br /&gt;
* Time-series databases for monitoring and telemetry&lt;br /&gt;
&lt;br /&gt;
The question is not:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Which repository is best?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The real question is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Which repository is best suited to the data being stored?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Understanding the Purpose of a Repository ==&lt;br /&gt;
&lt;br /&gt;
Every repository technology was created to solve a particular problem.&lt;br /&gt;
&lt;br /&gt;
Before selecting a storage technology, architects should ask four fundamental questions:&lt;br /&gt;
&lt;br /&gt;
=== 1. What is being stored? ===&lt;br /&gt;
&lt;br /&gt;
Are you storing:&lt;br /&gt;
&lt;br /&gt;
* User identities?&lt;br /&gt;
* Customer orders?&lt;br /&gt;
* Documents?&lt;br /&gt;
* Media files?&lt;br /&gt;
* Telemetry?&lt;br /&gt;
* Relationships?&lt;br /&gt;
&lt;br /&gt;
Different data types often require different storage technologies.&lt;br /&gt;
&lt;br /&gt;
=== 2. How will it be accessed? ===&lt;br /&gt;
&lt;br /&gt;
Will the system perform:&lt;br /&gt;
&lt;br /&gt;
* Mostly reads?&lt;br /&gt;
* Mostly writes?&lt;br /&gt;
* Full-text searches?&lt;br /&gt;
* Analytics?&lt;br /&gt;
* Transactions?&lt;br /&gt;
&lt;br /&gt;
Storage solutions are often optimized for specific access patterns.&lt;br /&gt;
&lt;br /&gt;
=== 3. How large will it become? ===&lt;br /&gt;
&lt;br /&gt;
A solution designed for thousands of records may struggle with billions.&lt;br /&gt;
&lt;br /&gt;
Scale matters.&lt;br /&gt;
&lt;br /&gt;
=== 4. How important is consistency? ===&lt;br /&gt;
&lt;br /&gt;
Does every transaction need to be immediately correct?&lt;br /&gt;
&lt;br /&gt;
Or is eventual consistency acceptable?&lt;br /&gt;
&lt;br /&gt;
The answer significantly influences repository selection.&lt;br /&gt;
&lt;br /&gt;
== The Enterprise View of Data ==&lt;br /&gt;
&lt;br /&gt;
Enterprise architects typically separate data into several categories:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identity Data&lt;br /&gt;
Business Data&lt;br /&gt;
Content Data&lt;br /&gt;
Operational Data&lt;br /&gt;
Analytical Data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each category tends to have a natural home.&lt;br /&gt;
&lt;br /&gt;
Attempting to force all five categories into a single database often leads to unnecessary complexity, reduced performance, and maintenance difficulties.&lt;br /&gt;
&lt;br /&gt;
== LDAP Directories ==&lt;br /&gt;
&lt;br /&gt;
=== What LDAP Was Designed To Do ===&lt;br /&gt;
&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) is frequently misunderstood.&lt;br /&gt;
&lt;br /&gt;
LDAP is not a database replacement.&lt;br /&gt;
&lt;br /&gt;
It is a directory service designed to answer questions about identities.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Who is this user?&lt;br /&gt;
&lt;br /&gt;
Which groups do they belong to?&lt;br /&gt;
&lt;br /&gt;
What permissions do they have?&lt;br /&gt;
&lt;br /&gt;
Can they authenticate?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These questions are read-heavy and rarely involve complex transactions.&lt;br /&gt;
&lt;br /&gt;
LDAP was specifically engineered for this type of workload.&lt;br /&gt;
&lt;br /&gt;
=== Strengths of LDAP ===&lt;br /&gt;
&lt;br /&gt;
==== Fast Reads ====&lt;br /&gt;
&lt;br /&gt;
Directory services are heavily optimized for lookup operations.&lt;br /&gt;
&lt;br /&gt;
Finding a user, group, or permission is extremely efficient.&lt;br /&gt;
&lt;br /&gt;
==== Hierarchical Structure ====&lt;br /&gt;
&lt;br /&gt;
Directories naturally represent organisational structures.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Company&lt;br /&gt;
└── Departments&lt;br /&gt;
    ├── Finance&lt;br /&gt;
    ├── HR&lt;br /&gt;
    └── IT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Standards-Based ====&lt;br /&gt;
&lt;br /&gt;
LDAP is widely supported by:&lt;br /&gt;
&lt;br /&gt;
* Active Directory&lt;br /&gt;
* OpenLDAP&lt;br /&gt;
* FreeIPA&lt;br /&gt;
* Enterprise Identity Platforms&lt;br /&gt;
&lt;br /&gt;
==== Centralized Identity ====&lt;br /&gt;
&lt;br /&gt;
Multiple applications can authenticate against a single repository.&lt;br /&gt;
&lt;br /&gt;
This creates a true Single Sign-On foundation.&lt;br /&gt;
&lt;br /&gt;
=== Weaknesses of LDAP ===&lt;br /&gt;
&lt;br /&gt;
LDAP is not ideal for:&lt;br /&gt;
&lt;br /&gt;
* Financial transactions&lt;br /&gt;
* Order processing&lt;br /&gt;
* Complex reporting&lt;br /&gt;
* Relational business data&lt;br /&gt;
&lt;br /&gt;
While these tasks are technically possible, they are not what LDAP was designed for.&lt;br /&gt;
&lt;br /&gt;
=== Best Use Cases ===&lt;br /&gt;
&lt;br /&gt;
LDAP excels at:&lt;br /&gt;
&lt;br /&gt;
* Authentication&lt;br /&gt;
* Authorization&lt;br /&gt;
* Identity Management&lt;br /&gt;
* Group Membership&lt;br /&gt;
* Enterprise SSO&lt;br /&gt;
&lt;br /&gt;
== SQL Databases ==&lt;br /&gt;
&lt;br /&gt;
=== What SQL Was Designed To Do ===&lt;br /&gt;
&lt;br /&gt;
Relational databases were designed to model business information.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Customers&lt;br /&gt;
Orders&lt;br /&gt;
Invoices&lt;br /&gt;
Projects&lt;br /&gt;
Assets&lt;br /&gt;
Contracts&lt;br /&gt;
Tickets&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relationships between data are a core strength of SQL systems.&lt;br /&gt;
&lt;br /&gt;
=== Strengths of SQL ===&lt;br /&gt;
&lt;br /&gt;
==== Data Integrity ====&lt;br /&gt;
&lt;br /&gt;
SQL databases provide:&lt;br /&gt;
&lt;br /&gt;
* Constraints&lt;br /&gt;
* Relationships&lt;br /&gt;
* Referential integrity&lt;br /&gt;
&lt;br /&gt;
This ensures that business rules remain enforced.&lt;br /&gt;
&lt;br /&gt;
==== Transactions ====&lt;br /&gt;
&lt;br /&gt;
ACID-compliant databases guarantee consistency.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Transfer £100&lt;br /&gt;
&lt;br /&gt;
Debit Account A&lt;br /&gt;
Credit Account B&lt;br /&gt;
&lt;br /&gt;
Commit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either both actions succeed or neither does.&lt;br /&gt;
&lt;br /&gt;
==== Query Power ====&lt;br /&gt;
&lt;br /&gt;
SQL remains one of the most powerful data query languages ever created.&lt;br /&gt;
&lt;br /&gt;
Complex reporting often requires only a single query.&lt;br /&gt;
&lt;br /&gt;
=== Weaknesses of SQL ===&lt;br /&gt;
&lt;br /&gt;
SQL databases can become challenging when:&lt;br /&gt;
&lt;br /&gt;
* Scaling globally&lt;br /&gt;
* Handling billions of records&lt;br /&gt;
* Managing highly variable schemas&lt;br /&gt;
&lt;br /&gt;
Modern cloud platforms frequently supplement relational systems with specialised repositories.&lt;br /&gt;
&lt;br /&gt;
=== Best Use Cases ===&lt;br /&gt;
&lt;br /&gt;
SQL excels at:&lt;br /&gt;
&lt;br /&gt;
* ERP systems&lt;br /&gt;
* CRM systems&lt;br /&gt;
* E-Commerce&lt;br /&gt;
* Workflow systems&lt;br /&gt;
* Financial systems&lt;br /&gt;
* Business applications&lt;br /&gt;
&lt;br /&gt;
== Why Most Web Applications Store Users in SQL ==&lt;br /&gt;
&lt;br /&gt;
Many developers encounter authentication systems that look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
├── Id&lt;br /&gt;
├── Username&lt;br /&gt;
├── PasswordHash&lt;br /&gt;
├── Email&lt;br /&gt;
└── Role&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For many applications this is entirely acceptable.&lt;br /&gt;
&lt;br /&gt;
A system with:&lt;br /&gt;
&lt;br /&gt;
* 100 users&lt;br /&gt;
* 1,000 users&lt;br /&gt;
* 10,000 users&lt;br /&gt;
&lt;br /&gt;
can operate perfectly well using SQL-based authentication.&lt;br /&gt;
&lt;br /&gt;
The approach is simple, familiar and easy to maintain.&lt;br /&gt;
&lt;br /&gt;
== The Problem Appears Later ==&lt;br /&gt;
&lt;br /&gt;
Imagine an organisation running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRM&lt;br /&gt;
HR&lt;br /&gt;
Finance&lt;br /&gt;
Projects&lt;br /&gt;
Ticketing&lt;br /&gt;
Knowledgebase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If each application maintains its own user table, the organisation inherits several problems:&lt;br /&gt;
&lt;br /&gt;
* Multiple passwords&lt;br /&gt;
* Multiple user accounts&lt;br /&gt;
* Multiple role systems&lt;br /&gt;
* Multiple account lockout policies&lt;br /&gt;
* Multiple password reset processes&lt;br /&gt;
&lt;br /&gt;
Sooner or later someone asks:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Why can&#039;t users just sign in once?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This question is one of the reasons directory services became so important.&lt;br /&gt;
&lt;br /&gt;
== Why Enterprises Prefer LDAP ==&lt;br /&gt;
&lt;br /&gt;
Enterprise environments typically treat Identity as a platform rather than an application feature.&lt;br /&gt;
&lt;br /&gt;
Instead of every application storing users independently:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application A&lt;br /&gt;
Application B&lt;br /&gt;
Application C&lt;br /&gt;
Application D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
all applications authenticate against a common directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Applications&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
Identity Provider&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
LDAP Directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates:&lt;br /&gt;
&lt;br /&gt;
* Centralized authentication&lt;br /&gt;
* Centralized authorization&lt;br /&gt;
* Consistent security policies&lt;br /&gt;
* Simplified auditing&lt;br /&gt;
* Simplified user management&lt;br /&gt;
&lt;br /&gt;
== Modern Cloud Identity ==&lt;br /&gt;
&lt;br /&gt;
Many people consider LDAP old technology.&lt;br /&gt;
&lt;br /&gt;
In reality, most modern identity systems still follow directory principles.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Entra ID&lt;br /&gt;
* Okta&lt;br /&gt;
* Auth0&lt;br /&gt;
* Ping Identity&lt;br /&gt;
* Keycloak&lt;br /&gt;
&lt;br /&gt;
Although the underlying implementation may differ, the conceptual model remains familiar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User&lt;br /&gt;
Group&lt;br /&gt;
Role&lt;br /&gt;
Claim&lt;br /&gt;
Permission&lt;br /&gt;
Organisation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The industry has evolved, but the concepts have endured.&lt;br /&gt;
&lt;br /&gt;
== Beyond LDAP and SQL ==&lt;br /&gt;
&lt;br /&gt;
Modern cloud architectures frequently use several repository technologies simultaneously.&lt;br /&gt;
&lt;br /&gt;
=== Object Storage ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Documents&lt;br /&gt;
* Images&lt;br /&gt;
* Video&lt;br /&gt;
* Backups&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Azure Blob Storage&lt;br /&gt;
* Amazon S3&lt;br /&gt;
* Google Cloud Storage&lt;br /&gt;
&lt;br /&gt;
=== NoSQL Databases ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Massive scale&lt;br /&gt;
* Flexible schemas&lt;br /&gt;
* Distributed applications&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* MongoDB&lt;br /&gt;
* DynamoDB&lt;br /&gt;
* Cosmos DB&lt;br /&gt;
&lt;br /&gt;
=== Search Engines ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Full-text search&lt;br /&gt;
* Content discovery&lt;br /&gt;
* Indexing&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Elasticsearch&lt;br /&gt;
* Solr&lt;br /&gt;
* OpenSearch&lt;br /&gt;
&lt;br /&gt;
=== Graph Databases ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Relationship analysis&lt;br /&gt;
* Social networks&lt;br /&gt;
* Dependency mapping&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Neo4j&lt;br /&gt;
* Amazon Neptune&lt;br /&gt;
&lt;br /&gt;
=== Time-Series Databases ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
* Metrics&lt;br /&gt;
* Telemetry&lt;br /&gt;
* IoT&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* InfluxDB&lt;br /&gt;
* Prometheus&lt;br /&gt;
* TimescaleDB&lt;br /&gt;
&lt;br /&gt;
== Repository Selection Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Repository Type&lt;br /&gt;
! Best Suited For&lt;br /&gt;
|-&lt;br /&gt;
| LDAP&lt;br /&gt;
| Identity and Authentication&lt;br /&gt;
|-&lt;br /&gt;
| Active Directory&lt;br /&gt;
| Enterprise Identity Management&lt;br /&gt;
|-&lt;br /&gt;
| SQL Database&lt;br /&gt;
| Transactional Business Data&lt;br /&gt;
|-&lt;br /&gt;
| NoSQL Database&lt;br /&gt;
| Massive Scale Distributed Data&lt;br /&gt;
|-&lt;br /&gt;
| Object Storage&lt;br /&gt;
| Files and Documents&lt;br /&gt;
|-&lt;br /&gt;
| Search Engine&lt;br /&gt;
| Full-Text Search&lt;br /&gt;
|-&lt;br /&gt;
| Graph Database&lt;br /&gt;
| Relationships and Dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Time-Series Database&lt;br /&gt;
| Metrics and Telemetry&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designing for the Future ==&lt;br /&gt;
&lt;br /&gt;
When designing a new platform, it is tempting to choose a single repository and store everything there.&lt;br /&gt;
&lt;br /&gt;
Initially this appears simpler.&lt;br /&gt;
&lt;br /&gt;
However, long-lived systems benefit greatly from separation of concerns.&lt;br /&gt;
&lt;br /&gt;
A good rule of thumb is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identity Data&lt;br /&gt;
    ↓&lt;br /&gt;
Directory Service&lt;br /&gt;
&lt;br /&gt;
Business Data&lt;br /&gt;
    ↓&lt;br /&gt;
SQL Database&lt;br /&gt;
&lt;br /&gt;
Files&lt;br /&gt;
    ↓&lt;br /&gt;
Object Storage&lt;br /&gt;
&lt;br /&gt;
Logs&lt;br /&gt;
    ↓&lt;br /&gt;
Telemetry Platform&lt;br /&gt;
&lt;br /&gt;
Search&lt;br /&gt;
    ↓&lt;br /&gt;
Search Engine&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each repository performs the task it was designed to do.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Storage repositories are not competitors; they are specialists.&lt;br /&gt;
&lt;br /&gt;
LDAP is not better than SQL.&lt;br /&gt;
&lt;br /&gt;
SQL is not better than object storage.&lt;br /&gt;
&lt;br /&gt;
Object storage is not better than a graph database.&lt;br /&gt;
&lt;br /&gt;
Each exists because different categories of information require different treatment.&lt;br /&gt;
&lt;br /&gt;
The most successful enterprise and cloud architectures recognise this reality and place data where it naturally belongs.&lt;br /&gt;
&lt;br /&gt;
The goal is not to find a universal repository.&lt;br /&gt;
&lt;br /&gt;
The goal is to provide every type of data with the most appropriate home.&lt;br /&gt;
&lt;br /&gt;
In architecture, as in engineering, the right tool for the right job remains one of the most important principles of all.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Not_Everything_Belongs_in_a_Database&amp;diff=441</id>
		<title>Not Everything Belongs in a Database</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Not_Everything_Belongs_in_a_Database&amp;diff=441"/>
		<updated>2026-07-12T19:29:31Z</updated>

		<summary type="html">&lt;p&gt;Dex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039; Understanding Storage Repositories in Enterprise and Cloud Systems &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
One of the most common architectural mistakes made by developers is assuming that every piece of information should be stored in a database.&lt;br /&gt;
&lt;br /&gt;
Need users?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create a Users table.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need files?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create a Files table.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need logs?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create a Logs table.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need permissions?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Add some more tables.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While this approach may work for smaller applications, enterprise and cloud systems quickly reveal its limitations.&lt;br /&gt;
&lt;br /&gt;
The reality is that modern systems rarely rely on a single storage technology. Instead, they employ multiple repositories, each selected because it excels at a particular task.&lt;br /&gt;
&lt;br /&gt;
A large cloud platform might simultaneously use:&lt;br /&gt;
&lt;br /&gt;
* LDAP for identity management&lt;br /&gt;
* SQL databases for business transactions&lt;br /&gt;
* Object storage for files and documents&lt;br /&gt;
* Search indexes for discovery&lt;br /&gt;
* Graph databases for relationships&lt;br /&gt;
* Time-series databases for monitoring and telemetry&lt;br /&gt;
&lt;br /&gt;
The question is not:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Which repository is best?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The real question is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Which repository is best suited to the data being stored?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Understanding the Purpose of a Repository ==&lt;br /&gt;
&lt;br /&gt;
Every repository technology was created to solve a particular problem.&lt;br /&gt;
&lt;br /&gt;
Before selecting a storage technology, architects should ask four fundamental questions:&lt;br /&gt;
&lt;br /&gt;
=== 1. What is being stored? ===&lt;br /&gt;
&lt;br /&gt;
Are you storing:&lt;br /&gt;
&lt;br /&gt;
* User identities?&lt;br /&gt;
* Customer orders?&lt;br /&gt;
* Documents?&lt;br /&gt;
* Media files?&lt;br /&gt;
* Telemetry?&lt;br /&gt;
* Relationships?&lt;br /&gt;
&lt;br /&gt;
Different data types often require different storage technologies.&lt;br /&gt;
&lt;br /&gt;
=== 2. How will it be accessed? ===&lt;br /&gt;
&lt;br /&gt;
Will the system perform:&lt;br /&gt;
&lt;br /&gt;
* Mostly reads?&lt;br /&gt;
* Mostly writes?&lt;br /&gt;
* Full-text searches?&lt;br /&gt;
* Analytics?&lt;br /&gt;
* Transactions?&lt;br /&gt;
&lt;br /&gt;
Storage solutions are often optimized for specific access patterns.&lt;br /&gt;
&lt;br /&gt;
=== 3. How large will it become? ===&lt;br /&gt;
&lt;br /&gt;
A solution designed for thousands of records may struggle with billions.&lt;br /&gt;
&lt;br /&gt;
Scale matters.&lt;br /&gt;
&lt;br /&gt;
=== 4. How important is consistency? ===&lt;br /&gt;
&lt;br /&gt;
Does every transaction need to be immediately correct?&lt;br /&gt;
&lt;br /&gt;
Or is eventual consistency acceptable?&lt;br /&gt;
&lt;br /&gt;
The answer significantly influences repository selection.&lt;br /&gt;
&lt;br /&gt;
== The Enterprise View of Data ==&lt;br /&gt;
&lt;br /&gt;
Enterprise architects typically separate data into several categories:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identity Data&lt;br /&gt;
Business Data&lt;br /&gt;
Content Data&lt;br /&gt;
Operational Data&lt;br /&gt;
Analytical Data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each category tends to have a natural home.&lt;br /&gt;
&lt;br /&gt;
Attempting to force all five categories into a single database often leads to unnecessary complexity, reduced performance, and maintenance difficulties.&lt;br /&gt;
&lt;br /&gt;
== LDAP Directories ==&lt;br /&gt;
&lt;br /&gt;
=== What LDAP Was Designed To Do ===&lt;br /&gt;
&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) is frequently misunderstood.&lt;br /&gt;
&lt;br /&gt;
LDAP is not a database replacement.&lt;br /&gt;
&lt;br /&gt;
It is a directory service designed to answer questions about identities.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Who is this user?&lt;br /&gt;
&lt;br /&gt;
Which groups do they belong to?&lt;br /&gt;
&lt;br /&gt;
What permissions do they have?&lt;br /&gt;
&lt;br /&gt;
Can they authenticate?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These questions are read-heavy and rarely involve complex transactions.&lt;br /&gt;
&lt;br /&gt;
LDAP was specifically engineered for this type of workload.&lt;br /&gt;
&lt;br /&gt;
=== Strengths of LDAP ===&lt;br /&gt;
&lt;br /&gt;
==== Fast Reads ====&lt;br /&gt;
&lt;br /&gt;
Directory services are heavily optimized for lookup operations.&lt;br /&gt;
&lt;br /&gt;
Finding a user, group, or permission is extremely efficient.&lt;br /&gt;
&lt;br /&gt;
==== Hierarchical Structure ====&lt;br /&gt;
&lt;br /&gt;
Directories naturally represent organisational structures.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Company&lt;br /&gt;
└── Departments&lt;br /&gt;
    ├── Finance&lt;br /&gt;
    ├── HR&lt;br /&gt;
    └── IT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Standards-Based ====&lt;br /&gt;
&lt;br /&gt;
LDAP is widely supported by:&lt;br /&gt;
&lt;br /&gt;
* Active Directory&lt;br /&gt;
* OpenLDAP&lt;br /&gt;
* FreeIPA&lt;br /&gt;
* Enterprise Identity Platforms&lt;br /&gt;
&lt;br /&gt;
==== Centralized Identity ====&lt;br /&gt;
&lt;br /&gt;
Multiple applications can authenticate against a single repository.&lt;br /&gt;
&lt;br /&gt;
This creates a true Single Sign-On foundation.&lt;br /&gt;
&lt;br /&gt;
=== Weaknesses of LDAP ===&lt;br /&gt;
&lt;br /&gt;
LDAP is not ideal for:&lt;br /&gt;
&lt;br /&gt;
* Financial transactions&lt;br /&gt;
* Order processing&lt;br /&gt;
* Complex reporting&lt;br /&gt;
* Relational business data&lt;br /&gt;
&lt;br /&gt;
While these tasks are technically possible, they are not what LDAP was designed for.&lt;br /&gt;
&lt;br /&gt;
=== Best Use Cases ===&lt;br /&gt;
&lt;br /&gt;
LDAP excels at:&lt;br /&gt;
&lt;br /&gt;
* Authentication&lt;br /&gt;
* Authorization&lt;br /&gt;
* Identity Management&lt;br /&gt;
* Group Membership&lt;br /&gt;
* Enterprise SSO&lt;br /&gt;
&lt;br /&gt;
== SQL Databases ==&lt;br /&gt;
&lt;br /&gt;
=== What SQL Was Designed To Do ===&lt;br /&gt;
&lt;br /&gt;
Relational databases were designed to model business information.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Customers&lt;br /&gt;
Orders&lt;br /&gt;
Invoices&lt;br /&gt;
Projects&lt;br /&gt;
Assets&lt;br /&gt;
Contracts&lt;br /&gt;
Tickets&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relationships between data are a core strength of SQL systems.&lt;br /&gt;
&lt;br /&gt;
=== Strengths of SQL ===&lt;br /&gt;
&lt;br /&gt;
==== Data Integrity ====&lt;br /&gt;
&lt;br /&gt;
SQL databases provide:&lt;br /&gt;
&lt;br /&gt;
* Constraints&lt;br /&gt;
* Relationships&lt;br /&gt;
* Referential integrity&lt;br /&gt;
&lt;br /&gt;
This ensures that business rules remain enforced.&lt;br /&gt;
&lt;br /&gt;
==== Transactions ====&lt;br /&gt;
&lt;br /&gt;
ACID-compliant databases guarantee consistency.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Transfer £100&lt;br /&gt;
&lt;br /&gt;
Debit Account A&lt;br /&gt;
Credit Account B&lt;br /&gt;
&lt;br /&gt;
Commit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either both actions succeed or neither does.&lt;br /&gt;
&lt;br /&gt;
==== Query Power ====&lt;br /&gt;
&lt;br /&gt;
SQL remains one of the most powerful data query languages ever created.&lt;br /&gt;
&lt;br /&gt;
Complex reporting often requires only a single query.&lt;br /&gt;
&lt;br /&gt;
=== Weaknesses of SQL ===&lt;br /&gt;
&lt;br /&gt;
SQL databases can become challenging when:&lt;br /&gt;
&lt;br /&gt;
* Scaling globally&lt;br /&gt;
* Handling billions of records&lt;br /&gt;
* Managing highly variable schemas&lt;br /&gt;
&lt;br /&gt;
Modern cloud platforms frequently supplement relational systems with specialised repositories.&lt;br /&gt;
&lt;br /&gt;
=== Best Use Cases ===&lt;br /&gt;
&lt;br /&gt;
SQL excels at:&lt;br /&gt;
&lt;br /&gt;
* ERP systems&lt;br /&gt;
* CRM systems&lt;br /&gt;
* E-Commerce&lt;br /&gt;
* Workflow systems&lt;br /&gt;
* Financial systems&lt;br /&gt;
* Business applications&lt;br /&gt;
&lt;br /&gt;
== Why Most Web Applications Store Users in SQL ==&lt;br /&gt;
&lt;br /&gt;
Many developers encounter authentication systems that look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
├── Id&lt;br /&gt;
├── Username&lt;br /&gt;
├── PasswordHash&lt;br /&gt;
├── Email&lt;br /&gt;
└── Role&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For many applications this is entirely acceptable.&lt;br /&gt;
&lt;br /&gt;
A system with:&lt;br /&gt;
&lt;br /&gt;
* 100 users&lt;br /&gt;
* 1,000 users&lt;br /&gt;
* 10,000 users&lt;br /&gt;
&lt;br /&gt;
can operate perfectly well using SQL-based authentication.&lt;br /&gt;
&lt;br /&gt;
The approach is simple, familiar and easy to maintain.&lt;br /&gt;
&lt;br /&gt;
== The Problem Appears Later ==&lt;br /&gt;
&lt;br /&gt;
Imagine an organisation running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRM&lt;br /&gt;
HR&lt;br /&gt;
Finance&lt;br /&gt;
Projects&lt;br /&gt;
Ticketing&lt;br /&gt;
Knowledgebase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If each application maintains its own user table, the organisation inherits several problems:&lt;br /&gt;
&lt;br /&gt;
* Multiple passwords&lt;br /&gt;
* Multiple user accounts&lt;br /&gt;
* Multiple role systems&lt;br /&gt;
* Multiple account lockout policies&lt;br /&gt;
* Multiple password reset processes&lt;br /&gt;
&lt;br /&gt;
Sooner or later someone asks:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Why can&#039;t users just sign in once?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This question is one of the reasons directory services became so important.&lt;br /&gt;
&lt;br /&gt;
== Why Enterprises Prefer LDAP ==&lt;br /&gt;
&lt;br /&gt;
Enterprise environments typically treat Identity as a platform rather than an application feature.&lt;br /&gt;
&lt;br /&gt;
Instead of every application storing users independently:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application A&lt;br /&gt;
Application B&lt;br /&gt;
Application C&lt;br /&gt;
Application D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
all applications authenticate against a common directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Applications&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
Identity Provider&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
LDAP Directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates:&lt;br /&gt;
&lt;br /&gt;
* Centralized authentication&lt;br /&gt;
* Centralized authorization&lt;br /&gt;
* Consistent security policies&lt;br /&gt;
* Simplified auditing&lt;br /&gt;
* Simplified user management&lt;br /&gt;
&lt;br /&gt;
== Modern Cloud Identity ==&lt;br /&gt;
&lt;br /&gt;
Many people consider LDAP old technology.&lt;br /&gt;
&lt;br /&gt;
In reality, most modern identity systems still follow directory principles.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Entra ID&lt;br /&gt;
* Okta&lt;br /&gt;
* Auth0&lt;br /&gt;
* Ping Identity&lt;br /&gt;
* Keycloak&lt;br /&gt;
&lt;br /&gt;
Although the underlying implementation may differ, the conceptual model remains familiar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User&lt;br /&gt;
Group&lt;br /&gt;
Role&lt;br /&gt;
Claim&lt;br /&gt;
Permission&lt;br /&gt;
Organisation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The industry has evolved, but the concepts have endured.&lt;br /&gt;
&lt;br /&gt;
== Beyond LDAP and SQL ==&lt;br /&gt;
&lt;br /&gt;
Modern cloud architectures frequently use several repository technologies simultaneously.&lt;br /&gt;
&lt;br /&gt;
=== Object Storage ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Documents&lt;br /&gt;
* Images&lt;br /&gt;
* Video&lt;br /&gt;
* Backups&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Azure Blob Storage&lt;br /&gt;
* Amazon S3&lt;br /&gt;
* Google Cloud Storage&lt;br /&gt;
&lt;br /&gt;
=== NoSQL Databases ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Massive scale&lt;br /&gt;
* Flexible schemas&lt;br /&gt;
* Distributed applications&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* MongoDB&lt;br /&gt;
* DynamoDB&lt;br /&gt;
* Cosmos DB&lt;br /&gt;
&lt;br /&gt;
=== Search Engines ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Full-text search&lt;br /&gt;
* Content discovery&lt;br /&gt;
* Indexing&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Elasticsearch&lt;br /&gt;
* Solr&lt;br /&gt;
* OpenSearch&lt;br /&gt;
&lt;br /&gt;
=== Graph Databases ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Relationship analysis&lt;br /&gt;
* Social networks&lt;br /&gt;
* Dependency mapping&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Neo4j&lt;br /&gt;
* Amazon Neptune&lt;br /&gt;
&lt;br /&gt;
=== Time-Series Databases ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
* Metrics&lt;br /&gt;
* Telemetry&lt;br /&gt;
* IoT&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* InfluxDB&lt;br /&gt;
* Prometheus&lt;br /&gt;
* TimescaleDB&lt;br /&gt;
&lt;br /&gt;
== Repository Selection Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Repository Type&lt;br /&gt;
! Best Suited For&lt;br /&gt;
|-&lt;br /&gt;
| LDAP&lt;br /&gt;
| Identity and Authentication&lt;br /&gt;
|-&lt;br /&gt;
| Active Directory&lt;br /&gt;
| Enterprise Identity Management&lt;br /&gt;
|-&lt;br /&gt;
| SQL Database&lt;br /&gt;
| Transactional Business Data&lt;br /&gt;
|-&lt;br /&gt;
| NoSQL Database&lt;br /&gt;
| Massive Scale Distributed Data&lt;br /&gt;
|-&lt;br /&gt;
| Object Storage&lt;br /&gt;
| Files and Documents&lt;br /&gt;
|-&lt;br /&gt;
| Search Engine&lt;br /&gt;
| Full-Text Search&lt;br /&gt;
|-&lt;br /&gt;
| Graph Database&lt;br /&gt;
| Relationships and Dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Time-Series Database&lt;br /&gt;
| Metrics and Telemetry&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designing for the Future ==&lt;br /&gt;
&lt;br /&gt;
When designing a new platform, it is tempting to choose a single repository and store everything there.&lt;br /&gt;
&lt;br /&gt;
Initially this appears simpler.&lt;br /&gt;
&lt;br /&gt;
However, long-lived systems benefit greatly from separation of concerns.&lt;br /&gt;
&lt;br /&gt;
A good rule of thumb is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identity Data&lt;br /&gt;
    ↓&lt;br /&gt;
Directory Service&lt;br /&gt;
&lt;br /&gt;
Business Data&lt;br /&gt;
    ↓&lt;br /&gt;
SQL Database&lt;br /&gt;
&lt;br /&gt;
Files&lt;br /&gt;
    ↓&lt;br /&gt;
Object Storage&lt;br /&gt;
&lt;br /&gt;
Logs&lt;br /&gt;
    ↓&lt;br /&gt;
Telemetry Platform&lt;br /&gt;
&lt;br /&gt;
Search&lt;br /&gt;
    ↓&lt;br /&gt;
Search Engine&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each repository performs the task it was designed to do.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Storage repositories are not competitors; they are specialists.&lt;br /&gt;
&lt;br /&gt;
LDAP is not better than SQL.&lt;br /&gt;
&lt;br /&gt;
SQL is not better than object storage.&lt;br /&gt;
&lt;br /&gt;
Object storage is not better than a graph database.&lt;br /&gt;
&lt;br /&gt;
Each exists because different categories of information require different treatment.&lt;br /&gt;
&lt;br /&gt;
The most successful enterprise and cloud architectures recognise this reality and place data where it naturally belongs.&lt;br /&gt;
&lt;br /&gt;
The goal is not to find a universal repository.&lt;br /&gt;
&lt;br /&gt;
The goal is to provide every type of data with the most appropriate home.&lt;br /&gt;
&lt;br /&gt;
In architecture, as in engineering, the right tool for the right job remains one of the most important principles of all.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Not_Everything_Belongs_in_a_Database&amp;diff=440</id>
		<title>Not Everything Belongs in a Database</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Not_Everything_Belongs_in_a_Database&amp;diff=440"/>
		<updated>2026-07-12T19:28:47Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;= Not Everything Belongs in a Database = == Understanding Storage Repositories in Enterprise and Cloud Systems ==  &amp;#039;&amp;#039;By Dex White&amp;#039;&amp;#039;  == Introduction ==  One of the most common architectural mistakes made by developers is assuming that every piece of information should be stored in a database.  Need users?  &amp;lt;blockquote&amp;gt; Create a Users table. &amp;lt;/blockquote&amp;gt;  Need files?  &amp;lt;blockquote&amp;gt; Create a Files table. &amp;lt;/blockquote&amp;gt;  Need logs?  &amp;lt;blockquote&amp;gt; Create a Logs table. &amp;lt;/blockq...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Not Everything Belongs in a Database =&lt;br /&gt;
== Understanding Storage Repositories in Enterprise and Cloud Systems ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;By Dex White&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
One of the most common architectural mistakes made by developers is assuming that every piece of information should be stored in a database.&lt;br /&gt;
&lt;br /&gt;
Need users?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create a Users table.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need files?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create a Files table.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need logs?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Create a Logs table.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Need permissions?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Add some more tables.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While this approach may work for smaller applications, enterprise and cloud systems quickly reveal its limitations.&lt;br /&gt;
&lt;br /&gt;
The reality is that modern systems rarely rely on a single storage technology. Instead, they employ multiple repositories, each selected because it excels at a particular task.&lt;br /&gt;
&lt;br /&gt;
A large cloud platform might simultaneously use:&lt;br /&gt;
&lt;br /&gt;
* LDAP for identity management&lt;br /&gt;
* SQL databases for business transactions&lt;br /&gt;
* Object storage for files and documents&lt;br /&gt;
* Search indexes for discovery&lt;br /&gt;
* Graph databases for relationships&lt;br /&gt;
* Time-series databases for monitoring and telemetry&lt;br /&gt;
&lt;br /&gt;
The question is not:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Which repository is best?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The real question is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Which repository is best suited to the data being stored?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Understanding the Purpose of a Repository ==&lt;br /&gt;
&lt;br /&gt;
Every repository technology was created to solve a particular problem.&lt;br /&gt;
&lt;br /&gt;
Before selecting a storage technology, architects should ask four fundamental questions:&lt;br /&gt;
&lt;br /&gt;
=== 1. What is being stored? ===&lt;br /&gt;
&lt;br /&gt;
Are you storing:&lt;br /&gt;
&lt;br /&gt;
* User identities?&lt;br /&gt;
* Customer orders?&lt;br /&gt;
* Documents?&lt;br /&gt;
* Media files?&lt;br /&gt;
* Telemetry?&lt;br /&gt;
* Relationships?&lt;br /&gt;
&lt;br /&gt;
Different data types often require different storage technologies.&lt;br /&gt;
&lt;br /&gt;
=== 2. How will it be accessed? ===&lt;br /&gt;
&lt;br /&gt;
Will the system perform:&lt;br /&gt;
&lt;br /&gt;
* Mostly reads?&lt;br /&gt;
* Mostly writes?&lt;br /&gt;
* Full-text searches?&lt;br /&gt;
* Analytics?&lt;br /&gt;
* Transactions?&lt;br /&gt;
&lt;br /&gt;
Storage solutions are often optimized for specific access patterns.&lt;br /&gt;
&lt;br /&gt;
=== 3. How large will it become? ===&lt;br /&gt;
&lt;br /&gt;
A solution designed for thousands of records may struggle with billions.&lt;br /&gt;
&lt;br /&gt;
Scale matters.&lt;br /&gt;
&lt;br /&gt;
=== 4. How important is consistency? ===&lt;br /&gt;
&lt;br /&gt;
Does every transaction need to be immediately correct?&lt;br /&gt;
&lt;br /&gt;
Or is eventual consistency acceptable?&lt;br /&gt;
&lt;br /&gt;
The answer significantly influences repository selection.&lt;br /&gt;
&lt;br /&gt;
== The Enterprise View of Data ==&lt;br /&gt;
&lt;br /&gt;
Enterprise architects typically separate data into several categories:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identity Data&lt;br /&gt;
Business Data&lt;br /&gt;
Content Data&lt;br /&gt;
Operational Data&lt;br /&gt;
Analytical Data&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each category tends to have a natural home.&lt;br /&gt;
&lt;br /&gt;
Attempting to force all five categories into a single database often leads to unnecessary complexity, reduced performance, and maintenance difficulties.&lt;br /&gt;
&lt;br /&gt;
== LDAP Directories ==&lt;br /&gt;
&lt;br /&gt;
=== What LDAP Was Designed To Do ===&lt;br /&gt;
&lt;br /&gt;
LDAP (Lightweight Directory Access Protocol) is frequently misunderstood.&lt;br /&gt;
&lt;br /&gt;
LDAP is not a database replacement.&lt;br /&gt;
&lt;br /&gt;
It is a directory service designed to answer questions about identities.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Who is this user?&lt;br /&gt;
&lt;br /&gt;
Which groups do they belong to?&lt;br /&gt;
&lt;br /&gt;
What permissions do they have?&lt;br /&gt;
&lt;br /&gt;
Can they authenticate?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These questions are read-heavy and rarely involve complex transactions.&lt;br /&gt;
&lt;br /&gt;
LDAP was specifically engineered for this type of workload.&lt;br /&gt;
&lt;br /&gt;
=== Strengths of LDAP ===&lt;br /&gt;
&lt;br /&gt;
==== Fast Reads ====&lt;br /&gt;
&lt;br /&gt;
Directory services are heavily optimized for lookup operations.&lt;br /&gt;
&lt;br /&gt;
Finding a user, group, or permission is extremely efficient.&lt;br /&gt;
&lt;br /&gt;
==== Hierarchical Structure ====&lt;br /&gt;
&lt;br /&gt;
Directories naturally represent organisational structures.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Company&lt;br /&gt;
└── Departments&lt;br /&gt;
    ├── Finance&lt;br /&gt;
    ├── HR&lt;br /&gt;
    └── IT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Standards-Based ====&lt;br /&gt;
&lt;br /&gt;
LDAP is widely supported by:&lt;br /&gt;
&lt;br /&gt;
* Active Directory&lt;br /&gt;
* OpenLDAP&lt;br /&gt;
* FreeIPA&lt;br /&gt;
* Enterprise Identity Platforms&lt;br /&gt;
&lt;br /&gt;
==== Centralized Identity ====&lt;br /&gt;
&lt;br /&gt;
Multiple applications can authenticate against a single repository.&lt;br /&gt;
&lt;br /&gt;
This creates a true Single Sign-On foundation.&lt;br /&gt;
&lt;br /&gt;
=== Weaknesses of LDAP ===&lt;br /&gt;
&lt;br /&gt;
LDAP is not ideal for:&lt;br /&gt;
&lt;br /&gt;
* Financial transactions&lt;br /&gt;
* Order processing&lt;br /&gt;
* Complex reporting&lt;br /&gt;
* Relational business data&lt;br /&gt;
&lt;br /&gt;
While these tasks are technically possible, they are not what LDAP was designed for.&lt;br /&gt;
&lt;br /&gt;
=== Best Use Cases ===&lt;br /&gt;
&lt;br /&gt;
LDAP excels at:&lt;br /&gt;
&lt;br /&gt;
* Authentication&lt;br /&gt;
* Authorization&lt;br /&gt;
* Identity Management&lt;br /&gt;
* Group Membership&lt;br /&gt;
* Enterprise SSO&lt;br /&gt;
&lt;br /&gt;
== SQL Databases ==&lt;br /&gt;
&lt;br /&gt;
=== What SQL Was Designed To Do ===&lt;br /&gt;
&lt;br /&gt;
Relational databases were designed to model business information.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Customers&lt;br /&gt;
Orders&lt;br /&gt;
Invoices&lt;br /&gt;
Projects&lt;br /&gt;
Assets&lt;br /&gt;
Contracts&lt;br /&gt;
Tickets&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relationships between data are a core strength of SQL systems.&lt;br /&gt;
&lt;br /&gt;
=== Strengths of SQL ===&lt;br /&gt;
&lt;br /&gt;
==== Data Integrity ====&lt;br /&gt;
&lt;br /&gt;
SQL databases provide:&lt;br /&gt;
&lt;br /&gt;
* Constraints&lt;br /&gt;
* Relationships&lt;br /&gt;
* Referential integrity&lt;br /&gt;
&lt;br /&gt;
This ensures that business rules remain enforced.&lt;br /&gt;
&lt;br /&gt;
==== Transactions ====&lt;br /&gt;
&lt;br /&gt;
ACID-compliant databases guarantee consistency.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Transfer £100&lt;br /&gt;
&lt;br /&gt;
Debit Account A&lt;br /&gt;
Credit Account B&lt;br /&gt;
&lt;br /&gt;
Commit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either both actions succeed or neither does.&lt;br /&gt;
&lt;br /&gt;
==== Query Power ====&lt;br /&gt;
&lt;br /&gt;
SQL remains one of the most powerful data query languages ever created.&lt;br /&gt;
&lt;br /&gt;
Complex reporting often requires only a single query.&lt;br /&gt;
&lt;br /&gt;
=== Weaknesses of SQL ===&lt;br /&gt;
&lt;br /&gt;
SQL databases can become challenging when:&lt;br /&gt;
&lt;br /&gt;
* Scaling globally&lt;br /&gt;
* Handling billions of records&lt;br /&gt;
* Managing highly variable schemas&lt;br /&gt;
&lt;br /&gt;
Modern cloud platforms frequently supplement relational systems with specialised repositories.&lt;br /&gt;
&lt;br /&gt;
=== Best Use Cases ===&lt;br /&gt;
&lt;br /&gt;
SQL excels at:&lt;br /&gt;
&lt;br /&gt;
* ERP systems&lt;br /&gt;
* CRM systems&lt;br /&gt;
* E-Commerce&lt;br /&gt;
* Workflow systems&lt;br /&gt;
* Financial systems&lt;br /&gt;
* Business applications&lt;br /&gt;
&lt;br /&gt;
== Why Most Web Applications Store Users in SQL ==&lt;br /&gt;
&lt;br /&gt;
Many developers encounter authentication systems that look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Users&lt;br /&gt;
├── Id&lt;br /&gt;
├── Username&lt;br /&gt;
├── PasswordHash&lt;br /&gt;
├── Email&lt;br /&gt;
└── Role&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For many applications this is entirely acceptable.&lt;br /&gt;
&lt;br /&gt;
A system with:&lt;br /&gt;
&lt;br /&gt;
* 100 users&lt;br /&gt;
* 1,000 users&lt;br /&gt;
* 10,000 users&lt;br /&gt;
&lt;br /&gt;
can operate perfectly well using SQL-based authentication.&lt;br /&gt;
&lt;br /&gt;
The approach is simple, familiar and easy to maintain.&lt;br /&gt;
&lt;br /&gt;
== The Problem Appears Later ==&lt;br /&gt;
&lt;br /&gt;
Imagine an organisation running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRM&lt;br /&gt;
HR&lt;br /&gt;
Finance&lt;br /&gt;
Projects&lt;br /&gt;
Ticketing&lt;br /&gt;
Knowledgebase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If each application maintains its own user table, the organisation inherits several problems:&lt;br /&gt;
&lt;br /&gt;
* Multiple passwords&lt;br /&gt;
* Multiple user accounts&lt;br /&gt;
* Multiple role systems&lt;br /&gt;
* Multiple account lockout policies&lt;br /&gt;
* Multiple password reset processes&lt;br /&gt;
&lt;br /&gt;
Sooner or later someone asks:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Why can&#039;t users just sign in once?&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This question is one of the reasons directory services became so important.&lt;br /&gt;
&lt;br /&gt;
== Why Enterprises Prefer LDAP ==&lt;br /&gt;
&lt;br /&gt;
Enterprise environments typically treat Identity as a platform rather than an application feature.&lt;br /&gt;
&lt;br /&gt;
Instead of every application storing users independently:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Application A&lt;br /&gt;
Application B&lt;br /&gt;
Application C&lt;br /&gt;
Application D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
all applications authenticate against a common directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Applications&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
Identity Provider&lt;br /&gt;
       │&lt;br /&gt;
       ▼&lt;br /&gt;
LDAP Directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates:&lt;br /&gt;
&lt;br /&gt;
* Centralized authentication&lt;br /&gt;
* Centralized authorization&lt;br /&gt;
* Consistent security policies&lt;br /&gt;
* Simplified auditing&lt;br /&gt;
* Simplified user management&lt;br /&gt;
&lt;br /&gt;
== Modern Cloud Identity ==&lt;br /&gt;
&lt;br /&gt;
Many people consider LDAP old technology.&lt;br /&gt;
&lt;br /&gt;
In reality, most modern identity systems still follow directory principles.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Entra ID&lt;br /&gt;
* Okta&lt;br /&gt;
* Auth0&lt;br /&gt;
* Ping Identity&lt;br /&gt;
* Keycloak&lt;br /&gt;
&lt;br /&gt;
Although the underlying implementation may differ, the conceptual model remains familiar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User&lt;br /&gt;
Group&lt;br /&gt;
Role&lt;br /&gt;
Claim&lt;br /&gt;
Permission&lt;br /&gt;
Organisation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The industry has evolved, but the concepts have endured.&lt;br /&gt;
&lt;br /&gt;
== Beyond LDAP and SQL ==&lt;br /&gt;
&lt;br /&gt;
Modern cloud architectures frequently use several repository technologies simultaneously.&lt;br /&gt;
&lt;br /&gt;
=== Object Storage ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Documents&lt;br /&gt;
* Images&lt;br /&gt;
* Video&lt;br /&gt;
* Backups&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Azure Blob Storage&lt;br /&gt;
* Amazon S3&lt;br /&gt;
* Google Cloud Storage&lt;br /&gt;
&lt;br /&gt;
=== NoSQL Databases ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Massive scale&lt;br /&gt;
* Flexible schemas&lt;br /&gt;
* Distributed applications&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* MongoDB&lt;br /&gt;
* DynamoDB&lt;br /&gt;
* Cosmos DB&lt;br /&gt;
&lt;br /&gt;
=== Search Engines ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Full-text search&lt;br /&gt;
* Content discovery&lt;br /&gt;
* Indexing&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Elasticsearch&lt;br /&gt;
* Solr&lt;br /&gt;
* OpenSearch&lt;br /&gt;
&lt;br /&gt;
=== Graph Databases ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Relationship analysis&lt;br /&gt;
* Social networks&lt;br /&gt;
* Dependency mapping&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Neo4j&lt;br /&gt;
* Amazon Neptune&lt;br /&gt;
&lt;br /&gt;
=== Time-Series Databases ===&lt;br /&gt;
&lt;br /&gt;
Best for:&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
* Metrics&lt;br /&gt;
* Telemetry&lt;br /&gt;
* IoT&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* InfluxDB&lt;br /&gt;
* Prometheus&lt;br /&gt;
* TimescaleDB&lt;br /&gt;
&lt;br /&gt;
== Repository Selection Matrix ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Repository Type&lt;br /&gt;
! Best Suited For&lt;br /&gt;
|-&lt;br /&gt;
| LDAP&lt;br /&gt;
| Identity and Authentication&lt;br /&gt;
|-&lt;br /&gt;
| Active Directory&lt;br /&gt;
| Enterprise Identity Management&lt;br /&gt;
|-&lt;br /&gt;
| SQL Database&lt;br /&gt;
| Transactional Business Data&lt;br /&gt;
|-&lt;br /&gt;
| NoSQL Database&lt;br /&gt;
| Massive Scale Distributed Data&lt;br /&gt;
|-&lt;br /&gt;
| Object Storage&lt;br /&gt;
| Files and Documents&lt;br /&gt;
|-&lt;br /&gt;
| Search Engine&lt;br /&gt;
| Full-Text Search&lt;br /&gt;
|-&lt;br /&gt;
| Graph Database&lt;br /&gt;
| Relationships and Dependencies&lt;br /&gt;
|-&lt;br /&gt;
| Time-Series Database&lt;br /&gt;
| Metrics and Telemetry&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Designing for the Future ==&lt;br /&gt;
&lt;br /&gt;
When designing a new platform, it is tempting to choose a single repository and store everything there.&lt;br /&gt;
&lt;br /&gt;
Initially this appears simpler.&lt;br /&gt;
&lt;br /&gt;
However, long-lived systems benefit greatly from separation of concerns.&lt;br /&gt;
&lt;br /&gt;
A good rule of thumb is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identity Data&lt;br /&gt;
    ↓&lt;br /&gt;
Directory Service&lt;br /&gt;
&lt;br /&gt;
Business Data&lt;br /&gt;
    ↓&lt;br /&gt;
SQL Database&lt;br /&gt;
&lt;br /&gt;
Files&lt;br /&gt;
    ↓&lt;br /&gt;
Object Storage&lt;br /&gt;
&lt;br /&gt;
Logs&lt;br /&gt;
    ↓&lt;br /&gt;
Telemetry Platform&lt;br /&gt;
&lt;br /&gt;
Search&lt;br /&gt;
    ↓&lt;br /&gt;
Search Engine&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each repository performs the task it was designed to do.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Storage repositories are not competitors; they are specialists.&lt;br /&gt;
&lt;br /&gt;
LDAP is not better than SQL.&lt;br /&gt;
&lt;br /&gt;
SQL is not better than object storage.&lt;br /&gt;
&lt;br /&gt;
Object storage is not better than a graph database.&lt;br /&gt;
&lt;br /&gt;
Each exists because different categories of information require different treatment.&lt;br /&gt;
&lt;br /&gt;
The most successful enterprise and cloud architectures recognise this reality and place data where it naturally belongs.&lt;br /&gt;
&lt;br /&gt;
The goal is not to find a universal repository.&lt;br /&gt;
&lt;br /&gt;
The goal is to provide every type of data with the most appropriate home.&lt;br /&gt;
&lt;br /&gt;
In architecture, as in engineering, the right tool for the right job remains one of the most important principles of all.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Rendering_a_Well-Formed_XML_Document_in_Node.js&amp;diff=439</id>
		<title>Rendering a Well-Formed XML Document in Node.js</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Rendering_a_Well-Formed_XML_Document_in_Node.js&amp;diff=439"/>
		<updated>2026-07-12T19:14:27Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Many modern APIs default to JSON, however XML remains a critical data exchange format for standards such as ATOM, RSS, SOAP, SAML, SVG, and numerous enterprise integrations. While it is technically possible to construct XML using string concatenation, production systems should generate XML using dedicated libraries that ensure documents remain well-formed, correctly escaped, and compliant with the intended XML vocabulary.  This article examines how XML sho...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Many modern APIs default to JSON, however XML remains a critical data exchange format for standards such as ATOM, RSS, SOAP, SAML, SVG, and numerous enterprise integrations. While it is technically possible to construct XML using string concatenation, production systems should generate XML using dedicated libraries that ensure documents remain well-formed, correctly escaped, and compliant with the intended XML vocabulary.&lt;br /&gt;
&lt;br /&gt;
This article examines how XML should be rendered within Node.js applications, common implementation approaches, and why XML builder libraries are usually preferable to manual document construction.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Node.js developers commonly work with JSON because JavaScript objects naturally serialize into JSON structures.&lt;br /&gt;
&lt;br /&gt;
XML differs significantly.&lt;br /&gt;
&lt;br /&gt;
An XML document consists of:&lt;br /&gt;
&lt;br /&gt;
* Elements&lt;br /&gt;
* Attributes&lt;br /&gt;
* Text nodes&lt;br /&gt;
* Namespaces&lt;br /&gt;
* Processing instructions&lt;br /&gt;
* Document declarations&lt;br /&gt;
&lt;br /&gt;
Unlike JSON, XML has strict syntactical requirements. A single missing closing tag or improperly escaped character can invalidate an entire document.&lt;br /&gt;
&lt;br /&gt;
For this reason, XML generation should be treated as a document construction process rather than a simple text formatting exercise.&lt;br /&gt;
&lt;br /&gt;
== Common XML Use Cases in Node.js ==&lt;br /&gt;
&lt;br /&gt;
XML is commonly encountered when:&lt;br /&gt;
&lt;br /&gt;
* Producing ATOM feeds&lt;br /&gt;
* Generating RSS feeds&lt;br /&gt;
* Exposing XML API endpoints&lt;br /&gt;
* Integrating with legacy systems&lt;br /&gt;
* Producing sitemaps&lt;br /&gt;
* Generating configuration files&lt;br /&gt;
* Consuming SOAP services&lt;br /&gt;
* Working with SAML identity providers&lt;br /&gt;
&lt;br /&gt;
Although many systems have adopted JSON, XML continues to dominate numerous standards-based integrations.&lt;br /&gt;
&lt;br /&gt;
== Requirements of a Well-Formed XML Document ==&lt;br /&gt;
&lt;br /&gt;
A well-formed XML document must satisfy several basic requirements.&lt;br /&gt;
&lt;br /&gt;
=== Single Root Element ===&lt;br /&gt;
&lt;br /&gt;
Every document must contain exactly one root element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;response&amp;gt;&lt;br /&gt;
    &amp;lt;data&amp;gt;Hello World&amp;lt;/data&amp;gt;&lt;br /&gt;
&amp;lt;/response&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Properly Closed Elements ===&lt;br /&gt;
&lt;br /&gt;
Elements must be closed correctly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;item&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;Example&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/item&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Correct Nesting ===&lt;br /&gt;
&lt;br /&gt;
Elements must be closed in the reverse order they were opened.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;parent&amp;gt;&lt;br /&gt;
    &amp;lt;child&amp;gt;&lt;br /&gt;
    &amp;lt;/child&amp;gt;&lt;br /&gt;
&amp;lt;/parent&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Escaped Characters ===&lt;br /&gt;
&lt;br /&gt;
Reserved characters must be escaped.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;&lt;br /&gt;
&amp;amp;gt;&lt;br /&gt;
&amp;amp;amp;&lt;br /&gt;
&amp;amp;quot;&lt;br /&gt;
&amp;amp;apos;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Failure to escape user-supplied content is one of the most common XML generation errors.&lt;br /&gt;
&lt;br /&gt;
== Manual XML Generation ==&lt;br /&gt;
&lt;br /&gt;
Many developers begin by building XML strings manually.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const xml = `&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;message&amp;gt;&lt;br /&gt;
    &amp;lt;text&amp;gt;Hello World&amp;lt;/text&amp;gt;&lt;br /&gt;
&amp;lt;/message&amp;gt;`;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For small examples this may appear acceptable.&lt;br /&gt;
&lt;br /&gt;
However, problems arise when:&lt;br /&gt;
&lt;br /&gt;
* Values contain reserved characters&lt;br /&gt;
* Documents become deeply nested&lt;br /&gt;
* Namespaces are introduced&lt;br /&gt;
* Additional schemas are supported&lt;br /&gt;
* User-generated content is included&lt;br /&gt;
&lt;br /&gt;
The approach quickly becomes difficult to maintain.&lt;br /&gt;
&lt;br /&gt;
== Using the DOM Approach ==&lt;br /&gt;
&lt;br /&gt;
Libraries such as xmldom provide browser-style APIs for document construction.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const doc = implementation.createDocument(&lt;br /&gt;
    null,&lt;br /&gt;
    &amp;quot;message&amp;quot;,&lt;br /&gt;
    null&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
const text = doc.createElement(&amp;quot;text&amp;quot;);&lt;br /&gt;
text.textContent = &amp;quot;Hello World&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
doc.documentElement.appendChild(text);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Advantages include:&lt;br /&gt;
&lt;br /&gt;
* Familiar programming model&lt;br /&gt;
* Precise document manipulation&lt;br /&gt;
* Suitable for editing existing XML&lt;br /&gt;
&lt;br /&gt;
Disadvantages include:&lt;br /&gt;
&lt;br /&gt;
* Verbose code&lt;br /&gt;
* Larger development overhead&lt;br /&gt;
* More complex document creation&lt;br /&gt;
&lt;br /&gt;
DOM libraries are often more suitable when XML must be modified rather than generated.&lt;br /&gt;
&lt;br /&gt;
== Using XML Builder Libraries ==&lt;br /&gt;
&lt;br /&gt;
Dedicated XML generation libraries simplify document creation considerably.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* xmlbuilder2&lt;br /&gt;
* xml&lt;br /&gt;
* fast-xml-parser (generation features)&lt;br /&gt;
&lt;br /&gt;
A typical xmlbuilder2 example looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const { create } = require(&amp;quot;xmlbuilder2&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
const xml = create({&lt;br /&gt;
    version: &amp;quot;1.0&amp;quot;&lt;br /&gt;
})&lt;br /&gt;
.ele(&amp;quot;message&amp;quot;)&lt;br /&gt;
    .ele(&amp;quot;text&amp;quot;)&lt;br /&gt;
        .txt(&amp;quot;Hello World&amp;quot;)&lt;br /&gt;
    .up()&lt;br /&gt;
.end({&lt;br /&gt;
    prettyPrint: true&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The library automatically:&lt;br /&gt;
&lt;br /&gt;
* Escapes invalid characters&lt;br /&gt;
* Maintains document structure&lt;br /&gt;
* Serializes correctly&lt;br /&gt;
* Produces well-formed XML&lt;br /&gt;
&lt;br /&gt;
This significantly reduces implementation errors.&lt;br /&gt;
&lt;br /&gt;
== Rendering XML from Express ==&lt;br /&gt;
&lt;br /&gt;
A common use case is exposing XML from an API endpoint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
app.get(&amp;quot;/api/message&amp;quot;, (req, res) =&amp;gt; {&lt;br /&gt;
&lt;br /&gt;
    const xml = create({&lt;br /&gt;
        version: &amp;quot;1.0&amp;quot;&lt;br /&gt;
    })&lt;br /&gt;
    .ele(&amp;quot;message&amp;quot;)&lt;br /&gt;
        .ele(&amp;quot;text&amp;quot;)&lt;br /&gt;
            .txt(&amp;quot;Hello World&amp;quot;)&lt;br /&gt;
        .up()&lt;br /&gt;
    .end();&lt;br /&gt;
&lt;br /&gt;
    res.type(&amp;quot;application/xml&amp;quot;);&lt;br /&gt;
    res.send(xml);&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The response is delivered with the appropriate content type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;http&amp;quot;&amp;gt;&lt;br /&gt;
Content-Type: application/xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clients can then process the response as XML.&lt;br /&gt;
&lt;br /&gt;
== Content Negotiation ==&lt;br /&gt;
&lt;br /&gt;
Many APIs support multiple output formats.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
* application/json&lt;br /&gt;
* application/xml&lt;br /&gt;
* application/atom+xml&lt;br /&gt;
* text/html&lt;br /&gt;
&lt;br /&gt;
The same endpoint may render different representations depending upon the Accept header.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
res.format({&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;application/xml&amp;quot;: () =&amp;gt; {&lt;br /&gt;
        res.send(xml);&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;application/json&amp;quot;: () =&amp;gt; {&lt;br /&gt;
        res.json(data);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This approach allows a single API implementation to serve multiple consumers.&lt;br /&gt;
&lt;br /&gt;
== Working with Namespaces ==&lt;br /&gt;
&lt;br /&gt;
Namespaces are required by many XML standards including ATOM.&lt;br /&gt;
&lt;br /&gt;
A namespace declaration usually appears on the root element.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
const feed = create()&lt;br /&gt;
.ele(&amp;quot;feed&amp;quot;, {&lt;br /&gt;
    xmlns: &amp;quot;http://www.w3.org/2005/Atom&amp;quot;&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Builder libraries simplify namespace management and reduce the likelihood of implementation errors.&lt;br /&gt;
&lt;br /&gt;
Detailed namespace design and management is discussed in [[XML Namespaces]].&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== String Concatenation ===&lt;br /&gt;
&lt;br /&gt;
Large XML documents become difficult to maintain when built manually.&lt;br /&gt;
&lt;br /&gt;
=== Improper Character Escaping ===&lt;br /&gt;
&lt;br /&gt;
User data may contain:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;&lt;br /&gt;
&amp;lt;&lt;br /&gt;
&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Failure to escape these characters will invalidate the document.&lt;br /&gt;
&lt;br /&gt;
=== Incorrect Content Type ===&lt;br /&gt;
&lt;br /&gt;
The response should identify itself correctly.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;http&amp;quot;&amp;gt;&lt;br /&gt;
application/xml&lt;br /&gt;
application/atom+xml&lt;br /&gt;
text/xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mixing Business Logic with Rendering Logic ===&lt;br /&gt;
&lt;br /&gt;
Generate a data structure first.&lt;br /&gt;
&lt;br /&gt;
Render the structure afterward.&lt;br /&gt;
&lt;br /&gt;
Separating these concerns improves maintainability and testing.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Generate Objects First ===&lt;br /&gt;
&lt;br /&gt;
A useful pattern is:&lt;br /&gt;
&lt;br /&gt;
# Retrieve data&lt;br /&gt;
# Build a model&lt;br /&gt;
# Render JSON, XML, or HTML from the model&lt;br /&gt;
&lt;br /&gt;
This prevents duplication across output formats.&lt;br /&gt;
&lt;br /&gt;
=== Use Established Libraries ===&lt;br /&gt;
&lt;br /&gt;
XML standards have evolved over decades.&lt;br /&gt;
&lt;br /&gt;
Well-maintained libraries handle many edge cases that would otherwise need manual implementation.&lt;br /&gt;
&lt;br /&gt;
=== Treat XML as a First-Class Citizen ===&lt;br /&gt;
&lt;br /&gt;
If XML support is offered, it should receive the same level of testing and validation as JSON endpoints.&lt;br /&gt;
&lt;br /&gt;
=== Validate Against Real Consumers ===&lt;br /&gt;
&lt;br /&gt;
If the XML is intended for:&lt;br /&gt;
&lt;br /&gt;
* Feed readers&lt;br /&gt;
* Search engines&lt;br /&gt;
* Partner integrations&lt;br /&gt;
* Enterprise systems&lt;br /&gt;
&lt;br /&gt;
Always test against the actual consuming software.&lt;br /&gt;
&lt;br /&gt;
Correct XML according to theory is not always sufficient in practice.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
=== XML Parser Errors ===&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
* Missing closing tags&lt;br /&gt;
* Improper nesting&lt;br /&gt;
* Invalid characters&lt;br /&gt;
&lt;br /&gt;
=== Consumer Rejects Valid XML ===&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
* Required namespaces&lt;br /&gt;
* Mandatory elements&lt;br /&gt;
* Schema requirements&lt;br /&gt;
* Content type headers&lt;br /&gt;
&lt;br /&gt;
=== Unexpected Characters Appear ===&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
* Character encoding&lt;br /&gt;
* UTF-8 declaration&lt;br /&gt;
* Serialization settings&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Node.js provides many ways to generate XML, ranging from simple string concatenation to dedicated XML generation libraries. While manual approaches may be adequate for demonstrations or small examples, production systems benefit greatly from using purpose-built XML builders that guarantee well-formed output and simplify namespace management.&lt;br /&gt;
&lt;br /&gt;
When designing XML-enabled APIs, developers should focus on creating a clean data model first and then rendering that model into XML, JSON, HTML, or any other representation required by the client. This approach produces more maintainable systems and reduces the risk of malformed XML reaching consumers.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Content Negotiation]]&lt;br /&gt;
* [[XML Namespaces]]&lt;br /&gt;
* [[ATOM Feed Generation]]&lt;br /&gt;
* [[REST API Design]]&lt;br /&gt;
* [[Express.js]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* XML 1.0 Specification&lt;br /&gt;
* Namespaces in XML 1.0&lt;br /&gt;
* Node.js Documentation&lt;br /&gt;
* Express.js Documentation&lt;br /&gt;
* XMLBuilder2 Documentation&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Cloud_Storage_Synchronisation_Technologies:_Standards,_Reality,_and_the_Gaps_in_Between&amp;diff=438</id>
		<title>Cloud Storage Synchronisation Technologies: Standards, Reality, and the Gaps in Between</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Cloud_Storage_Synchronisation_Technologies:_Standards,_Reality,_and_the_Gaps_in_Between&amp;diff=438"/>
		<updated>2026-07-12T19:07:30Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Cloud storage appears deceptively simple. A user saves a file on one device and expects it to appear everywhere else. In practice, file synchronisation is one of the more challenging problems in distributed systems.  Over the years, vendors have approached the problem in different ways. Some have created proprietary protocols tightly coupled to their platforms. Others have attempted to build on open standards such as HTTP and WebDAV. ownCloud is a notable...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Cloud storage appears deceptively simple. A user saves a file on one device and expects it to appear everywhere else. In practice, file synchronisation is one of the more challenging problems in distributed systems.&lt;br /&gt;
&lt;br /&gt;
Over the years, vendors have approached the problem in different ways. Some have created proprietary protocols tightly coupled to their platforms. Others have attempted to build on open standards such as HTTP and WebDAV. ownCloud is a notable example of the latter. Rather than inventing an entirely new file transfer protocol, ownCloud built its synchronisation architecture on top of WebDAV and standard HTTP technologies. However, even with a mature standards-based foundation, ownCloud still had to introduce additional behaviours and assumptions to bridge gaps that the standards did not fully address.&lt;br /&gt;
&lt;br /&gt;
This article explores the history of cloud storage synchronisation, the technologies involved, and how ownCloud demonstrates both the strengths and limitations of adopting open standards.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
At its core, synchronisation is the process of ensuring that two or more repositories contain the same information.&lt;br /&gt;
&lt;br /&gt;
Historically, this was achieved through:&lt;br /&gt;
&lt;br /&gt;
* File replication&lt;br /&gt;
* Network file systems&lt;br /&gt;
* Distributed file systems&lt;br /&gt;
* Backup and restore processes&lt;br /&gt;
&lt;br /&gt;
Cloud storage introduced new expectations:&lt;br /&gt;
&lt;br /&gt;
* Multiple devices&lt;br /&gt;
* Offline operation&lt;br /&gt;
* Near real-time updates&lt;br /&gt;
* Conflict resolution&lt;br /&gt;
* Mobile connectivity&lt;br /&gt;
* Selective synchronisation&lt;br /&gt;
&lt;br /&gt;
These requirements transformed a relatively simple file-copy problem into a complex state-management problem.&lt;br /&gt;
&lt;br /&gt;
The challenge is not moving data. The challenge is accurately determining:&lt;br /&gt;
&lt;br /&gt;
* What changed&lt;br /&gt;
* Where it changed&lt;br /&gt;
* When it changed&lt;br /&gt;
* Whether a conflict exists&lt;br /&gt;
* Which version should win&lt;br /&gt;
&lt;br /&gt;
== Core Synchronisation Models ==&lt;br /&gt;
&lt;br /&gt;
=== Simple Replication ===&lt;br /&gt;
&lt;br /&gt;
The earliest approach is straightforward:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Source&lt;br /&gt;
   |&lt;br /&gt;
   v&lt;br /&gt;
Destination&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changes are copied from one side to the other.&lt;br /&gt;
&lt;br /&gt;
This works well for:&lt;br /&gt;
&lt;br /&gt;
* Backups&lt;br /&gt;
* Mirroring&lt;br /&gt;
* Archiving&lt;br /&gt;
&lt;br /&gt;
It performs poorly when users can modify files in multiple locations simultaneously.&lt;br /&gt;
&lt;br /&gt;
=== Client-Server Synchronisation ===&lt;br /&gt;
&lt;br /&gt;
Most modern cloud platforms follow this model:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Device A&lt;br /&gt;
     \&lt;br /&gt;
      \&lt;br /&gt;
       Cloud Service&lt;br /&gt;
      /&lt;br /&gt;
     /&lt;br /&gt;
Device B&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The cloud service becomes the authoritative point of comparison.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* OneDrive&lt;br /&gt;
* Google Drive&lt;br /&gt;
* Dropbox&lt;br /&gt;
* ownCloud&lt;br /&gt;
* Nextcloud&lt;br /&gt;
&lt;br /&gt;
=== Bidirectional Synchronisation ===&lt;br /&gt;
&lt;br /&gt;
A more sophisticated approach treats neither side as master.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Local Repository &amp;lt;----&amp;gt; Remote Repository&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Both locations can initiate change.&lt;br /&gt;
&lt;br /&gt;
This is the model used by ownCloud&#039;s sync engine. Rather than assuming the server always wins, the client compares state and determines the actions required to reconcile both repositories.&lt;br /&gt;
&lt;br /&gt;
== The Protocol Question ==&lt;br /&gt;
&lt;br /&gt;
A synchronisation solution requires two distinct layers.&lt;br /&gt;
&lt;br /&gt;
=== Transport Layer ===&lt;br /&gt;
&lt;br /&gt;
Responsible for moving files:&lt;br /&gt;
&lt;br /&gt;
* HTTP&lt;br /&gt;
* HTTPS&lt;br /&gt;
* SMB&lt;br /&gt;
* FTP&lt;br /&gt;
* SFTP&lt;br /&gt;
* WebDAV&lt;br /&gt;
&lt;br /&gt;
=== Synchronisation Layer ===&lt;br /&gt;
&lt;br /&gt;
Responsible for determining:&lt;br /&gt;
&lt;br /&gt;
* What changed&lt;br /&gt;
* What needs downloading&lt;br /&gt;
* What needs uploading&lt;br /&gt;
&lt;br /&gt;
This distinction is important because protocols such as WebDAV were never originally designed as complete synchronisation protocols.&lt;br /&gt;
&lt;br /&gt;
WebDAV provides file management capabilities. It does not completely solve synchronisation.&lt;br /&gt;
&lt;br /&gt;
== WebDAV as a Foundation ==&lt;br /&gt;
&lt;br /&gt;
WebDAV extends HTTP with file-oriented operations such as:&lt;br /&gt;
&lt;br /&gt;
* PROPFIND&lt;br /&gt;
* MKCOL&lt;br /&gt;
* COPY&lt;br /&gt;
* MOVE&lt;br /&gt;
* DELETE&lt;br /&gt;
* PUT&lt;br /&gt;
&lt;br /&gt;
This allows files and folders to be manipulated using standard web technologies.&lt;br /&gt;
&lt;br /&gt;
A WebDAV repository can be treated as a remote file system:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client&lt;br /&gt;
   |&lt;br /&gt;
HTTP/WebDAV&lt;br /&gt;
   |&lt;br /&gt;
Server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Advantages include:&lt;br /&gt;
&lt;br /&gt;
* Open standards&lt;br /&gt;
* Existing tooling&lt;br /&gt;
* Wide client compatibility&lt;br /&gt;
* Simple infrastructure requirements&lt;br /&gt;
&lt;br /&gt;
Many operating systems can access WebDAV shares without specialised software.&lt;br /&gt;
&lt;br /&gt;
== The Gaps in WebDAV ==&lt;br /&gt;
&lt;br /&gt;
While WebDAV is excellent at file operations, it leaves several synchronisation questions unanswered.&lt;br /&gt;
&lt;br /&gt;
=== How do we efficiently detect change? ===&lt;br /&gt;
&lt;br /&gt;
A naive approach requires recursively scanning every folder and every file.&lt;br /&gt;
&lt;br /&gt;
This becomes expensive as repositories grow.&lt;br /&gt;
&lt;br /&gt;
=== How do we identify modifications? ===&lt;br /&gt;
&lt;br /&gt;
Modification timestamps are unreliable because:&lt;br /&gt;
&lt;br /&gt;
* Device clocks may differ&lt;br /&gt;
* Virtual machines may drift&lt;br /&gt;
* Time zones introduce complications&lt;br /&gt;
&lt;br /&gt;
=== How do we identify renames? ===&lt;br /&gt;
&lt;br /&gt;
To many protocols, a rename can appear identical to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Delete old file&lt;br /&gt;
Create new file&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This makes synchronisation more difficult than users expect.&lt;br /&gt;
&lt;br /&gt;
=== How do we minimise network traffic? ===&lt;br /&gt;
&lt;br /&gt;
A client wants to determine whether anything changed without downloading an entire directory structure every few seconds.&lt;br /&gt;
&lt;br /&gt;
None of these problems are fully addressed by WebDAV itself.&lt;br /&gt;
&lt;br /&gt;
== How ownCloud Filled the Gaps ==&lt;br /&gt;
&lt;br /&gt;
ownCloud deliberately chose WebDAV as its primary file protocol. Rather than replacing standards, it enhanced them with synchronisation-specific behaviour.&lt;br /&gt;
&lt;br /&gt;
=== ETags ===&lt;br /&gt;
&lt;br /&gt;
The most important enhancement was heavy use of HTTP ETags.&lt;br /&gt;
&lt;br /&gt;
An ETag is effectively a version identifier:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
File A&lt;br /&gt;
ETag: abc123&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the file changes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
File A&lt;br /&gt;
ETag: xyz789&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The client can immediately detect that a modification occurred.&lt;br /&gt;
&lt;br /&gt;
=== Directory ETag Propagation ===&lt;br /&gt;
&lt;br /&gt;
ownCloud went further.&lt;br /&gt;
&lt;br /&gt;
If a file changes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Root&lt;br /&gt;
 |&lt;br /&gt;
 +-- Documents&lt;br /&gt;
      |&lt;br /&gt;
      +-- Report.docx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file&#039;s ETag changes.&lt;br /&gt;
&lt;br /&gt;
ownCloud also updates the ETags of parent directories all the way back to the root.&lt;br /&gt;
&lt;br /&gt;
Conceptually:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Report.docx changed&lt;br /&gt;
       |&lt;br /&gt;
       v&lt;br /&gt;
Documents ETag changes&lt;br /&gt;
       |&lt;br /&gt;
       v&lt;br /&gt;
Root ETag changes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This creates an efficient change detection mechanism.&lt;br /&gt;
&lt;br /&gt;
A client can check a small number of ETags and quickly determine whether deeper investigation is required.&lt;br /&gt;
&lt;br /&gt;
=== Synchronisation Journals ===&lt;br /&gt;
&lt;br /&gt;
The ownCloud client maintains local state describing what it previously observed.&lt;br /&gt;
&lt;br /&gt;
This allows comparisons between:&lt;br /&gt;
&lt;br /&gt;
* Previous sync state&lt;br /&gt;
* Current local state&lt;br /&gt;
* Current remote state&lt;br /&gt;
&lt;br /&gt;
The server remains relatively simple while the client performs most of the decision-making.&lt;br /&gt;
&lt;br /&gt;
=== Chunked Uploads ===&lt;br /&gt;
&lt;br /&gt;
Large files introduce additional problems:&lt;br /&gt;
&lt;br /&gt;
* Network interruptions&lt;br /&gt;
* Mobile networks&lt;br /&gt;
* Long transfer durations&lt;br /&gt;
&lt;br /&gt;
ownCloud addressed this through chunked upload mechanisms and later support for modern resumable upload technologies.&lt;br /&gt;
&lt;br /&gt;
== Beyond Protocol Specifications ==&lt;br /&gt;
&lt;br /&gt;
An interesting lesson from ownCloud is that successful synchronisation often depends on behaviours that are not mandated by standards.&lt;br /&gt;
&lt;br /&gt;
=== Stable ETags ===&lt;br /&gt;
&lt;br /&gt;
The WebDAV specifications allow ETag implementation flexibility.&lt;br /&gt;
&lt;br /&gt;
However, effective synchronisation requires ETags to remain stable and predictable.&lt;br /&gt;
&lt;br /&gt;
=== Parent Directory Tracking ===&lt;br /&gt;
&lt;br /&gt;
WebDAV does not require directory ETag propagation.&lt;br /&gt;
&lt;br /&gt;
ownCloud introduced it because the synchronisation model benefits enormously from it.&lt;br /&gt;
&lt;br /&gt;
=== Move Semantics ===&lt;br /&gt;
&lt;br /&gt;
The specification defines MOVE operations, but synchronisation systems often assume additional guarantees regarding identity preservation and state continuity.&lt;br /&gt;
&lt;br /&gt;
=== Client Behaviour Assumptions ===&lt;br /&gt;
&lt;br /&gt;
The standards define server behaviour.&lt;br /&gt;
&lt;br /&gt;
They rarely define how an intelligent sync engine should behave.&lt;br /&gt;
&lt;br /&gt;
This is why synchronisation products frequently develop:&lt;br /&gt;
&lt;br /&gt;
* Local databases&lt;br /&gt;
* Journals&lt;br /&gt;
* Metadata caches&lt;br /&gt;
* Conflict resolution logic&lt;br /&gt;
&lt;br /&gt;
These are not protocol features. They are ecosystem features.&lt;br /&gt;
&lt;br /&gt;
== Design Lessons ==&lt;br /&gt;
&lt;br /&gt;
=== Use Open Standards Where Possible ===&lt;br /&gt;
&lt;br /&gt;
Standards provide:&lt;br /&gt;
&lt;br /&gt;
* Interoperability&lt;br /&gt;
* Longevity&lt;br /&gt;
* Existing tooling&lt;br /&gt;
&lt;br /&gt;
Building on WebDAV immediately made ownCloud accessible to a wide range of clients and operating systems.&lt;br /&gt;
&lt;br /&gt;
=== Extend Rather Than Replace ===&lt;br /&gt;
&lt;br /&gt;
The synchronisation enhancements introduced by ownCloud sit on top of the underlying standards rather than replacing them.&lt;br /&gt;
&lt;br /&gt;
This allows:&lt;br /&gt;
&lt;br /&gt;
* Generic WebDAV clients&lt;br /&gt;
* Native operating system integrations&lt;br /&gt;
* Specialist sync clients&lt;br /&gt;
&lt;br /&gt;
to coexist.&lt;br /&gt;
&lt;br /&gt;
=== Separate File Storage from Synchronisation ===&lt;br /&gt;
&lt;br /&gt;
File storage and synchronisation are related but distinct concerns.&lt;br /&gt;
&lt;br /&gt;
A storage platform can provide:&lt;br /&gt;
&lt;br /&gt;
* HTTP access&lt;br /&gt;
* WebDAV access&lt;br /&gt;
* API access&lt;br /&gt;
&lt;br /&gt;
while allowing different synchronisation mechanisms to evolve independently.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
* Assuming file transfer and file synchronisation are the same thing.&lt;br /&gt;
* Relying entirely on timestamps for change detection.&lt;br /&gt;
* Treating renames as delete-and-create operations.&lt;br /&gt;
* Mutating files on the server after upload without informing clients.&lt;br /&gt;
* Building a proprietary synchronisation layer before understanding existing standards.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Scalability ===&lt;br /&gt;
&lt;br /&gt;
Efficient synchronisation requires mechanisms that scale with repository size. Scanning millions of files continuously is expensive. Change indicators such as ETags and journals reduce workload significantly.&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
Authentication, authorisation and encryption are as important as synchronisation itself. A perfectly synchronised system that leaks data is still a failure.&lt;br /&gt;
&lt;br /&gt;
=== Maintainability ===&lt;br /&gt;
&lt;br /&gt;
Protocols and storage layers should remain loosely coupled. Synchronisation logic should be capable of evolving independently from storage technology.&lt;br /&gt;
&lt;br /&gt;
=== Backwards Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Open standards provide long-term interoperability. Even when specialised clients exist, generic clients should continue to function wherever possible.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[WebDAV]]&lt;br /&gt;
* [[HTTP ETags]]&lt;br /&gt;
* [[Distributed Filesystems]]&lt;br /&gt;
* [[OneDrive]]&lt;br /&gt;
* [[ownCloud]]&lt;br /&gt;
* [[Nextcloud]]&lt;br /&gt;
* [[File Replication]]&lt;br /&gt;
* [[Content Management Systems]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)&lt;br /&gt;
* HTTP/1.1 Specification&lt;br /&gt;
* ownCloud Architecture Documentation&lt;br /&gt;
* ownCloud Desktop Synchronisation Documentation&lt;br /&gt;
* WebDAV Protocol Specifications&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Cloud storage synchronisation is far more than transferring files between locations. It requires efficient change detection, conflict management, identity tracking, and network optimisation.&lt;br /&gt;
&lt;br /&gt;
WebDAV provides an excellent foundation for remote file access, but it does not fully solve synchronisation on its own.&lt;br /&gt;
&lt;br /&gt;
ownCloud offers a compelling case study in how open standards can be leveraged successfully while still acknowledging their limitations. By combining WebDAV, HTTP semantics, ETags, local journals, and carefully designed client behaviour, ownCloud created a practical synchronisation platform without abandoning interoperability.&lt;br /&gt;
&lt;br /&gt;
Perhaps the most important lesson is that standards rarely eliminate complexity. They provide a common language. Real-world products still need to fill the gaps between what standards define and what users expect. ownCloud&#039;s synchronisation architecture is a textbook example of that principle in action.&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Don%27t_Use_Windows_Server_2016_for_Android_Development&amp;diff=437</id>
		<title>Don&#039;t Use Windows Server 2016 for Android Development</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Don%27t_Use_Windows_Server_2016_for_Android_Development&amp;diff=437"/>
		<updated>2026-07-06T11:16:01Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;Windows Server 2016 remains a capable platform for infrastructure services, Active Directory, IIS, SQL Server, SharePoint, and laboratory environments. However, it is increasingly unsuitable as a primary platform for modern Android development.  As Android Studio, Gradle, Java, and associated tooling evolve, they increasingly depend upon operating system functionality that was not available when Windows Server 2016 was released. This can result in obscure compatibility i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Windows Server 2016 remains a capable platform for infrastructure services, Active Directory, IIS, SQL Server, SharePoint, and laboratory environments. However, it is increasingly unsuitable as a primary platform for modern Android development.&lt;br /&gt;
&lt;br /&gt;
As Android Studio, Gradle, Java, and associated tooling evolve, they increasingly depend upon operating system functionality that was not available when Windows Server 2016 was released. This can result in obscure compatibility issues, misleading error messages, and significant time spent troubleshooting before a single line of application code is executed.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Many IT professionals maintain development environments on server operating systems for convenience, familiarity, or because a virtual machine already exists within their laboratory infrastructure.&lt;br /&gt;
&lt;br /&gt;
This approach often works well for:&lt;br /&gt;
&lt;br /&gt;
* Infrastructure automation&lt;br /&gt;
* Web development&lt;br /&gt;
* Database development&lt;br /&gt;
* PowerShell scripting&lt;br /&gt;
* Legacy application support&lt;br /&gt;
* Systems administration&lt;br /&gt;
&lt;br /&gt;
Android development is different.&lt;br /&gt;
&lt;br /&gt;
Modern Android development relies upon a large collection of interconnected tooling:&lt;br /&gt;
&lt;br /&gt;
* Android Studio&lt;br /&gt;
* Android SDK&lt;br /&gt;
* Android Emulator&lt;br /&gt;
* Java Development Kits&lt;br /&gt;
* Gradle&lt;br /&gt;
* Android Gradle Plugin (AGP)&lt;br /&gt;
* Native helper libraries&lt;br /&gt;
&lt;br /&gt;
Each component evolves independently and may introduce dependencies on newer operating system features.&lt;br /&gt;
&lt;br /&gt;
== The Assumption ==&lt;br /&gt;
&lt;br /&gt;
A reasonable assumption is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If Android Studio installs successfully,&lt;br /&gt;
Android development should work.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this assumption is no longer always true.&lt;br /&gt;
&lt;br /&gt;
In many cases:&lt;br /&gt;
&lt;br /&gt;
* Android Studio installs correctly.&lt;br /&gt;
* The Android SDK downloads successfully.&lt;br /&gt;
* The Android Emulator installs correctly.&lt;br /&gt;
* Gradle downloads successfully.&lt;br /&gt;
* A project can be created.&lt;br /&gt;
&lt;br /&gt;
Yet the project still fails before the first build.&lt;br /&gt;
&lt;br /&gt;
== A Real-World Investigation ==&lt;br /&gt;
&lt;br /&gt;
While creating a new Android project on a fully patched Windows Server 2016 system, Android Studio repeatedly failed when attempting to build even the default starter project.&lt;br /&gt;
&lt;br /&gt;
Gradle reported:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Could not initialize native services.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Further investigation produced:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unable to start daemon process.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error messages suggested a configuration problem involving:&lt;br /&gt;
&lt;br /&gt;
* Java&lt;br /&gt;
* Gradle&lt;br /&gt;
* JVM settings&lt;br /&gt;
* Build configuration&lt;br /&gt;
&lt;br /&gt;
All appeared to be logical areas to investigate.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, none of them were the actual cause.&lt;br /&gt;
&lt;br /&gt;
== The Root Cause ==&lt;br /&gt;
&lt;br /&gt;
The failure originated inside Gradle&#039;s native file monitoring subsystem.&lt;br /&gt;
&lt;br /&gt;
The critical error eventually became:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gradle-fileevents.dll&lt;br /&gt;
&lt;br /&gt;
The specified procedure could not be found&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At first glance this appears to indicate a missing DLL.&lt;br /&gt;
&lt;br /&gt;
In reality, the DLL existed and loaded successfully.&lt;br /&gt;
&lt;br /&gt;
The problem was that the DLL depended upon a Windows API function that was unavailable on Windows Server 2016.&lt;br /&gt;
&lt;br /&gt;
Using dependency analysis tools revealed the missing import:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ReadDirectoryChangesExW&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This API is used for advanced file system monitoring.&lt;br /&gt;
&lt;br /&gt;
Modern Gradle implementations use this functionality to detect changes to project files efficiently.&lt;br /&gt;
&lt;br /&gt;
The dependency chain became:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Android Studio&lt;br /&gt;
    ↓&lt;br /&gt;
Android Gradle Plugin&lt;br /&gt;
    ↓&lt;br /&gt;
Gradle&lt;br /&gt;
    ↓&lt;br /&gt;
gradle-fileevents.dll&lt;br /&gt;
    ↓&lt;br /&gt;
ReadDirectoryChangesExW&lt;br /&gt;
    ↓&lt;br /&gt;
Windows Server 2016&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because the operating system did not provide the required API, Gradle failed during startup.&lt;br /&gt;
&lt;br /&gt;
== Why This Is So Frustrating ==&lt;br /&gt;
&lt;br /&gt;
The most frustrating aspect of the problem is that the reported error bears little resemblance to the actual cause.&lt;br /&gt;
&lt;br /&gt;
Developers may spend hours investigating:&lt;br /&gt;
&lt;br /&gt;
* JVM versions&lt;br /&gt;
* Gradle versions&lt;br /&gt;
* Build scripts&lt;br /&gt;
* Android SDK installation&lt;br /&gt;
* Environment variables&lt;br /&gt;
* Visual C++ Redistributables&lt;br /&gt;
* IDE configuration&lt;br /&gt;
&lt;br /&gt;
while the real issue exists at the operating system API level.&lt;br /&gt;
&lt;br /&gt;
The visible symptom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Could not initialize native services.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The actual cause:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Required Windows API unavailable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These are very different problems.&lt;br /&gt;
&lt;br /&gt;
== Diagnostic Lessons Learned ==&lt;br /&gt;
&lt;br /&gt;
Several useful lessons emerged from the investigation.&lt;br /&gt;
&lt;br /&gt;
=== Startup Errors Matter ===&lt;br /&gt;
&lt;br /&gt;
If a development environment reports unexpected errors during first launch, do not dismiss them too quickly.&lt;br /&gt;
&lt;br /&gt;
Early failures often indicate environmental issues rather than project issues.&lt;br /&gt;
&lt;br /&gt;
=== Installation Success Does Not Equal Compatibility ===&lt;br /&gt;
&lt;br /&gt;
A successful installation proves only that the software installed.&lt;br /&gt;
&lt;br /&gt;
It does not prove that all functionality is supported by the host operating system.&lt;br /&gt;
&lt;br /&gt;
=== Dependency Analysis Tools Are Valuable ===&lt;br /&gt;
&lt;br /&gt;
Tools such as Dependencies can reveal the real source of native library failures.&lt;br /&gt;
&lt;br /&gt;
Without dependency analysis, the actual root cause would have remained hidden behind multiple layers of abstraction.&lt;br /&gt;
&lt;br /&gt;
=== Modern Toolchains Move Quickly ===&lt;br /&gt;
&lt;br /&gt;
Development tooling often adopts new platform capabilities far faster than organisations upgrade operating systems.&lt;br /&gt;
&lt;br /&gt;
This creates situations where systems remain technically supported but are no longer practical development environments.&lt;br /&gt;
&lt;br /&gt;
== Cost of the Problem ==&lt;br /&gt;
&lt;br /&gt;
The largest cost is not technical.&lt;br /&gt;
&lt;br /&gt;
The largest cost is time.&lt;br /&gt;
&lt;br /&gt;
Instead of working on application development, time is spent:&lt;br /&gt;
&lt;br /&gt;
* Investigating build systems&lt;br /&gt;
* Reading logs&lt;br /&gt;
* Testing software versions&lt;br /&gt;
* Reinstalling components&lt;br /&gt;
* Researching compatibility issues&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
No progress on the actual project.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Development environments should reduce friction rather than create it.&lt;br /&gt;
&lt;br /&gt;
== Recommended Platforms for Android Development ==&lt;br /&gt;
&lt;br /&gt;
=== Windows 11 ===&lt;br /&gt;
&lt;br /&gt;
Windows 11 is currently the simplest choice for Android development.&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Modern operating system APIs&lt;br /&gt;
* Strong Android Studio support&lt;br /&gt;
* Full compatibility with current tooling&lt;br /&gt;
* Long-term viability&lt;br /&gt;
&lt;br /&gt;
=== Windows Server 2022 ===&lt;br /&gt;
&lt;br /&gt;
For developers who prefer server operating systems:&lt;br /&gt;
&lt;br /&gt;
* Modern Windows API support&lt;br /&gt;
* Better compatibility with current development tools&lt;br /&gt;
* Familiar administrative experience&lt;br /&gt;
&lt;br /&gt;
=== Linux (Ubuntu / Xubuntu) ===&lt;br /&gt;
&lt;br /&gt;
Linux has become an excellent Android development platform.&lt;br /&gt;
&lt;br /&gt;
Advantages include:&lt;br /&gt;
&lt;br /&gt;
* First-class Android Studio support&lt;br /&gt;
* Strong Java ecosystem&lt;br /&gt;
* Reliable Gradle support&lt;br /&gt;
* Lower system overhead&lt;br /&gt;
* Fewer legacy compatibility concerns&lt;br /&gt;
&lt;br /&gt;
Xubuntu in particular provides a lightweight development environment that performs well even on modest virtual machines.&lt;br /&gt;
&lt;br /&gt;
== What Windows Server 2016 Is Still Good At ==&lt;br /&gt;
&lt;br /&gt;
None of this should be interpreted as criticism of Windows Server 2016 itself.&lt;br /&gt;
&lt;br /&gt;
Windows Server 2016 remains entirely suitable for:&lt;br /&gt;
&lt;br /&gt;
* Active Directory&lt;br /&gt;
* IIS&lt;br /&gt;
* SQL Server&lt;br /&gt;
* SharePoint&lt;br /&gt;
* File services&lt;br /&gt;
* Infrastructure laboratories&lt;br /&gt;
* Legacy application testing&lt;br /&gt;
* Systems administration training&lt;br /&gt;
&lt;br /&gt;
The issue is not that Server 2016 is a bad operating system.&lt;br /&gt;
&lt;br /&gt;
The issue is that modern Android development tooling has moved beyond the platform assumptions available when Server 2016 was released.&lt;br /&gt;
&lt;br /&gt;
== Recommendation ==&lt;br /&gt;
&lt;br /&gt;
If Android development is a primary objective, do not use Windows Server 2016 as the primary development workstation.&lt;br /&gt;
&lt;br /&gt;
Even on a fully patched installation, modern Android toolchains may depend upon operating system functionality that is unavailable.&lt;br /&gt;
&lt;br /&gt;
A modern desktop operating system or Linux distribution will typically provide:&lt;br /&gt;
&lt;br /&gt;
* Better compatibility&lt;br /&gt;
* Faster setup&lt;br /&gt;
* Fewer troubleshooting sessions&lt;br /&gt;
* A smoother development experience&lt;br /&gt;
&lt;br /&gt;
Most importantly, it allows developers to spend time writing software rather than debugging the toolchain.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Windows Server 2016 remains a capable infrastructure platform, but it is no longer an optimal environment for Android development.&lt;br /&gt;
&lt;br /&gt;
Modern Android tooling increasingly assumes operating system capabilities that were introduced after Server 2016&#039;s release.&lt;br /&gt;
&lt;br /&gt;
When development tools fail because of hidden platform dependencies, significant time can be lost before the real cause is identified.&lt;br /&gt;
&lt;br /&gt;
The simplest and most productive solution is usually not to fight the platform, but to choose a development environment that aligns with the expectations of the modern Android ecosystem.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Android Studio]]&lt;br /&gt;
* [[Gradle]]&lt;br /&gt;
* [[Java Development Kit]]&lt;br /&gt;
* [[Development Environment Selection]]&lt;br /&gt;
* [[Linux for Development]]&lt;br /&gt;
* [[Windows Server 2016]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* Android Studio Documentation&lt;br /&gt;
* Gradle Documentation&lt;br /&gt;
* Microsoft Windows API Documentation&lt;br /&gt;
* Dependency Analysis Tools Documentation&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Security_by_Design:_Building_Trust_Through_Zero_Trust,_Cyber_Essentials,_GDPR_and_Compliance_Frameworks&amp;diff=436</id>
		<title>Security by Design: Building Trust Through Zero Trust, Cyber Essentials, GDPR and Compliance Frameworks</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Security_by_Design:_Building_Trust_Through_Zero_Trust,_Cyber_Essentials,_GDPR_and_Compliance_Frameworks&amp;diff=436"/>
		<updated>2026-07-06T08:06:01Z</updated>

		<summary type="html">&lt;p&gt;Dex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Modern organisations face increasing cyber threats, stricter regulatory requirements, and growing customer expectations around security and privacy. Security can no longer be treated as a perimeter defence or an afterthought.&lt;br /&gt;
&lt;br /&gt;
This article explores how Secure by Design principles, Zero Trust Architecture, Cyber Essentials, GDPR, ISO 27001, PCI DSS, and related frameworks work together to create resilient, secure, auditable, and trustworthy systems.&lt;br /&gt;
&lt;br /&gt;
== Business Value ==&lt;br /&gt;
&lt;br /&gt;
Security is no longer solely an IT concern.&lt;br /&gt;
&lt;br /&gt;
Customers increasingly expect organisations to protect their information, regulators impose significant penalties for security failures, and cyber incidents can lead to financial loss, operational disruption, reputational damage, and loss of stakeholder trust.&lt;br /&gt;
&lt;br /&gt;
By adopting Secure by Design principles, Zero Trust architecture, Cyber Essentials controls, and recognised compliance frameworks, organisations can:&lt;br /&gt;
&lt;br /&gt;
* Reduce cyber risk and improve resilience.&lt;br /&gt;
* Protect customer, employee, and organisational data.&lt;br /&gt;
* Demonstrate regulatory and contractual compliance.&lt;br /&gt;
* Support secure remote and hybrid working.&lt;br /&gt;
* Enable digital transformation initiatives with confidence.&lt;br /&gt;
* Reduce the likelihood and impact of security incidents.&lt;br /&gt;
* Improve audit readiness and governance.&lt;br /&gt;
* Strengthen customer, supplier, and stakeholder trust.&lt;br /&gt;
&lt;br /&gt;
Effective security is not simply about preventing attacks. It enables organisations to operate confidently, scale securely, protect their reputation, and build lasting trust.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Security is often viewed as a technical responsibility, yet the consequences of security failures are typically business problems.&lt;br /&gt;
&lt;br /&gt;
Data breaches can damage customer confidence, ransomware can halt operations, regulatory failures can result in financial penalties, and supply chain incidents can disrupt critical services.&lt;br /&gt;
&lt;br /&gt;
Many organisations approach security from the wrong direction. They purchase security products, deploy anti-virus software, install firewalls, and then assume they are secure.&lt;br /&gt;
&lt;br /&gt;
The challenge is that modern environments no longer have a clearly defined security perimeter. Users work remotely, applications are hosted in the cloud, systems integrate with third-party suppliers, and business processes increasingly depend upon APIs and SaaS platforms.&lt;br /&gt;
&lt;br /&gt;
== The Security Pyramid ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    Trust&lt;br /&gt;
    (Customers, Partners, Regulators)&lt;br /&gt;
&lt;br /&gt;
                 Compliance&lt;br /&gt;
       (ISO 27001, PCI DSS, GDPR)&lt;br /&gt;
&lt;br /&gt;
            Security Governance&lt;br /&gt;
      (Policies, Risk Management, Auditing)&lt;br /&gt;
&lt;br /&gt;
           Security Architecture&lt;br /&gt;
       (Zero Trust, Secure by Design)&lt;br /&gt;
&lt;br /&gt;
             Technical Controls&lt;br /&gt;
    (MFA, Encryption, Firewalls, EDR)&lt;br /&gt;
&lt;br /&gt;
              Technology Assets&lt;br /&gt;
      (People, Devices, Applications, Data)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ultimate objective is trust. Each layer contributes towards establishing and maintaining that trust.&lt;br /&gt;
&lt;br /&gt;
== Business Outcomes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Security Capability&lt;br /&gt;
! Business Outcome&lt;br /&gt;
|-&lt;br /&gt;
| Secure by Design&lt;br /&gt;
| Reduced remediation costs and fewer security defects&lt;br /&gt;
|-&lt;br /&gt;
| Zero Trust&lt;br /&gt;
| Reduced impact of compromised accounts and devices&lt;br /&gt;
|-&lt;br /&gt;
| Cyber Essentials&lt;br /&gt;
| Reduced exposure to common cyber attacks&lt;br /&gt;
|-&lt;br /&gt;
| GDPR&lt;br /&gt;
| Improved protection of personal data and customer confidence&lt;br /&gt;
|-&lt;br /&gt;
| ISO 27001&lt;br /&gt;
| Stronger governance and audit readiness&lt;br /&gt;
|-&lt;br /&gt;
| PCI DSS&lt;br /&gt;
| Improved protection of payment information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What Does Secure by Design Mean? ==&lt;br /&gt;
&lt;br /&gt;
Secure by Design is the practice of considering security requirements throughout the entire system lifecycle. Rather than adding controls after implementation, security is incorporated during planning, design, development, deployment, and operation.&lt;br /&gt;
&lt;br /&gt;
=== Traditional Approach ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Build System&lt;br /&gt;
 ↓&lt;br /&gt;
Deploy System&lt;br /&gt;
 ↓&lt;br /&gt;
Discover Security Problems&lt;br /&gt;
 ↓&lt;br /&gt;
Add Controls&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure by Design Approach ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identify Risks&lt;br /&gt;
 ↓&lt;br /&gt;
Design Controls&lt;br /&gt;
 ↓&lt;br /&gt;
Build Secure Components&lt;br /&gt;
 ↓&lt;br /&gt;
Deploy Secure Solution&lt;br /&gt;
 ↓&lt;br /&gt;
Continually Improve&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Security defects discovered during design are typically far less expensive to address than vulnerabilities identified after deployment.&lt;br /&gt;
&lt;br /&gt;
=== Core Principles ===&lt;br /&gt;
* Security considered during requirements gathering.&lt;br /&gt;
* Risks identified before implementation.&lt;br /&gt;
* Sensitive data protected by default.&lt;br /&gt;
* Least privilege access.&lt;br /&gt;
* Measurable controls.&lt;br /&gt;
* Fail-safe design.&lt;br /&gt;
&lt;br /&gt;
== Understanding Zero Trust ==&lt;br /&gt;
&lt;br /&gt;
Zero Trust does not mean trusting nobody. It means never granting trust automatically and always verifying appropriately.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User → Verification&lt;br /&gt;
Device → Verification&lt;br /&gt;
Application → Verification&lt;br /&gt;
Data Request → Verification&lt;br /&gt;
Access Granted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trust becomes dynamic and contextual rather than permanent.&lt;br /&gt;
&lt;br /&gt;
== Cyber Essentials: The Foundation Layer ==&lt;br /&gt;
&lt;br /&gt;
Cyber Essentials provides practical baseline controls including:&lt;br /&gt;
&lt;br /&gt;
* Firewalls&lt;br /&gt;
* Secure Configuration&lt;br /&gt;
* Access Control&lt;br /&gt;
* Malware Protection&lt;br /&gt;
* Vulnerability and Patch Management&lt;br /&gt;
&lt;br /&gt;
Many successful attacks exploit weaknesses that could have been prevented through fundamental security hygiene.&lt;br /&gt;
&lt;br /&gt;
== GDPR: Security Through Privacy ==&lt;br /&gt;
&lt;br /&gt;
The General Data Protection Regulation (GDPR) is often viewed solely as a compliance obligation. In practice, GDPR is also a trust framework.&lt;br /&gt;
&lt;br /&gt;
* Data Minimisation&lt;br /&gt;
* Purpose Limitation&lt;br /&gt;
* Access Control&lt;br /&gt;
* Accountability&lt;br /&gt;
* Privacy by Design&lt;br /&gt;
* Breach Management&lt;br /&gt;
&lt;br /&gt;
== ISO 27001: Governance and Continuous Improvement ==&lt;br /&gt;
&lt;br /&gt;
ISO 27001 focuses on governance, risk management, and continual improvement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identify Assets&lt;br /&gt;
 ↓&lt;br /&gt;
Assess Risks&lt;br /&gt;
 ↓&lt;br /&gt;
Implement Controls&lt;br /&gt;
 ↓&lt;br /&gt;
Monitor&lt;br /&gt;
 ↓&lt;br /&gt;
Review&lt;br /&gt;
 ↓&lt;br /&gt;
Improve&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benefits include improved risk visibility, governance, audit readiness, and customer confidence.&lt;br /&gt;
&lt;br /&gt;
== PCI DSS: Protecting Payment Data ==&lt;br /&gt;
&lt;br /&gt;
PCI DSS applies to organisations that process, store, or transmit payment card information.&lt;br /&gt;
&lt;br /&gt;
Common requirements include network segmentation, encryption, vulnerability management, access control, monitoring, logging, auditing, and incident response.&lt;br /&gt;
&lt;br /&gt;
== Security as a Competitive Advantage ==&lt;br /&gt;
&lt;br /&gt;
Security is frequently viewed as a cost centre. Increasingly, it is also a competitive differentiator.&lt;br /&gt;
&lt;br /&gt;
Demonstrating a mature approach to security can help organisations:&lt;br /&gt;
&lt;br /&gt;
* Win new business opportunities.&lt;br /&gt;
* Satisfy customer requirements.&lt;br /&gt;
* Strengthen supplier relationships.&lt;br /&gt;
* Reduce procurement friction.&lt;br /&gt;
* Improve stakeholder confidence.&lt;br /&gt;
&lt;br /&gt;
== How These Frameworks Work Together ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Framework&lt;br /&gt;
! Primary Focus&lt;br /&gt;
|-&lt;br /&gt;
| Secure by Design&lt;br /&gt;
| Building secure systems from the outset&lt;br /&gt;
|-&lt;br /&gt;
| Zero Trust&lt;br /&gt;
| Security architecture and access verification&lt;br /&gt;
|-&lt;br /&gt;
| Cyber Essentials&lt;br /&gt;
| Baseline technical controls&lt;br /&gt;
|-&lt;br /&gt;
| GDPR&lt;br /&gt;
| Privacy and personal data protection&lt;br /&gt;
|-&lt;br /&gt;
| ISO 27001&lt;br /&gt;
| Governance and risk management&lt;br /&gt;
|-&lt;br /&gt;
| PCI DSS&lt;br /&gt;
| Protection of payment card data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Treating Compliance as Security ===&lt;br /&gt;
Passing an audit does not guarantee security.&lt;br /&gt;
&lt;br /&gt;
=== Buying Products Instead of Solving Problems ===&lt;br /&gt;
Products should support a strategy, not become the strategy.&lt;br /&gt;
&lt;br /&gt;
=== Viewing Security as a Cost Rather Than an Investment ===&lt;br /&gt;
Security should be evaluated through both risk reduction and business enablement.&lt;br /&gt;
&lt;br /&gt;
=== Ignoring Human Factors ===&lt;br /&gt;
Training, awareness, communication, and culture remain critical.&lt;br /&gt;
&lt;br /&gt;
== Design and Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Assume credentials may be compromised.&lt;br /&gt;
* Implement least privilege.&lt;br /&gt;
* Encrypt data at rest and in transit.&lt;br /&gt;
* Separate duties.&lt;br /&gt;
* Log important events.&lt;br /&gt;
* Monitor continuously.&lt;br /&gt;
* Automate detection where practical.&lt;br /&gt;
* Design for recovery as well as prevention.&lt;br /&gt;
* Treat compliance requirements as design requirements.&lt;br /&gt;
&lt;br /&gt;
== A Practical Security Model ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
People&lt;br /&gt;
 ↓&lt;br /&gt;
Identity&lt;br /&gt;
 ↓&lt;br /&gt;
Devices&lt;br /&gt;
 ↓&lt;br /&gt;
Applications&lt;br /&gt;
 ↓&lt;br /&gt;
Data&lt;br /&gt;
 ↓&lt;br /&gt;
Governance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Security requires alignment between people, processes, technology, and organisational objectives.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The ultimate goal of security is not compliance, certification, or technology deployment.&lt;br /&gt;
&lt;br /&gt;
The goal is trust.&lt;br /&gt;
&lt;br /&gt;
Trust that systems will operate reliably.&lt;br /&gt;
Trust that information will remain protected.&lt;br /&gt;
Trust that customers, employees, and partners can interact safely.&lt;br /&gt;
Trust that the organisation can continue operating when incidents occur.&lt;br /&gt;
&lt;br /&gt;
Secure by Design, Zero Trust, Cyber Essentials, GDPR, ISO 27001, and PCI DSS work together to create resilient, secure, auditable, and trustworthy organisations.&lt;br /&gt;
&lt;br /&gt;
Security is not merely a technical function. It is a business capability that protects value, supports growth, enables innovation, and strengthens stakeholder confidence.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Defence in Depth]]&lt;br /&gt;
* [[Least Privilege Access]]&lt;br /&gt;
* [[Identity &amp;amp; Access Management (IAM)]]&lt;br /&gt;
* [[Multi-Factor Authentication (MFA)]]&lt;br /&gt;
* [[Information Security Management Systems (ISMS)]]&lt;br /&gt;
* [[Security Operations (SecOps)]]&lt;br /&gt;
* [[Risk Management]]&lt;br /&gt;
* [[Data Classification and Handling]]&lt;br /&gt;
* [[Business Continuity &amp;amp; Disaster Recovery]]&lt;br /&gt;
* [[Cloud Security Architecture]]&lt;br /&gt;
* [[Cyber Essentials]]&lt;br /&gt;
* [[ISO 27001]]&lt;br /&gt;
* [[PCI DSS]]&lt;br /&gt;
* [[GDPR]]&lt;br /&gt;
* [[Zero Trust Architecture]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Security_by_Design:_Building_Trust_Through_Zero_Trust,_Cyber_Essentials,_GDPR_and_Compliance_Frameworks&amp;diff=435</id>
		<title>Security by Design: Building Trust Through Zero Trust, Cyber Essentials, GDPR and Compliance Frameworks</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Security_by_Design:_Building_Trust_Through_Zero_Trust,_Cyber_Essentials,_GDPR_and_Compliance_Frameworks&amp;diff=435"/>
		<updated>2026-07-06T08:04:56Z</updated>

		<summary type="html">&lt;p&gt;Dex: /* Related Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Modern organisations face increasing cyber threats, stricter regulatory requirements, and growing customer expectations around security and privacy. Security can no longer be treated as a perimeter defence or an afterthought.&lt;br /&gt;
&lt;br /&gt;
This article explores how Secure by Design principles, Zero Trust Architecture, Cyber Essentials, GDPR, ISO 27001, PCI DSS, and related frameworks work together to create resilient, secure, auditable, and trustworthy systems.&lt;br /&gt;
&lt;br /&gt;
== Business Value ==&lt;br /&gt;
&lt;br /&gt;
Security is no longer solely an IT concern.&lt;br /&gt;
&lt;br /&gt;
Customers increasingly expect organisations to protect their information, regulators impose significant penalties for security failures, and cyber incidents can lead to financial loss, operational disruption, reputational damage, and loss of stakeholder trust.&lt;br /&gt;
&lt;br /&gt;
By adopting Secure by Design principles, Zero Trust architecture, Cyber Essentials controls, and recognised compliance frameworks, organisations can:&lt;br /&gt;
&lt;br /&gt;
* Reduce cyber risk and improve resilience.&lt;br /&gt;
* Protect customer, employee, and organisational data.&lt;br /&gt;
* Demonstrate regulatory and contractual compliance.&lt;br /&gt;
* Support secure remote and hybrid working.&lt;br /&gt;
* Enable digital transformation initiatives with confidence.&lt;br /&gt;
* Reduce the likelihood and impact of security incidents.&lt;br /&gt;
* Improve audit readiness and governance.&lt;br /&gt;
* Strengthen customer, supplier, and stakeholder trust.&lt;br /&gt;
&lt;br /&gt;
Effective security is not simply about preventing attacks. It enables organisations to operate confidently, scale securely, protect their reputation, and build lasting trust.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Security is often viewed as a technical responsibility, yet the consequences of security failures are typically business problems.&lt;br /&gt;
&lt;br /&gt;
Data breaches can damage customer confidence, ransomware can halt operations, regulatory failures can result in financial penalties, and supply chain incidents can disrupt critical services.&lt;br /&gt;
&lt;br /&gt;
Many organisations approach security from the wrong direction. They purchase security products, deploy anti-virus software, install firewalls, and then assume they are secure.&lt;br /&gt;
&lt;br /&gt;
The challenge is that modern environments no longer have a clearly defined security perimeter. Users work remotely, applications are hosted in the cloud, systems integrate with third-party suppliers, and business processes increasingly depend upon APIs and SaaS platforms.&lt;br /&gt;
&lt;br /&gt;
== The Security Pyramid ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    Trust&lt;br /&gt;
    (Customers, Partners, Regulators)&lt;br /&gt;
&lt;br /&gt;
                 Compliance&lt;br /&gt;
       (ISO 27001, PCI DSS, GDPR)&lt;br /&gt;
&lt;br /&gt;
            Security Governance&lt;br /&gt;
      (Policies, Risk Management, Auditing)&lt;br /&gt;
&lt;br /&gt;
           Security Architecture&lt;br /&gt;
       (Zero Trust, Secure by Design)&lt;br /&gt;
&lt;br /&gt;
             Technical Controls&lt;br /&gt;
    (MFA, Encryption, Firewalls, EDR)&lt;br /&gt;
&lt;br /&gt;
              Technology Assets&lt;br /&gt;
      (People, Devices, Applications, Data)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ultimate objective is trust. Each layer contributes towards establishing and maintaining that trust.&lt;br /&gt;
&lt;br /&gt;
== Business Outcomes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Security Capability&lt;br /&gt;
! Business Outcome&lt;br /&gt;
|-&lt;br /&gt;
| Secure by Design&lt;br /&gt;
| Reduced remediation costs and fewer security defects&lt;br /&gt;
|-&lt;br /&gt;
| Zero Trust&lt;br /&gt;
| Reduced impact of compromised accounts and devices&lt;br /&gt;
|-&lt;br /&gt;
| Cyber Essentials&lt;br /&gt;
| Reduced exposure to common cyber attacks&lt;br /&gt;
|-&lt;br /&gt;
| GDPR&lt;br /&gt;
| Improved protection of personal data and customer confidence&lt;br /&gt;
|-&lt;br /&gt;
| ISO 27001&lt;br /&gt;
| Stronger governance and audit readiness&lt;br /&gt;
|-&lt;br /&gt;
| PCI DSS&lt;br /&gt;
| Improved protection of payment information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What Does Secure by Design Mean? ==&lt;br /&gt;
&lt;br /&gt;
Secure by Design is the practice of considering security requirements throughout the entire system lifecycle. Rather than adding controls after implementation, security is incorporated during planning, design, development, deployment, and operation.&lt;br /&gt;
&lt;br /&gt;
=== Traditional Approach ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Build System&lt;br /&gt;
 ↓&lt;br /&gt;
Deploy System&lt;br /&gt;
 ↓&lt;br /&gt;
Discover Security Problems&lt;br /&gt;
 ↓&lt;br /&gt;
Add Controls&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure by Design Approach ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identify Risks&lt;br /&gt;
 ↓&lt;br /&gt;
Design Controls&lt;br /&gt;
 ↓&lt;br /&gt;
Build Secure Components&lt;br /&gt;
 ↓&lt;br /&gt;
Deploy Secure Solution&lt;br /&gt;
 ↓&lt;br /&gt;
Continually Improve&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Security defects discovered during design are typically far less expensive to address than vulnerabilities identified after deployment.&lt;br /&gt;
&lt;br /&gt;
=== Core Principles ===&lt;br /&gt;
* Security considered during requirements gathering.&lt;br /&gt;
* Risks identified before implementation.&lt;br /&gt;
* Sensitive data protected by default.&lt;br /&gt;
* Least privilege access.&lt;br /&gt;
* Measurable controls.&lt;br /&gt;
* Fail-safe design.&lt;br /&gt;
&lt;br /&gt;
== Understanding Zero Trust ==&lt;br /&gt;
&lt;br /&gt;
Zero Trust does not mean trusting nobody. It means never granting trust automatically and always verifying appropriately.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User → Verification&lt;br /&gt;
Device → Verification&lt;br /&gt;
Application → Verification&lt;br /&gt;
Data Request → Verification&lt;br /&gt;
Access Granted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trust becomes dynamic and contextual rather than permanent.&lt;br /&gt;
&lt;br /&gt;
== Cyber Essentials: The Foundation Layer ==&lt;br /&gt;
&lt;br /&gt;
Cyber Essentials provides practical baseline controls including:&lt;br /&gt;
&lt;br /&gt;
* Firewalls&lt;br /&gt;
* Secure Configuration&lt;br /&gt;
* Access Control&lt;br /&gt;
* Malware Protection&lt;br /&gt;
* Vulnerability and Patch Management&lt;br /&gt;
&lt;br /&gt;
Many successful attacks exploit weaknesses that could have been prevented through fundamental security hygiene.&lt;br /&gt;
&lt;br /&gt;
== GDPR: Security Through Privacy ==&lt;br /&gt;
&lt;br /&gt;
The General Data Protection Regulation (GDPR) is often viewed solely as a compliance obligation. In practice, GDPR is also a trust framework.&lt;br /&gt;
&lt;br /&gt;
* Data Minimisation&lt;br /&gt;
* Purpose Limitation&lt;br /&gt;
* Access Control&lt;br /&gt;
* Accountability&lt;br /&gt;
* Privacy by Design&lt;br /&gt;
* Breach Management&lt;br /&gt;
&lt;br /&gt;
== ISO 27001: Governance and Continuous Improvement ==&lt;br /&gt;
&lt;br /&gt;
ISO 27001 focuses on governance, risk management, and continual improvement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identify Assets&lt;br /&gt;
 ↓&lt;br /&gt;
Assess Risks&lt;br /&gt;
 ↓&lt;br /&gt;
Implement Controls&lt;br /&gt;
 ↓&lt;br /&gt;
Monitor&lt;br /&gt;
 ↓&lt;br /&gt;
Review&lt;br /&gt;
 ↓&lt;br /&gt;
Improve&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benefits include improved risk visibility, governance, audit readiness, and customer confidence.&lt;br /&gt;
&lt;br /&gt;
== PCI DSS: Protecting Payment Data ==&lt;br /&gt;
&lt;br /&gt;
PCI DSS applies to organisations that process, store, or transmit payment card information.&lt;br /&gt;
&lt;br /&gt;
Common requirements include network segmentation, encryption, vulnerability management, access control, monitoring, logging, auditing, and incident response.&lt;br /&gt;
&lt;br /&gt;
== Security as a Competitive Advantage ==&lt;br /&gt;
&lt;br /&gt;
Security is frequently viewed as a cost centre. Increasingly, it is also a competitive differentiator.&lt;br /&gt;
&lt;br /&gt;
Demonstrating a mature approach to security can help organisations:&lt;br /&gt;
&lt;br /&gt;
* Win new business opportunities.&lt;br /&gt;
* Satisfy customer requirements.&lt;br /&gt;
* Strengthen supplier relationships.&lt;br /&gt;
* Reduce procurement friction.&lt;br /&gt;
* Improve stakeholder confidence.&lt;br /&gt;
&lt;br /&gt;
== How These Frameworks Work Together ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Framework&lt;br /&gt;
! Primary Focus&lt;br /&gt;
|-&lt;br /&gt;
| Secure by Design&lt;br /&gt;
| Building secure systems from the outset&lt;br /&gt;
|-&lt;br /&gt;
| Zero Trust&lt;br /&gt;
| Security architecture and access verification&lt;br /&gt;
|-&lt;br /&gt;
| Cyber Essentials&lt;br /&gt;
| Baseline technical controls&lt;br /&gt;
|-&lt;br /&gt;
| GDPR&lt;br /&gt;
| Privacy and personal data protection&lt;br /&gt;
|-&lt;br /&gt;
| ISO 27001&lt;br /&gt;
| Governance and risk management&lt;br /&gt;
|-&lt;br /&gt;
| PCI DSS&lt;br /&gt;
| Protection of payment card data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Treating Compliance as Security ===&lt;br /&gt;
Passing an audit does not guarantee security.&lt;br /&gt;
&lt;br /&gt;
=== Buying Products Instead of Solving Problems ===&lt;br /&gt;
Products should support a strategy, not become the strategy.&lt;br /&gt;
&lt;br /&gt;
=== Viewing Security as a Cost Rather Than an Investment ===&lt;br /&gt;
Security should be evaluated through both risk reduction and business enablement.&lt;br /&gt;
&lt;br /&gt;
=== Ignoring Human Factors ===&lt;br /&gt;
Training, awareness, communication, and culture remain critical.&lt;br /&gt;
&lt;br /&gt;
== Design and Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Assume credentials may be compromised.&lt;br /&gt;
* Implement least privilege.&lt;br /&gt;
* Encrypt data at rest and in transit.&lt;br /&gt;
* Separate duties.&lt;br /&gt;
* Log important events.&lt;br /&gt;
* Monitor continuously.&lt;br /&gt;
* Automate detection where practical.&lt;br /&gt;
* Design for recovery as well as prevention.&lt;br /&gt;
* Treat compliance requirements as design requirements.&lt;br /&gt;
&lt;br /&gt;
== A Practical Security Model ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
People&lt;br /&gt;
 ↓&lt;br /&gt;
Identity&lt;br /&gt;
 ↓&lt;br /&gt;
Devices&lt;br /&gt;
 ↓&lt;br /&gt;
Applications&lt;br /&gt;
 ↓&lt;br /&gt;
Data&lt;br /&gt;
 ↓&lt;br /&gt;
Governance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Security requires alignment between people, processes, technology, and organisational objectives.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The ultimate goal of security is not compliance, certification, or technology deployment.&lt;br /&gt;
&lt;br /&gt;
The goal is trust.&lt;br /&gt;
&lt;br /&gt;
Trust that systems will operate reliably.&lt;br /&gt;
Trust that information will remain protected.&lt;br /&gt;
Trust that customers, employees, and partners can interact safely.&lt;br /&gt;
Trust that the organisation can continue operating when incidents occur.&lt;br /&gt;
&lt;br /&gt;
Secure by Design, Zero Trust, Cyber Essentials, GDPR, ISO 27001, and PCI DSS work together to create resilient, secure, auditable, and trustworthy organisations.&lt;br /&gt;
&lt;br /&gt;
Security is not merely a technical function. It is a business capability that protects value, supports growth, enables innovation, and strengthens stakeholder confidence.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Defence in Depth]]&lt;br /&gt;
* [[Least Privilege Access]]&lt;br /&gt;
* [[Identity &amp;amp; Access Management (IAM)]]&lt;br /&gt;
* [[Multi-Factor Authentication (MFA)]]&lt;br /&gt;
* [[Information Security Management Systems (ISMS)]]&lt;br /&gt;
* [[Security Operations (SecOps)]]&lt;br /&gt;
* [[Risk Management]]&lt;br /&gt;
* [[Data Classification and Handling]]&lt;br /&gt;
* [[Business Continuity &amp;amp; Disaster Recovery]]&lt;br /&gt;
* [[Cloud Security Architecture]]&lt;br /&gt;
* [[Cyber Essentials]]&lt;br /&gt;
* [[ISO 27001]]&lt;br /&gt;
* [[PCI DSS]]&lt;br /&gt;
* [[GDPR]]&lt;br /&gt;
* [[Zero Trust Architecture]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Security_by_Design:_Building_Trust_Through_Zero_Trust,_Cyber_Essentials,_GDPR_and_Compliance_Frameworks&amp;diff=434</id>
		<title>Security by Design: Building Trust Through Zero Trust, Cyber Essentials, GDPR and Compliance Frameworks</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Security_by_Design:_Building_Trust_Through_Zero_Trust,_Cyber_Essentials,_GDPR_and_Compliance_Frameworks&amp;diff=434"/>
		<updated>2026-07-06T08:04:28Z</updated>

		<summary type="html">&lt;p&gt;Dex: /* Related Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Modern organisations face increasing cyber threats, stricter regulatory requirements, and growing customer expectations around security and privacy. Security can no longer be treated as a perimeter defence or an afterthought.&lt;br /&gt;
&lt;br /&gt;
This article explores how Secure by Design principles, Zero Trust Architecture, Cyber Essentials, GDPR, ISO 27001, PCI DSS, and related frameworks work together to create resilient, secure, auditable, and trustworthy systems.&lt;br /&gt;
&lt;br /&gt;
== Business Value ==&lt;br /&gt;
&lt;br /&gt;
Security is no longer solely an IT concern.&lt;br /&gt;
&lt;br /&gt;
Customers increasingly expect organisations to protect their information, regulators impose significant penalties for security failures, and cyber incidents can lead to financial loss, operational disruption, reputational damage, and loss of stakeholder trust.&lt;br /&gt;
&lt;br /&gt;
By adopting Secure by Design principles, Zero Trust architecture, Cyber Essentials controls, and recognised compliance frameworks, organisations can:&lt;br /&gt;
&lt;br /&gt;
* Reduce cyber risk and improve resilience.&lt;br /&gt;
* Protect customer, employee, and organisational data.&lt;br /&gt;
* Demonstrate regulatory and contractual compliance.&lt;br /&gt;
* Support secure remote and hybrid working.&lt;br /&gt;
* Enable digital transformation initiatives with confidence.&lt;br /&gt;
* Reduce the likelihood and impact of security incidents.&lt;br /&gt;
* Improve audit readiness and governance.&lt;br /&gt;
* Strengthen customer, supplier, and stakeholder trust.&lt;br /&gt;
&lt;br /&gt;
Effective security is not simply about preventing attacks. It enables organisations to operate confidently, scale securely, protect their reputation, and build lasting trust.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Security is often viewed as a technical responsibility, yet the consequences of security failures are typically business problems.&lt;br /&gt;
&lt;br /&gt;
Data breaches can damage customer confidence, ransomware can halt operations, regulatory failures can result in financial penalties, and supply chain incidents can disrupt critical services.&lt;br /&gt;
&lt;br /&gt;
Many organisations approach security from the wrong direction. They purchase security products, deploy anti-virus software, install firewalls, and then assume they are secure.&lt;br /&gt;
&lt;br /&gt;
The challenge is that modern environments no longer have a clearly defined security perimeter. Users work remotely, applications are hosted in the cloud, systems integrate with third-party suppliers, and business processes increasingly depend upon APIs and SaaS platforms.&lt;br /&gt;
&lt;br /&gt;
== The Security Pyramid ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    Trust&lt;br /&gt;
    (Customers, Partners, Regulators)&lt;br /&gt;
&lt;br /&gt;
                 Compliance&lt;br /&gt;
       (ISO 27001, PCI DSS, GDPR)&lt;br /&gt;
&lt;br /&gt;
            Security Governance&lt;br /&gt;
      (Policies, Risk Management, Auditing)&lt;br /&gt;
&lt;br /&gt;
           Security Architecture&lt;br /&gt;
       (Zero Trust, Secure by Design)&lt;br /&gt;
&lt;br /&gt;
             Technical Controls&lt;br /&gt;
    (MFA, Encryption, Firewalls, EDR)&lt;br /&gt;
&lt;br /&gt;
              Technology Assets&lt;br /&gt;
      (People, Devices, Applications, Data)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ultimate objective is trust. Each layer contributes towards establishing and maintaining that trust.&lt;br /&gt;
&lt;br /&gt;
== Business Outcomes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Security Capability&lt;br /&gt;
! Business Outcome&lt;br /&gt;
|-&lt;br /&gt;
| Secure by Design&lt;br /&gt;
| Reduced remediation costs and fewer security defects&lt;br /&gt;
|-&lt;br /&gt;
| Zero Trust&lt;br /&gt;
| Reduced impact of compromised accounts and devices&lt;br /&gt;
|-&lt;br /&gt;
| Cyber Essentials&lt;br /&gt;
| Reduced exposure to common cyber attacks&lt;br /&gt;
|-&lt;br /&gt;
| GDPR&lt;br /&gt;
| Improved protection of personal data and customer confidence&lt;br /&gt;
|-&lt;br /&gt;
| ISO 27001&lt;br /&gt;
| Stronger governance and audit readiness&lt;br /&gt;
|-&lt;br /&gt;
| PCI DSS&lt;br /&gt;
| Improved protection of payment information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What Does Secure by Design Mean? ==&lt;br /&gt;
&lt;br /&gt;
Secure by Design is the practice of considering security requirements throughout the entire system lifecycle. Rather than adding controls after implementation, security is incorporated during planning, design, development, deployment, and operation.&lt;br /&gt;
&lt;br /&gt;
=== Traditional Approach ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Build System&lt;br /&gt;
 ↓&lt;br /&gt;
Deploy System&lt;br /&gt;
 ↓&lt;br /&gt;
Discover Security Problems&lt;br /&gt;
 ↓&lt;br /&gt;
Add Controls&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure by Design Approach ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identify Risks&lt;br /&gt;
 ↓&lt;br /&gt;
Design Controls&lt;br /&gt;
 ↓&lt;br /&gt;
Build Secure Components&lt;br /&gt;
 ↓&lt;br /&gt;
Deploy Secure Solution&lt;br /&gt;
 ↓&lt;br /&gt;
Continually Improve&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Security defects discovered during design are typically far less expensive to address than vulnerabilities identified after deployment.&lt;br /&gt;
&lt;br /&gt;
=== Core Principles ===&lt;br /&gt;
* Security considered during requirements gathering.&lt;br /&gt;
* Risks identified before implementation.&lt;br /&gt;
* Sensitive data protected by default.&lt;br /&gt;
* Least privilege access.&lt;br /&gt;
* Measurable controls.&lt;br /&gt;
* Fail-safe design.&lt;br /&gt;
&lt;br /&gt;
== Understanding Zero Trust ==&lt;br /&gt;
&lt;br /&gt;
Zero Trust does not mean trusting nobody. It means never granting trust automatically and always verifying appropriately.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User → Verification&lt;br /&gt;
Device → Verification&lt;br /&gt;
Application → Verification&lt;br /&gt;
Data Request → Verification&lt;br /&gt;
Access Granted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trust becomes dynamic and contextual rather than permanent.&lt;br /&gt;
&lt;br /&gt;
== Cyber Essentials: The Foundation Layer ==&lt;br /&gt;
&lt;br /&gt;
Cyber Essentials provides practical baseline controls including:&lt;br /&gt;
&lt;br /&gt;
* Firewalls&lt;br /&gt;
* Secure Configuration&lt;br /&gt;
* Access Control&lt;br /&gt;
* Malware Protection&lt;br /&gt;
* Vulnerability and Patch Management&lt;br /&gt;
&lt;br /&gt;
Many successful attacks exploit weaknesses that could have been prevented through fundamental security hygiene.&lt;br /&gt;
&lt;br /&gt;
== GDPR: Security Through Privacy ==&lt;br /&gt;
&lt;br /&gt;
The General Data Protection Regulation (GDPR) is often viewed solely as a compliance obligation. In practice, GDPR is also a trust framework.&lt;br /&gt;
&lt;br /&gt;
* Data Minimisation&lt;br /&gt;
* Purpose Limitation&lt;br /&gt;
* Access Control&lt;br /&gt;
* Accountability&lt;br /&gt;
* Privacy by Design&lt;br /&gt;
* Breach Management&lt;br /&gt;
&lt;br /&gt;
== ISO 27001: Governance and Continuous Improvement ==&lt;br /&gt;
&lt;br /&gt;
ISO 27001 focuses on governance, risk management, and continual improvement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identify Assets&lt;br /&gt;
 ↓&lt;br /&gt;
Assess Risks&lt;br /&gt;
 ↓&lt;br /&gt;
Implement Controls&lt;br /&gt;
 ↓&lt;br /&gt;
Monitor&lt;br /&gt;
 ↓&lt;br /&gt;
Review&lt;br /&gt;
 ↓&lt;br /&gt;
Improve&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benefits include improved risk visibility, governance, audit readiness, and customer confidence.&lt;br /&gt;
&lt;br /&gt;
== PCI DSS: Protecting Payment Data ==&lt;br /&gt;
&lt;br /&gt;
PCI DSS applies to organisations that process, store, or transmit payment card information.&lt;br /&gt;
&lt;br /&gt;
Common requirements include network segmentation, encryption, vulnerability management, access control, monitoring, logging, auditing, and incident response.&lt;br /&gt;
&lt;br /&gt;
== Security as a Competitive Advantage ==&lt;br /&gt;
&lt;br /&gt;
Security is frequently viewed as a cost centre. Increasingly, it is also a competitive differentiator.&lt;br /&gt;
&lt;br /&gt;
Demonstrating a mature approach to security can help organisations:&lt;br /&gt;
&lt;br /&gt;
* Win new business opportunities.&lt;br /&gt;
* Satisfy customer requirements.&lt;br /&gt;
* Strengthen supplier relationships.&lt;br /&gt;
* Reduce procurement friction.&lt;br /&gt;
* Improve stakeholder confidence.&lt;br /&gt;
&lt;br /&gt;
== How These Frameworks Work Together ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Framework&lt;br /&gt;
! Primary Focus&lt;br /&gt;
|-&lt;br /&gt;
| Secure by Design&lt;br /&gt;
| Building secure systems from the outset&lt;br /&gt;
|-&lt;br /&gt;
| Zero Trust&lt;br /&gt;
| Security architecture and access verification&lt;br /&gt;
|-&lt;br /&gt;
| Cyber Essentials&lt;br /&gt;
| Baseline technical controls&lt;br /&gt;
|-&lt;br /&gt;
| GDPR&lt;br /&gt;
| Privacy and personal data protection&lt;br /&gt;
|-&lt;br /&gt;
| ISO 27001&lt;br /&gt;
| Governance and risk management&lt;br /&gt;
|-&lt;br /&gt;
| PCI DSS&lt;br /&gt;
| Protection of payment card data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Treating Compliance as Security ===&lt;br /&gt;
Passing an audit does not guarantee security.&lt;br /&gt;
&lt;br /&gt;
=== Buying Products Instead of Solving Problems ===&lt;br /&gt;
Products should support a strategy, not become the strategy.&lt;br /&gt;
&lt;br /&gt;
=== Viewing Security as a Cost Rather Than an Investment ===&lt;br /&gt;
Security should be evaluated through both risk reduction and business enablement.&lt;br /&gt;
&lt;br /&gt;
=== Ignoring Human Factors ===&lt;br /&gt;
Training, awareness, communication, and culture remain critical.&lt;br /&gt;
&lt;br /&gt;
== Design and Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Assume credentials may be compromised.&lt;br /&gt;
* Implement least privilege.&lt;br /&gt;
* Encrypt data at rest and in transit.&lt;br /&gt;
* Separate duties.&lt;br /&gt;
* Log important events.&lt;br /&gt;
* Monitor continuously.&lt;br /&gt;
* Automate detection where practical.&lt;br /&gt;
* Design for recovery as well as prevention.&lt;br /&gt;
* Treat compliance requirements as design requirements.&lt;br /&gt;
&lt;br /&gt;
== A Practical Security Model ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
People&lt;br /&gt;
 ↓&lt;br /&gt;
Identity&lt;br /&gt;
 ↓&lt;br /&gt;
Devices&lt;br /&gt;
 ↓&lt;br /&gt;
Applications&lt;br /&gt;
 ↓&lt;br /&gt;
Data&lt;br /&gt;
 ↓&lt;br /&gt;
Governance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Security requires alignment between people, processes, technology, and organisational objectives.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The ultimate goal of security is not compliance, certification, or technology deployment.&lt;br /&gt;
&lt;br /&gt;
The goal is trust.&lt;br /&gt;
&lt;br /&gt;
Trust that systems will operate reliably.&lt;br /&gt;
Trust that information will remain protected.&lt;br /&gt;
Trust that customers, employees, and partners can interact safely.&lt;br /&gt;
Trust that the organisation can continue operating when incidents occur.&lt;br /&gt;
&lt;br /&gt;
Secure by Design, Zero Trust, Cyber Essentials, GDPR, ISO 27001, and PCI DSS work together to create resilient, secure, auditable, and trustworthy organisations.&lt;br /&gt;
&lt;br /&gt;
Security is not merely a technical function. It is a business capability that protects value, supports growth, enables innovation, and strengthens stakeholder confidence.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Defence in Depth]]&lt;br /&gt;
* [[Least Privilege Access]]&lt;br /&gt;
* [[Identity &amp;amp; Access Management (IAM)]]&lt;br /&gt;
* [[Multi-Factor Authentication (MFA)]]&lt;br /&gt;
* [[Information Security Management Systems (ISMS]]&lt;br /&gt;
* [[Security Operations (SecOps)]]&lt;br /&gt;
* [[Risk Management]]&lt;br /&gt;
* [[Data Classification and Handling]]&lt;br /&gt;
* [[Business Continuity &amp;amp; Disaster Recovery]]&lt;br /&gt;
* [[Cloud Security Architecture]]&lt;br /&gt;
* [[Cyber Essentials]]&lt;br /&gt;
* [[ISO 27001]]&lt;br /&gt;
* [[PCI DSS]]&lt;br /&gt;
* [[GDPR]]&lt;br /&gt;
* [[Zero Trust Architecture]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Security_by_Design:_Building_Trust_Through_Zero_Trust,_Cyber_Essentials,_GDPR_and_Compliance_Frameworks&amp;diff=433</id>
		<title>Security by Design: Building Trust Through Zero Trust, Cyber Essentials, GDPR and Compliance Frameworks</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Security_by_Design:_Building_Trust_Through_Zero_Trust,_Cyber_Essentials,_GDPR_and_Compliance_Frameworks&amp;diff=433"/>
		<updated>2026-07-06T07:58:42Z</updated>

		<summary type="html">&lt;p&gt;Dex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Modern organisations face increasing cyber threats, stricter regulatory requirements, and growing customer expectations around security and privacy. Security can no longer be treated as a perimeter defence or an afterthought.&lt;br /&gt;
&lt;br /&gt;
This article explores how Secure by Design principles, Zero Trust Architecture, Cyber Essentials, GDPR, ISO 27001, PCI DSS, and related frameworks work together to create resilient, secure, auditable, and trustworthy systems.&lt;br /&gt;
&lt;br /&gt;
== Business Value ==&lt;br /&gt;
&lt;br /&gt;
Security is no longer solely an IT concern.&lt;br /&gt;
&lt;br /&gt;
Customers increasingly expect organisations to protect their information, regulators impose significant penalties for security failures, and cyber incidents can lead to financial loss, operational disruption, reputational damage, and loss of stakeholder trust.&lt;br /&gt;
&lt;br /&gt;
By adopting Secure by Design principles, Zero Trust architecture, Cyber Essentials controls, and recognised compliance frameworks, organisations can:&lt;br /&gt;
&lt;br /&gt;
* Reduce cyber risk and improve resilience.&lt;br /&gt;
* Protect customer, employee, and organisational data.&lt;br /&gt;
* Demonstrate regulatory and contractual compliance.&lt;br /&gt;
* Support secure remote and hybrid working.&lt;br /&gt;
* Enable digital transformation initiatives with confidence.&lt;br /&gt;
* Reduce the likelihood and impact of security incidents.&lt;br /&gt;
* Improve audit readiness and governance.&lt;br /&gt;
* Strengthen customer, supplier, and stakeholder trust.&lt;br /&gt;
&lt;br /&gt;
Effective security is not simply about preventing attacks. It enables organisations to operate confidently, scale securely, protect their reputation, and build lasting trust.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Security is often viewed as a technical responsibility, yet the consequences of security failures are typically business problems.&lt;br /&gt;
&lt;br /&gt;
Data breaches can damage customer confidence, ransomware can halt operations, regulatory failures can result in financial penalties, and supply chain incidents can disrupt critical services.&lt;br /&gt;
&lt;br /&gt;
Many organisations approach security from the wrong direction. They purchase security products, deploy anti-virus software, install firewalls, and then assume they are secure.&lt;br /&gt;
&lt;br /&gt;
The challenge is that modern environments no longer have a clearly defined security perimeter. Users work remotely, applications are hosted in the cloud, systems integrate with third-party suppliers, and business processes increasingly depend upon APIs and SaaS platforms.&lt;br /&gt;
&lt;br /&gt;
== The Security Pyramid ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    Trust&lt;br /&gt;
    (Customers, Partners, Regulators)&lt;br /&gt;
&lt;br /&gt;
                 Compliance&lt;br /&gt;
       (ISO 27001, PCI DSS, GDPR)&lt;br /&gt;
&lt;br /&gt;
            Security Governance&lt;br /&gt;
      (Policies, Risk Management, Auditing)&lt;br /&gt;
&lt;br /&gt;
           Security Architecture&lt;br /&gt;
       (Zero Trust, Secure by Design)&lt;br /&gt;
&lt;br /&gt;
             Technical Controls&lt;br /&gt;
    (MFA, Encryption, Firewalls, EDR)&lt;br /&gt;
&lt;br /&gt;
              Technology Assets&lt;br /&gt;
      (People, Devices, Applications, Data)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The ultimate objective is trust. Each layer contributes towards establishing and maintaining that trust.&lt;br /&gt;
&lt;br /&gt;
== Business Outcomes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Security Capability&lt;br /&gt;
! Business Outcome&lt;br /&gt;
|-&lt;br /&gt;
| Secure by Design&lt;br /&gt;
| Reduced remediation costs and fewer security defects&lt;br /&gt;
|-&lt;br /&gt;
| Zero Trust&lt;br /&gt;
| Reduced impact of compromised accounts and devices&lt;br /&gt;
|-&lt;br /&gt;
| Cyber Essentials&lt;br /&gt;
| Reduced exposure to common cyber attacks&lt;br /&gt;
|-&lt;br /&gt;
| GDPR&lt;br /&gt;
| Improved protection of personal data and customer confidence&lt;br /&gt;
|-&lt;br /&gt;
| ISO 27001&lt;br /&gt;
| Stronger governance and audit readiness&lt;br /&gt;
|-&lt;br /&gt;
| PCI DSS&lt;br /&gt;
| Improved protection of payment information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== What Does Secure by Design Mean? ==&lt;br /&gt;
&lt;br /&gt;
Secure by Design is the practice of considering security requirements throughout the entire system lifecycle. Rather than adding controls after implementation, security is incorporated during planning, design, development, deployment, and operation.&lt;br /&gt;
&lt;br /&gt;
=== Traditional Approach ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Build System&lt;br /&gt;
 ↓&lt;br /&gt;
Deploy System&lt;br /&gt;
 ↓&lt;br /&gt;
Discover Security Problems&lt;br /&gt;
 ↓&lt;br /&gt;
Add Controls&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Secure by Design Approach ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identify Risks&lt;br /&gt;
 ↓&lt;br /&gt;
Design Controls&lt;br /&gt;
 ↓&lt;br /&gt;
Build Secure Components&lt;br /&gt;
 ↓&lt;br /&gt;
Deploy Secure Solution&lt;br /&gt;
 ↓&lt;br /&gt;
Continually Improve&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Security defects discovered during design are typically far less expensive to address than vulnerabilities identified after deployment.&lt;br /&gt;
&lt;br /&gt;
=== Core Principles ===&lt;br /&gt;
* Security considered during requirements gathering.&lt;br /&gt;
* Risks identified before implementation.&lt;br /&gt;
* Sensitive data protected by default.&lt;br /&gt;
* Least privilege access.&lt;br /&gt;
* Measurable controls.&lt;br /&gt;
* Fail-safe design.&lt;br /&gt;
&lt;br /&gt;
== Understanding Zero Trust ==&lt;br /&gt;
&lt;br /&gt;
Zero Trust does not mean trusting nobody. It means never granting trust automatically and always verifying appropriately.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User → Verification&lt;br /&gt;
Device → Verification&lt;br /&gt;
Application → Verification&lt;br /&gt;
Data Request → Verification&lt;br /&gt;
Access Granted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trust becomes dynamic and contextual rather than permanent.&lt;br /&gt;
&lt;br /&gt;
== Cyber Essentials: The Foundation Layer ==&lt;br /&gt;
&lt;br /&gt;
Cyber Essentials provides practical baseline controls including:&lt;br /&gt;
&lt;br /&gt;
* Firewalls&lt;br /&gt;
* Secure Configuration&lt;br /&gt;
* Access Control&lt;br /&gt;
* Malware Protection&lt;br /&gt;
* Vulnerability and Patch Management&lt;br /&gt;
&lt;br /&gt;
Many successful attacks exploit weaknesses that could have been prevented through fundamental security hygiene.&lt;br /&gt;
&lt;br /&gt;
== GDPR: Security Through Privacy ==&lt;br /&gt;
&lt;br /&gt;
The General Data Protection Regulation (GDPR) is often viewed solely as a compliance obligation. In practice, GDPR is also a trust framework.&lt;br /&gt;
&lt;br /&gt;
* Data Minimisation&lt;br /&gt;
* Purpose Limitation&lt;br /&gt;
* Access Control&lt;br /&gt;
* Accountability&lt;br /&gt;
* Privacy by Design&lt;br /&gt;
* Breach Management&lt;br /&gt;
&lt;br /&gt;
== ISO 27001: Governance and Continuous Improvement ==&lt;br /&gt;
&lt;br /&gt;
ISO 27001 focuses on governance, risk management, and continual improvement.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Identify Assets&lt;br /&gt;
 ↓&lt;br /&gt;
Assess Risks&lt;br /&gt;
 ↓&lt;br /&gt;
Implement Controls&lt;br /&gt;
 ↓&lt;br /&gt;
Monitor&lt;br /&gt;
 ↓&lt;br /&gt;
Review&lt;br /&gt;
 ↓&lt;br /&gt;
Improve&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benefits include improved risk visibility, governance, audit readiness, and customer confidence.&lt;br /&gt;
&lt;br /&gt;
== PCI DSS: Protecting Payment Data ==&lt;br /&gt;
&lt;br /&gt;
PCI DSS applies to organisations that process, store, or transmit payment card information.&lt;br /&gt;
&lt;br /&gt;
Common requirements include network segmentation, encryption, vulnerability management, access control, monitoring, logging, auditing, and incident response.&lt;br /&gt;
&lt;br /&gt;
== Security as a Competitive Advantage ==&lt;br /&gt;
&lt;br /&gt;
Security is frequently viewed as a cost centre. Increasingly, it is also a competitive differentiator.&lt;br /&gt;
&lt;br /&gt;
Demonstrating a mature approach to security can help organisations:&lt;br /&gt;
&lt;br /&gt;
* Win new business opportunities.&lt;br /&gt;
* Satisfy customer requirements.&lt;br /&gt;
* Strengthen supplier relationships.&lt;br /&gt;
* Reduce procurement friction.&lt;br /&gt;
* Improve stakeholder confidence.&lt;br /&gt;
&lt;br /&gt;
== How These Frameworks Work Together ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Framework&lt;br /&gt;
! Primary Focus&lt;br /&gt;
|-&lt;br /&gt;
| Secure by Design&lt;br /&gt;
| Building secure systems from the outset&lt;br /&gt;
|-&lt;br /&gt;
| Zero Trust&lt;br /&gt;
| Security architecture and access verification&lt;br /&gt;
|-&lt;br /&gt;
| Cyber Essentials&lt;br /&gt;
| Baseline technical controls&lt;br /&gt;
|-&lt;br /&gt;
| GDPR&lt;br /&gt;
| Privacy and personal data protection&lt;br /&gt;
|-&lt;br /&gt;
| ISO 27001&lt;br /&gt;
| Governance and risk management&lt;br /&gt;
|-&lt;br /&gt;
| PCI DSS&lt;br /&gt;
| Protection of payment card data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Treating Compliance as Security ===&lt;br /&gt;
Passing an audit does not guarantee security.&lt;br /&gt;
&lt;br /&gt;
=== Buying Products Instead of Solving Problems ===&lt;br /&gt;
Products should support a strategy, not become the strategy.&lt;br /&gt;
&lt;br /&gt;
=== Viewing Security as a Cost Rather Than an Investment ===&lt;br /&gt;
Security should be evaluated through both risk reduction and business enablement.&lt;br /&gt;
&lt;br /&gt;
=== Ignoring Human Factors ===&lt;br /&gt;
Training, awareness, communication, and culture remain critical.&lt;br /&gt;
&lt;br /&gt;
== Design and Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
* Assume credentials may be compromised.&lt;br /&gt;
* Implement least privilege.&lt;br /&gt;
* Encrypt data at rest and in transit.&lt;br /&gt;
* Separate duties.&lt;br /&gt;
* Log important events.&lt;br /&gt;
* Monitor continuously.&lt;br /&gt;
* Automate detection where practical.&lt;br /&gt;
* Design for recovery as well as prevention.&lt;br /&gt;
* Treat compliance requirements as design requirements.&lt;br /&gt;
&lt;br /&gt;
== A Practical Security Model ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
People&lt;br /&gt;
 ↓&lt;br /&gt;
Identity&lt;br /&gt;
 ↓&lt;br /&gt;
Devices&lt;br /&gt;
 ↓&lt;br /&gt;
Applications&lt;br /&gt;
 ↓&lt;br /&gt;
Data&lt;br /&gt;
 ↓&lt;br /&gt;
Governance&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Security requires alignment between people, processes, technology, and organisational objectives.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
The ultimate goal of security is not compliance, certification, or technology deployment.&lt;br /&gt;
&lt;br /&gt;
The goal is trust.&lt;br /&gt;
&lt;br /&gt;
Trust that systems will operate reliably.&lt;br /&gt;
Trust that information will remain protected.&lt;br /&gt;
Trust that customers, employees, and partners can interact safely.&lt;br /&gt;
Trust that the organisation can continue operating when incidents occur.&lt;br /&gt;
&lt;br /&gt;
Secure by Design, Zero Trust, Cyber Essentials, GDPR, ISO 27001, and PCI DSS work together to create resilient, secure, auditable, and trustworthy organisations.&lt;br /&gt;
&lt;br /&gt;
Security is not merely a technical function. It is a business capability that protects value, supports growth, enables innovation, and strengthens stakeholder confidence.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Defence in Depth]]&lt;br /&gt;
* [[Least Privilege]]&lt;br /&gt;
* [[Identity and Access Management]]&lt;br /&gt;
* [[Multi-Factor Authentication]]&lt;br /&gt;
* [[Risk Management]]&lt;br /&gt;
* [[Information Security Management Systems]]&lt;br /&gt;
* [[Security Operations]]&lt;br /&gt;
* [[Cloud Security Architecture]]&lt;br /&gt;
* [[Data Classification]]&lt;br /&gt;
* [[Business Continuity]]&lt;br /&gt;
* [[Disaster Recovery]]&lt;br /&gt;
* [[Cyber Essentials]]&lt;br /&gt;
* [[ISO 27001]]&lt;br /&gt;
* [[PCI DSS]]&lt;br /&gt;
* [[GDPR]]&lt;br /&gt;
* [[Zero Trust Architecture]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Cloud_Security_Architecture&amp;diff=432</id>
		<title>Cloud Security Architecture</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Cloud_Security_Architecture&amp;diff=432"/>
		<updated>2026-07-06T07:01:18Z</updated>

		<summary type="html">&lt;p&gt;Dex: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Cloud Security Architecture is the design and implementation of security controls, processes, technologies, and governance practices that protect cloud-hosted systems, applications, and data. It provides a structured approach to managing risks while maintaining the agility, scalability, and operational benefits offered by modern cloud platforms.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Organisations increasingly rely on cloud services to host critical applications, store sensitive information, and support remote workforces.&lt;br /&gt;
&lt;br /&gt;
Traditional perimeter-based security models were developed for environments where servers, applications, and users existed within a controlled network boundary. Cloud computing fundamentally changes this assumption.&lt;br /&gt;
&lt;br /&gt;
In cloud environments:&lt;br /&gt;
&lt;br /&gt;
* Infrastructure may be owned by a third party&lt;br /&gt;
* Users access services from anywhere&lt;br /&gt;
* Applications may span multiple regions&lt;br /&gt;
* Services are frequently deployed and updated automatically&lt;br /&gt;
* Resources are often temporary and highly dynamic&lt;br /&gt;
&lt;br /&gt;
As a result, security architectures must evolve from protecting fixed infrastructure to protecting identities, data, workloads, and business processes.&lt;br /&gt;
&lt;br /&gt;
== What Is Cloud Security Architecture? ==&lt;br /&gt;
&lt;br /&gt;
Cloud Security Architecture is the collection of:&lt;br /&gt;
&lt;br /&gt;
* Security principles&lt;br /&gt;
* Security controls&lt;br /&gt;
* Governance policies&lt;br /&gt;
* Technical standards&lt;br /&gt;
* Monitoring capabilities&lt;br /&gt;
* Operational procedures&lt;br /&gt;
&lt;br /&gt;
that work together to protect cloud resources.&lt;br /&gt;
&lt;br /&gt;
A successful architecture balances:&lt;br /&gt;
&lt;br /&gt;
* Security&lt;br /&gt;
* Compliance&lt;br /&gt;
* Availability&lt;br /&gt;
* Performance&lt;br /&gt;
* Cost&lt;br /&gt;
* Operational simplicity&lt;br /&gt;
&lt;br /&gt;
The objective is not merely to prevent attacks but to detect, contain, and recover from incidents efficiently.&lt;br /&gt;
&lt;br /&gt;
== Core Security Principles ==&lt;br /&gt;
&lt;br /&gt;
=== Shared Responsibility Model ===&lt;br /&gt;
&lt;br /&gt;
Cloud security is a shared responsibility between the cloud provider and the customer.&lt;br /&gt;
&lt;br /&gt;
A simplified view:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Cloud Provider&lt;br /&gt;
! Customer&lt;br /&gt;
|-&lt;br /&gt;
| Physical datacentres&lt;br /&gt;
| Identity management&lt;br /&gt;
|-&lt;br /&gt;
| Hardware&lt;br /&gt;
| Data protection&lt;br /&gt;
|-&lt;br /&gt;
| Hypervisors&lt;br /&gt;
| Application security&lt;br /&gt;
|-&lt;br /&gt;
| Core platform services&lt;br /&gt;
| Configuration management&lt;br /&gt;
|-&lt;br /&gt;
| Physical security&lt;br /&gt;
| Access control&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Understanding where provider responsibilities end and customer responsibilities begin is essential.&lt;br /&gt;
&lt;br /&gt;
Many cloud breaches occur because organisations assume the provider secures everything.&lt;br /&gt;
&lt;br /&gt;
=== Defence in Depth ===&lt;br /&gt;
&lt;br /&gt;
No single control should be considered sufficient.&lt;br /&gt;
&lt;br /&gt;
Security should exist across multiple layers:&lt;br /&gt;
&lt;br /&gt;
* Physical&lt;br /&gt;
* Network&lt;br /&gt;
* Identity&lt;br /&gt;
* Application&lt;br /&gt;
* Data&lt;br /&gt;
* Monitoring&lt;br /&gt;
&lt;br /&gt;
If one layer fails, other controls continue providing protection.&lt;br /&gt;
&lt;br /&gt;
=== Zero Trust ===&lt;br /&gt;
&lt;br /&gt;
Zero Trust assumes:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Never trust, always verify.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Every request should be authenticated and authorised regardless of location.&lt;br /&gt;
&lt;br /&gt;
A user connecting from the corporate office should receive the same scrutiny as a user connecting from a remote network.&lt;br /&gt;
&lt;br /&gt;
=== Least Privilege ===&lt;br /&gt;
&lt;br /&gt;
Users, applications, and services should have only the permissions required to perform their tasks.&lt;br /&gt;
&lt;br /&gt;
Excessive permissions significantly increase risk during compromise.&lt;br /&gt;
&lt;br /&gt;
== Cloud Security Domains ==&lt;br /&gt;
&lt;br /&gt;
=== Identity and Access Management ===&lt;br /&gt;
&lt;br /&gt;
Identity is the new perimeter.&lt;br /&gt;
&lt;br /&gt;
Strong IAM controls include:&lt;br /&gt;
&lt;br /&gt;
* Multi-factor authentication&lt;br /&gt;
* Single Sign-On&lt;br /&gt;
* Conditional access policies&lt;br /&gt;
* Privileged access management&lt;br /&gt;
* Service account governance&lt;br /&gt;
* Automated provisioning and deprovisioning&lt;br /&gt;
&lt;br /&gt;
Compromised credentials remain one of the most common attack vectors.&lt;br /&gt;
&lt;br /&gt;
=== Network Security ===&lt;br /&gt;
&lt;br /&gt;
While identity becomes increasingly important, network-based controls remain valuable.&lt;br /&gt;
&lt;br /&gt;
Typical controls include:&lt;br /&gt;
&lt;br /&gt;
* Network segmentation&lt;br /&gt;
* Virtual networks&lt;br /&gt;
* Security groups&lt;br /&gt;
* Firewalls&lt;br /&gt;
* Web Application Firewalls&lt;br /&gt;
* DDoS protection&lt;br /&gt;
* Private endpoints&lt;br /&gt;
&lt;br /&gt;
Network controls help limit lateral movement following compromise.&lt;br /&gt;
&lt;br /&gt;
=== Data Protection ===&lt;br /&gt;
&lt;br /&gt;
Data is often the primary target of attackers.&lt;br /&gt;
&lt;br /&gt;
Protection measures include:&lt;br /&gt;
&lt;br /&gt;
* Encryption at rest&lt;br /&gt;
* Encryption in transit&lt;br /&gt;
* Key management systems&lt;br /&gt;
* Data classification&lt;br /&gt;
* Backup and retention policies&lt;br /&gt;
* Data loss prevention controls&lt;br /&gt;
&lt;br /&gt;
Sensitive data should be protected throughout its entire lifecycle.&lt;br /&gt;
&lt;br /&gt;
=== Workload Security ===&lt;br /&gt;
&lt;br /&gt;
Applications, containers, virtual machines, and serverless functions all require protection.&lt;br /&gt;
&lt;br /&gt;
Key considerations include:&lt;br /&gt;
&lt;br /&gt;
* Vulnerability management&lt;br /&gt;
* Secure configuration baselines&lt;br /&gt;
* Patch management&lt;br /&gt;
* Runtime protection&lt;br /&gt;
* Container image scanning&lt;br /&gt;
* Secure software development practices&lt;br /&gt;
&lt;br /&gt;
=== Monitoring and Detection ===&lt;br /&gt;
&lt;br /&gt;
Visibility is essential.&lt;br /&gt;
&lt;br /&gt;
Effective monitoring includes:&lt;br /&gt;
&lt;br /&gt;
* Centralised logging&lt;br /&gt;
* Security Information and Event Management (SIEM)&lt;br /&gt;
* Threat intelligence&lt;br /&gt;
* Behaviour analytics&lt;br /&gt;
* Security alerts&lt;br /&gt;
* Incident response workflows&lt;br /&gt;
&lt;br /&gt;
You cannot protect systems you cannot observe.&lt;br /&gt;
&lt;br /&gt;
=== Governance and Compliance ===&lt;br /&gt;
&lt;br /&gt;
Governance provides consistency.&lt;br /&gt;
&lt;br /&gt;
This includes:&lt;br /&gt;
&lt;br /&gt;
* Security standards&lt;br /&gt;
* Policy management&lt;br /&gt;
* Risk assessments&lt;br /&gt;
* Audit controls&lt;br /&gt;
* Regulatory compliance&lt;br /&gt;
* Change management&lt;br /&gt;
&lt;br /&gt;
Governance ensures security scales alongside the organisation.&lt;br /&gt;
&lt;br /&gt;
== Reference Architecture ==&lt;br /&gt;
&lt;br /&gt;
A simplified cloud security architecture might resemble:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+--------------------------------+&lt;br /&gt;
|         End Users              |&lt;br /&gt;
+---------------+----------------+&lt;br /&gt;
                |&lt;br /&gt;
                v&lt;br /&gt;
+--------------------------------+&lt;br /&gt;
| Identity Provider / MFA        |&lt;br /&gt;
+---------------+----------------+&lt;br /&gt;
                |&lt;br /&gt;
                v&lt;br /&gt;
+--------------------------------+&lt;br /&gt;
| Application Gateway / WAF      |&lt;br /&gt;
+---------------+----------------+&lt;br /&gt;
                |&lt;br /&gt;
                v&lt;br /&gt;
+--------------------------------+&lt;br /&gt;
| Application Services           |&lt;br /&gt;
+---------------+----------------+&lt;br /&gt;
                |&lt;br /&gt;
     +----------+----------+&lt;br /&gt;
     |                     |&lt;br /&gt;
     v                     v&lt;br /&gt;
+---------+         +-------------+&lt;br /&gt;
| Logging |         | Databases   |&lt;br /&gt;
|  SIEM   |         | Encrypted   |&lt;br /&gt;
+---------+         +-------------+&lt;br /&gt;
     |&lt;br /&gt;
     v&lt;br /&gt;
+--------------------------------+&lt;br /&gt;
| Security Operations            |&lt;br /&gt;
+--------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer contributes to the overall security posture.&lt;br /&gt;
&lt;br /&gt;
== Security Layers in Practice ==&lt;br /&gt;
&lt;br /&gt;
Cloud security should be viewed as a collection of overlapping protections.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+------------------------------+&lt;br /&gt;
| Governance &amp;amp; Compliance      |&lt;br /&gt;
+------------------------------+&lt;br /&gt;
| Monitoring &amp;amp; Detection        |&lt;br /&gt;
+------------------------------+&lt;br /&gt;
| Data Protection              |&lt;br /&gt;
+------------------------------+&lt;br /&gt;
| Application Security         |&lt;br /&gt;
+------------------------------+&lt;br /&gt;
| Identity &amp;amp; Access Control    |&lt;br /&gt;
+------------------------------+&lt;br /&gt;
| Network Security             |&lt;br /&gt;
+------------------------------+&lt;br /&gt;
| Cloud Infrastructure         |&lt;br /&gt;
+------------------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Technology changes rapidly, but layered security remains a constant principle.&lt;br /&gt;
&lt;br /&gt;
== Common Threats ==&lt;br /&gt;
&lt;br /&gt;
Common cloud security threats include:&lt;br /&gt;
&lt;br /&gt;
* Credential theft&lt;br /&gt;
* Misconfigured storage&lt;br /&gt;
* Publicly exposed services&lt;br /&gt;
* Excessive permissions&lt;br /&gt;
* API abuse&lt;br /&gt;
* Supply-chain attacks&lt;br /&gt;
* Insider threats&lt;br /&gt;
* Ransomware&lt;br /&gt;
* Data exfiltration&lt;br /&gt;
&lt;br /&gt;
Most incidents involve a combination of technical weaknesses and process failures.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Scalability ===&lt;br /&gt;
&lt;br /&gt;
Security controls must scale automatically alongside cloud resources.&lt;br /&gt;
&lt;br /&gt;
=== Security by Design ===&lt;br /&gt;
&lt;br /&gt;
Security should be included during system design, not added later.&lt;br /&gt;
&lt;br /&gt;
=== Automation ===&lt;br /&gt;
&lt;br /&gt;
Manual security processes become unsustainable at scale.&lt;br /&gt;
&lt;br /&gt;
Automate:&lt;br /&gt;
&lt;br /&gt;
* Policy enforcement&lt;br /&gt;
* Compliance checks&lt;br /&gt;
* Vulnerability scanning&lt;br /&gt;
* Configuration validation&lt;br /&gt;
* Incident response workflows&lt;br /&gt;
&lt;br /&gt;
=== Resilience ===&lt;br /&gt;
&lt;br /&gt;
Assume compromise is possible.&lt;br /&gt;
&lt;br /&gt;
Architect systems to:&lt;br /&gt;
&lt;br /&gt;
* Detect rapidly&lt;br /&gt;
* Limit damage&lt;br /&gt;
* Recover efficiently&lt;br /&gt;
&lt;br /&gt;
=== Maintainability ===&lt;br /&gt;
&lt;br /&gt;
The most secure architecture is not always the best architecture if it cannot be maintained operationally.&lt;br /&gt;
&lt;br /&gt;
== Operational Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
&lt;br /&gt;
* Define requirements&lt;br /&gt;
* Design security controls&lt;br /&gt;
* Establish standards&lt;br /&gt;
&lt;br /&gt;
=== Deploy ===&lt;br /&gt;
&lt;br /&gt;
* Apply Infrastructure as Code&lt;br /&gt;
* Validate configurations&lt;br /&gt;
* Perform security testing&lt;br /&gt;
&lt;br /&gt;
=== Operate ===&lt;br /&gt;
&lt;br /&gt;
* Monitor continuously&lt;br /&gt;
* Respond to incidents&lt;br /&gt;
* Review permissions&lt;br /&gt;
&lt;br /&gt;
=== Improve ===&lt;br /&gt;
&lt;br /&gt;
* Audit regularly&lt;br /&gt;
* Review lessons learned&lt;br /&gt;
* Update standards&lt;br /&gt;
&lt;br /&gt;
=== Retire ===&lt;br /&gt;
&lt;br /&gt;
* Archive required data&lt;br /&gt;
* Remove access&lt;br /&gt;
* Destroy obsolete resources securely&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
* Treating cloud security as purely a network problem&lt;br /&gt;
* Granting excessive permissions&lt;br /&gt;
* Ignoring governance&lt;br /&gt;
* Failing to monitor logs&lt;br /&gt;
* Relying entirely on default configurations&lt;br /&gt;
* Neglecting backup validation&lt;br /&gt;
* Assuming compliance equals security&lt;br /&gt;
&lt;br /&gt;
These problems are frequently more dangerous than sophisticated attacks.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
When investigating potential security issues:&lt;br /&gt;
&lt;br /&gt;
=== Access Problems ===&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
* Identity provider logs&lt;br /&gt;
* Conditional access policies&lt;br /&gt;
* Role assignments&lt;br /&gt;
* MFA status&lt;br /&gt;
&lt;br /&gt;
=== Network Issues ===&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
* Firewall rules&lt;br /&gt;
* Security groups&lt;br /&gt;
* Routing tables&lt;br /&gt;
* DNS configuration&lt;br /&gt;
&lt;br /&gt;
=== Data Access Issues ===&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
* Encryption settings&lt;br /&gt;
* Key permissions&lt;br /&gt;
* Storage access policies&lt;br /&gt;
* Audit logs&lt;br /&gt;
&lt;br /&gt;
=== Suspicious Activity ===&lt;br /&gt;
&lt;br /&gt;
Review:&lt;br /&gt;
&lt;br /&gt;
* Authentication events&lt;br /&gt;
* Administrative actions&lt;br /&gt;
* Configuration changes&lt;br /&gt;
* Network flows&lt;br /&gt;
* SIEM alerts&lt;br /&gt;
&lt;br /&gt;
== Future Trends ==&lt;br /&gt;
&lt;br /&gt;
Cloud Security Architecture continues evolving towards:&lt;br /&gt;
&lt;br /&gt;
* Zero Trust architectures&lt;br /&gt;
* Passwordless authentication&lt;br /&gt;
* AI-assisted threat detection&lt;br /&gt;
* Continuous compliance validation&lt;br /&gt;
* Confidential computing&lt;br /&gt;
* Identity-centric security&lt;br /&gt;
* Secure multi-cloud governance&lt;br /&gt;
&lt;br /&gt;
The overall direction is clear: security is becoming increasingly automated, identity-driven, and integrated directly into platform operations.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Zero Trust Architecture]]&lt;br /&gt;
* [[Identity and Access Management]]&lt;br /&gt;
* [[Cloud Governance]]&lt;br /&gt;
* [[Infrastructure as Code]]&lt;br /&gt;
* [[Security Operations]]&lt;br /&gt;
* [[Network Security Architecture]]&lt;br /&gt;
* [[Data Protection Strategy]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* NIST Cybersecurity Framework&lt;br /&gt;
* NIST Zero Trust Architecture&lt;br /&gt;
* ISO 27001&lt;br /&gt;
* ISO 27017&lt;br /&gt;
* CIS Controls&lt;br /&gt;
* Microsoft Cloud Adoption Framework&lt;br /&gt;
* AWS Well-Architected Framework&lt;br /&gt;
* Cloud Security Alliance Guidance&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Business_Continuity_%26_Disaster_Recovery&amp;diff=431</id>
		<title>Business Continuity &amp; Disaster Recovery</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Business_Continuity_%26_Disaster_Recovery&amp;diff=431"/>
		<updated>2026-07-06T06:57:25Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039;  Business Continuity (BC) and Disaster Recovery (DR) are often discussed together, but they solve different problems.  Business Continuity focuses on keeping critical business functions operating during disruption, while Disaster Recovery focuses on restoring systems, applications, and data after a failure has occurred.  A successful organisation does not eliminate risk. Instead, it understands its risks, prepares for likely failure scenarios, and develops...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Business Continuity (BC) and Disaster Recovery (DR) are often discussed together, but they solve different problems.&lt;br /&gt;
&lt;br /&gt;
Business Continuity focuses on keeping critical business functions operating during disruption, while Disaster Recovery focuses on restoring systems, applications, and data after a failure has occurred.&lt;br /&gt;
&lt;br /&gt;
A successful organisation does not eliminate risk. Instead, it understands its risks, prepares for likely failure scenarios, and develops practical procedures that allow the business to continue operating when incidents occur.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Every organisation experiences disruption.&lt;br /&gt;
&lt;br /&gt;
The cause may be technical, environmental, operational, or human:&lt;br /&gt;
&lt;br /&gt;
* Hardware failure&lt;br /&gt;
* Software defects&lt;br /&gt;
* Cyber attacks&lt;br /&gt;
* Power outages&lt;br /&gt;
* Internet connectivity failures&lt;br /&gt;
* Flooding&lt;br /&gt;
* Fire&lt;br /&gt;
* Human error&lt;br /&gt;
* Supplier failure&lt;br /&gt;
&lt;br /&gt;
The question is not whether disruption will occur, but whether the organisation can continue operating when it does.&lt;br /&gt;
&lt;br /&gt;
Business Continuity and Disaster Recovery provide the framework for answering that question.&lt;br /&gt;
&lt;br /&gt;
=== Common Misconceptions ===&lt;br /&gt;
&lt;br /&gt;
* Backups are not a Disaster Recovery strategy.&lt;br /&gt;
* Disaster Recovery is not Business Continuity.&lt;br /&gt;
* Cloud services do not automatically eliminate business continuity risks.&lt;br /&gt;
* Redundancy does not replace planning.&lt;br /&gt;
* Technology alone cannot solve continuity challenges.&lt;br /&gt;
&lt;br /&gt;
=== Why It Matters ===&lt;br /&gt;
&lt;br /&gt;
The impact of service disruption extends far beyond IT systems.&lt;br /&gt;
&lt;br /&gt;
Potential consequences include:&lt;br /&gt;
&lt;br /&gt;
* Lost revenue&lt;br /&gt;
* Decreased productivity&lt;br /&gt;
* Regulatory consequences&lt;br /&gt;
* Reputational damage&lt;br /&gt;
* Loss of customer confidence&lt;br /&gt;
* Contractual penalties&lt;br /&gt;
&lt;br /&gt;
The longer an outage continues, the more expensive it becomes.&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Business Continuity ===&lt;br /&gt;
&lt;br /&gt;
Business Continuity focuses on maintaining business operations during disruption.&lt;br /&gt;
&lt;br /&gt;
Typical questions include:&lt;br /&gt;
&lt;br /&gt;
* Can staff continue working?&lt;br /&gt;
* Can customers still receive services?&lt;br /&gt;
* Can orders still be processed?&lt;br /&gt;
* Can communication continue?&lt;br /&gt;
&lt;br /&gt;
Business Continuity planning often involves:&lt;br /&gt;
&lt;br /&gt;
* Alternative work locations&lt;br /&gt;
* Manual fallback procedures&lt;br /&gt;
* Communication plans&lt;br /&gt;
* Alternative suppliers&lt;br /&gt;
* Emergency operating procedures&lt;br /&gt;
&lt;br /&gt;
The objective is to ensure the business remains functional.&lt;br /&gt;
&lt;br /&gt;
=== Disaster Recovery ===&lt;br /&gt;
&lt;br /&gt;
Disaster Recovery focuses on restoring technology services.&lt;br /&gt;
&lt;br /&gt;
Typical questions include:&lt;br /&gt;
&lt;br /&gt;
* How quickly can systems be restored?&lt;br /&gt;
* How much data loss is acceptable?&lt;br /&gt;
* Which systems must be recovered first?&lt;br /&gt;
* What dependencies exist?&lt;br /&gt;
&lt;br /&gt;
Disaster Recovery planning commonly includes:&lt;br /&gt;
&lt;br /&gt;
* Backup strategies&lt;br /&gt;
* Replication technologies&lt;br /&gt;
* Recovery procedures&lt;br /&gt;
* Recovery testing&lt;br /&gt;
* Infrastructure replacement plans&lt;br /&gt;
&lt;br /&gt;
The objective is to restore technical services within acceptable timescales.&lt;br /&gt;
&lt;br /&gt;
=== Recovery Time Objective (RTO) ===&lt;br /&gt;
&lt;br /&gt;
RTO defines the maximum acceptable duration of service outage.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
* Email system: 8 hours&lt;br /&gt;
* Customer portal: 1 hour&lt;br /&gt;
* Public website: 24 hours&lt;br /&gt;
&lt;br /&gt;
The lower the RTO, the greater the complexity and cost of the solution.&lt;br /&gt;
&lt;br /&gt;
=== Recovery Point Objective (RPO) ===&lt;br /&gt;
&lt;br /&gt;
RPO defines the maximum acceptable amount of data loss.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* 24-hour RPO = potentially lose one day&#039;s data&lt;br /&gt;
* 1-hour RPO = potentially lose one hour&#039;s data&lt;br /&gt;
* Near-zero RPO = continuous replication&lt;br /&gt;
&lt;br /&gt;
Like RTO, lower RPOs generally increase implementation costs.&lt;br /&gt;
&lt;br /&gt;
== Reference Architectures ==&lt;br /&gt;
&lt;br /&gt;
=== Small Organisation ===&lt;br /&gt;
&lt;br /&gt;
A typical small business recovery model might consist of:&lt;br /&gt;
&lt;br /&gt;
* On-premises servers&lt;br /&gt;
* Local backups&lt;br /&gt;
* Cloud backup repository&lt;br /&gt;
* Basic recovery documentation&lt;br /&gt;
&lt;br /&gt;
Benefits:&lt;br /&gt;
&lt;br /&gt;
* Low cost&lt;br /&gt;
* Simple management&lt;br /&gt;
&lt;br /&gt;
Limitations:&lt;br /&gt;
&lt;br /&gt;
* Longer recovery times&lt;br /&gt;
* Greater operational dependency on individuals&lt;br /&gt;
&lt;br /&gt;
=== Enterprise Organisation ===&lt;br /&gt;
&lt;br /&gt;
Enterprise environments typically introduce:&lt;br /&gt;
&lt;br /&gt;
* Geographic redundancy&lt;br /&gt;
* Multiple data centres&lt;br /&gt;
* Clustered infrastructure&lt;br /&gt;
* Replicated storage&lt;br /&gt;
* Automated failover systems&lt;br /&gt;
&lt;br /&gt;
Benefits:&lt;br /&gt;
&lt;br /&gt;
* Reduced downtime&lt;br /&gt;
* Greater resilience&lt;br /&gt;
&lt;br /&gt;
Limitations:&lt;br /&gt;
&lt;br /&gt;
* Increased complexity&lt;br /&gt;
* Higher implementation and operational costs&lt;br /&gt;
&lt;br /&gt;
=== Hybrid Approach ===&lt;br /&gt;
&lt;br /&gt;
Many organisations operate between these extremes.&lt;br /&gt;
&lt;br /&gt;
Common examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft 365 with on-premises line-of-business applications&lt;br /&gt;
* Cloud-hosted infrastructure with local file services&lt;br /&gt;
* Hybrid Active Directory deployments&lt;br /&gt;
&lt;br /&gt;
Hybrid models often provide an effective balance between cost, flexibility, and resilience.&lt;br /&gt;
&lt;br /&gt;
== Operational Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
=== Build ===&lt;br /&gt;
&lt;br /&gt;
During the design phase:&lt;br /&gt;
&lt;br /&gt;
* Identify critical services&lt;br /&gt;
* Determine dependencies&lt;br /&gt;
* Define RTO and RPO requirements&lt;br /&gt;
* Assess risk exposure&lt;br /&gt;
&lt;br /&gt;
=== Run ===&lt;br /&gt;
&lt;br /&gt;
During normal operations:&lt;br /&gt;
&lt;br /&gt;
* Monitor systems&lt;br /&gt;
* Verify backups&lt;br /&gt;
* Review changes&lt;br /&gt;
* Maintain documentation&lt;br /&gt;
&lt;br /&gt;
=== Maintain ===&lt;br /&gt;
&lt;br /&gt;
Continuity plans must evolve alongside the environment.&lt;br /&gt;
&lt;br /&gt;
Review should occur when:&lt;br /&gt;
&lt;br /&gt;
* New systems are introduced&lt;br /&gt;
* Infrastructure changes significantly&lt;br /&gt;
* Business processes change&lt;br /&gt;
* Suppliers change&lt;br /&gt;
&lt;br /&gt;
=== Retire ===&lt;br /&gt;
&lt;br /&gt;
Decommissioning systems should include:&lt;br /&gt;
&lt;br /&gt;
* Data archival requirements&lt;br /&gt;
* Regulatory retention obligations&lt;br /&gt;
* Recovery plan updates&lt;br /&gt;
* Documentation updates&lt;br /&gt;
&lt;br /&gt;
== Practical Application ==&lt;br /&gt;
&lt;br /&gt;
=== Identifying Critical Services ===&lt;br /&gt;
&lt;br /&gt;
Not all systems are equal.&lt;br /&gt;
&lt;br /&gt;
A common mistake is assuming every service is mission critical.&lt;br /&gt;
&lt;br /&gt;
Instead, classify systems according to business impact.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! System&lt;br /&gt;
! Priority&lt;br /&gt;
! Business Impact&lt;br /&gt;
|-&lt;br /&gt;
| ERP System&lt;br /&gt;
| Critical&lt;br /&gt;
| Financial operation stops&lt;br /&gt;
|-&lt;br /&gt;
| Email&lt;br /&gt;
| High&lt;br /&gt;
| Significant disruption&lt;br /&gt;
|-&lt;br /&gt;
| Intranet&lt;br /&gt;
| Medium&lt;br /&gt;
| Operational inconvenience&lt;br /&gt;
|-&lt;br /&gt;
| Archive Server&lt;br /&gt;
| Low&lt;br /&gt;
| Minimal immediate impact&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Recovery efforts should prioritise critical systems first.&lt;br /&gt;
&lt;br /&gt;
=== Mapping Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Many recovery failures occur because dependencies were not identified.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
Customer Portal&lt;br /&gt;
    |&lt;br /&gt;
    +-- SQL Database&lt;br /&gt;
    |&lt;br /&gt;
    +-- Active Directory&lt;br /&gt;
    |&lt;br /&gt;
    +-- DNS&lt;br /&gt;
    |&lt;br /&gt;
    +-- Internet Connectivity&lt;br /&gt;
    |&lt;br /&gt;
    +-- SSL Certificates&lt;br /&gt;
&lt;br /&gt;
Recovering the portal without restoring its dependencies achieves nothing.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Backups Are Never Tested ===&lt;br /&gt;
&lt;br /&gt;
A backup is merely a theory until restoration has been successfully demonstrated.&lt;br /&gt;
&lt;br /&gt;
Regular restore testing should be mandatory.&lt;br /&gt;
&lt;br /&gt;
=== Documentation Exists Only in Production ===&lt;br /&gt;
&lt;br /&gt;
Recovery procedures stored on failed systems are of little value.&lt;br /&gt;
&lt;br /&gt;
Critical documentation should exist in multiple accessible locations.&lt;br /&gt;
&lt;br /&gt;
=== Key Knowledge Resides with One Person ===&lt;br /&gt;
&lt;br /&gt;
Many organisations possess undocumented systems understood by only one administrator.&lt;br /&gt;
&lt;br /&gt;
This represents a significant business risk.&lt;br /&gt;
&lt;br /&gt;
=== Recovery Plans Are Never Practised ===&lt;br /&gt;
&lt;br /&gt;
The first execution of a DR plan should never occur during a real disaster.&lt;br /&gt;
&lt;br /&gt;
Testing frequently exposes assumptions, dependencies, and documentation gaps.&lt;br /&gt;
&lt;br /&gt;
== Security Implications ==&lt;br /&gt;
&lt;br /&gt;
Business Continuity and Cyber Security are closely related.&lt;br /&gt;
&lt;br /&gt;
Attackers increasingly target:&lt;br /&gt;
&lt;br /&gt;
* Backup systems&lt;br /&gt;
* Replication systems&lt;br /&gt;
* Identity services&lt;br /&gt;
* Recovery infrastructure&lt;br /&gt;
&lt;br /&gt;
Key recommendations include:&lt;br /&gt;
&lt;br /&gt;
* Immutable backups&lt;br /&gt;
* Offline backup copies&lt;br /&gt;
* Multi-factor authentication&lt;br /&gt;
* Privileged access controls&lt;br /&gt;
* Separate recovery credentials&lt;br /&gt;
&lt;br /&gt;
Recovery systems should be considered critical security assets.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
When assessing resilience, ask:&lt;br /&gt;
&lt;br /&gt;
=== Backup Health ===&lt;br /&gt;
&lt;br /&gt;
* Are backups completing successfully?&lt;br /&gt;
* Are failures monitored?&lt;br /&gt;
* Are restore tests performed?&lt;br /&gt;
&lt;br /&gt;
=== Infrastructure Resilience ===&lt;br /&gt;
&lt;br /&gt;
* Are there single points of failure?&lt;br /&gt;
* Is failover tested?&lt;br /&gt;
* Is monitoring effective?&lt;br /&gt;
&lt;br /&gt;
=== Operational Readiness ===&lt;br /&gt;
&lt;br /&gt;
* Is documentation current?&lt;br /&gt;
* Are responsibilities assigned?&lt;br /&gt;
* Are contact lists accurate?&lt;br /&gt;
&lt;br /&gt;
=== Recovery Capability ===&lt;br /&gt;
&lt;br /&gt;
* Has recovery been rehearsed?&lt;br /&gt;
* Are recovery times measured?&lt;br /&gt;
* Can critical services actually meet RTO targets?&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Scalability ===&lt;br /&gt;
&lt;br /&gt;
Recovery solutions should grow alongside the business.&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
Protect recovery infrastructure as carefully as production systems.&lt;br /&gt;
&lt;br /&gt;
=== Maintainability ===&lt;br /&gt;
&lt;br /&gt;
Complex recovery solutions often fail because they become difficult to support.&lt;br /&gt;
&lt;br /&gt;
Prefer solutions that operations teams understand and can maintain confidently.&lt;br /&gt;
&lt;br /&gt;
=== Backwards Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Legacy systems frequently outlive expectations.&lt;br /&gt;
&lt;br /&gt;
Recovery planning should account for unsupported applications and historical dependencies.&lt;br /&gt;
&lt;br /&gt;
== Lessons from the Real World ==&lt;br /&gt;
&lt;br /&gt;
Most major outages are not caused by dramatic disasters.&lt;br /&gt;
&lt;br /&gt;
They are usually caused by ordinary events:&lt;br /&gt;
&lt;br /&gt;
* Failed storage&lt;br /&gt;
* Expired certificates&lt;br /&gt;
* Configuration mistakes&lt;br /&gt;
* Software updates&lt;br /&gt;
* Human error&lt;br /&gt;
* Supplier outages&lt;br /&gt;
&lt;br /&gt;
The most resilient organisations are not those that never fail.&lt;br /&gt;
&lt;br /&gt;
They are the organisations that expect failure, prepare for it, and recover methodically.&lt;br /&gt;
&lt;br /&gt;
A continuity plan should never aim to create the illusion that disruption is impossible.&lt;br /&gt;
&lt;br /&gt;
Its purpose is to ensure that disruption becomes manageable.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Risk Management]]&lt;br /&gt;
* [[High Availability]]&lt;br /&gt;
* [[Backup Strategies]]&lt;br /&gt;
* [[Infrastructure Architecture]]&lt;br /&gt;
* [[Capacity Planning]]&lt;br /&gt;
* [[Cyber Security Fundamentals]]&lt;br /&gt;
* [[Cloud Migration Strategy]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* ISO 22301 Business Continuity Management&lt;br /&gt;
* ISO 27001 Information Security Management&lt;br /&gt;
* NIST Cybersecurity Framework&lt;br /&gt;
* NIST SP 800-34 Contingency Planning Guide&lt;br /&gt;
* Vendor backup and recovery documentation&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Data_Classification_and_Handling&amp;diff=430</id>
		<title>Data Classification and Handling</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Data_Classification_and_Handling&amp;diff=430"/>
		<updated>2026-07-06T06:56:50Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Data classification and handling provides a structured approach for identifying the sensitivity, value, and criticality of information, and applying appropriate controls throughout its lifecycle. Effective classification helps organisations protect information assets, comply with regulatory obligations, reduce risk, and ensure that data is used, transmitted, stored, and disposed of appropriately.  == Context ==  Every organisation generates, stores, and pr...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Data classification and handling provides a structured approach for identifying the sensitivity, value, and criticality of information, and applying appropriate controls throughout its lifecycle. Effective classification helps organisations protect information assets, comply with regulatory obligations, reduce risk, and ensure that data is used, transmitted, stored, and disposed of appropriately.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Every organisation generates, stores, and processes information. Some of that information is intended for public consumption, while other information may be commercially sensitive, legally protected, or critical to operational success.&lt;br /&gt;
&lt;br /&gt;
Without a formal classification scheme, employees are left to make subjective decisions about how information should be protected, increasing the risk of accidental disclosure, regulatory breaches, and operational disruption.&lt;br /&gt;
&lt;br /&gt;
Data classification provides consistency. It establishes a common understanding of the sensitivity of information and defines the controls required to protect it.&lt;br /&gt;
&lt;br /&gt;
=== Common Drivers ===&lt;br /&gt;
&lt;br /&gt;
* Information security&lt;br /&gt;
* Privacy protection&lt;br /&gt;
* Regulatory compliance&lt;br /&gt;
* Contractual obligations&lt;br /&gt;
* Business continuity&lt;br /&gt;
* Intellectual property protection&lt;br /&gt;
* Risk management&lt;br /&gt;
&lt;br /&gt;
=== Common Misconceptions ===&lt;br /&gt;
&lt;br /&gt;
* Classification is not simply applying a label.&lt;br /&gt;
* Classification is not exclusively an IT responsibility.&lt;br /&gt;
* Classification does not automatically provide protection.&lt;br /&gt;
* Classification schemes are ineffective without handling procedures.&lt;br /&gt;
&lt;br /&gt;
== Why Data Classification Matters ==&lt;br /&gt;
&lt;br /&gt;
Data classification is the foundation of information governance.&lt;br /&gt;
&lt;br /&gt;
An organisation cannot effectively protect information if it does not understand the sensitivity and value of the information it possesses.&lt;br /&gt;
&lt;br /&gt;
Classification enables organisations to:&lt;br /&gt;
&lt;br /&gt;
* Apply proportionate security controls&lt;br /&gt;
* Define access requirements&lt;br /&gt;
* Determine encryption requirements&lt;br /&gt;
* Establish retention periods&lt;br /&gt;
* Support regulatory compliance&lt;br /&gt;
* Prioritise monitoring and auditing activities&lt;br /&gt;
* Reduce the impact of security incidents&lt;br /&gt;
&lt;br /&gt;
=== Risk Reduction ===&lt;br /&gt;
&lt;br /&gt;
Not all information carries the same level of risk.&lt;br /&gt;
&lt;br /&gt;
The accidental publication of a company newsletter may have little consequence. The accidental disclosure of customer records, financial information, or intellectual property could result in significant financial, legal, or reputational damage.&lt;br /&gt;
&lt;br /&gt;
Classification allows protective controls to be aligned with actual risk.&lt;br /&gt;
&lt;br /&gt;
=== Regulatory Requirements ===&lt;br /&gt;
&lt;br /&gt;
Many regulations and standards require organisations to identify and appropriately protect sensitive information.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* General Data Protection Regulation (GDPR)&lt;br /&gt;
* ISO 27001&lt;br /&gt;
* PCI-DSS&lt;br /&gt;
* NHS Data Security Standards&lt;br /&gt;
* Government security frameworks&lt;br /&gt;
&lt;br /&gt;
Classification helps demonstrate that information is being managed in accordance with legal and contractual obligations.&lt;br /&gt;
&lt;br /&gt;
=== Operational Consistency ===&lt;br /&gt;
&lt;br /&gt;
A clear classification scheme ensures that employees, contractors, and third parties handle information consistently across the organisation.&lt;br /&gt;
&lt;br /&gt;
This reduces ambiguity and improves decision-making.&lt;br /&gt;
&lt;br /&gt;
== Classification Levels ==&lt;br /&gt;
&lt;br /&gt;
There is no universal classification model. Organisations should adopt a model appropriate to their operational requirements and risk profile.&lt;br /&gt;
&lt;br /&gt;
A common commercial model is shown below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Public&lt;br /&gt;
│&lt;br /&gt;
├── Internal&lt;br /&gt;
│&lt;br /&gt;
├── Confidential&lt;br /&gt;
│&lt;br /&gt;
└── Restricted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Public ===&lt;br /&gt;
&lt;br /&gt;
Information intended for unrestricted distribution.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Marketing materials&lt;br /&gt;
* Published product information&lt;br /&gt;
* Press releases&lt;br /&gt;
* Public website content&lt;br /&gt;
&lt;br /&gt;
Disclosure presents little or no risk to the organisation.&lt;br /&gt;
&lt;br /&gt;
=== Internal ===&lt;br /&gt;
&lt;br /&gt;
Information intended for use within the organisation.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Internal procedures&lt;br /&gt;
* Staff directories&lt;br /&gt;
* Meeting notes&lt;br /&gt;
* Standard operating documentation&lt;br /&gt;
&lt;br /&gt;
Unauthorised disclosure may cause inconvenience but is unlikely to result in significant harm.&lt;br /&gt;
&lt;br /&gt;
=== Confidential ===&lt;br /&gt;
&lt;br /&gt;
Information that could harm the organisation, its customers, or its partners if disclosed.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Customer information&lt;br /&gt;
* Financial records&lt;br /&gt;
* Commercial contracts&lt;br /&gt;
* Project documentation&lt;br /&gt;
* Security documentation&lt;br /&gt;
&lt;br /&gt;
Confidential information typically requires controlled access and protected transmission methods.&lt;br /&gt;
&lt;br /&gt;
=== Restricted ===&lt;br /&gt;
&lt;br /&gt;
Highly sensitive information requiring the highest level of protection.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Cryptographic material&lt;br /&gt;
* Merger and acquisition information&lt;br /&gt;
* Security incident investigations&lt;br /&gt;
* Authentication systems&lt;br /&gt;
* Strategic business plans&lt;br /&gt;
&lt;br /&gt;
Disclosure could cause severe financial, operational, legal, or reputational damage.&lt;br /&gt;
&lt;br /&gt;
== Data Handling Requirements ==&lt;br /&gt;
&lt;br /&gt;
Classification only becomes meaningful when it drives handling requirements.&lt;br /&gt;
&lt;br /&gt;
Every classification level should define how information is:&lt;br /&gt;
&lt;br /&gt;
* Stored&lt;br /&gt;
* Accessed&lt;br /&gt;
* Transmitted&lt;br /&gt;
* Retained&lt;br /&gt;
* Disposed of&lt;br /&gt;
&lt;br /&gt;
=== The Four States of Information ===&lt;br /&gt;
&lt;br /&gt;
Information exists in multiple states throughout its lifecycle.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Data at Rest&lt;br /&gt;
      ↓&lt;br /&gt;
Data in Use&lt;br /&gt;
      ↓&lt;br /&gt;
Data in Transit&lt;br /&gt;
      ↓&lt;br /&gt;
Data in Disposal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Protective controls should be considered for every state.&lt;br /&gt;
&lt;br /&gt;
=== Data at Rest ===&lt;br /&gt;
&lt;br /&gt;
Data at rest refers to information stored on systems or media.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* File servers&lt;br /&gt;
* Databases&lt;br /&gt;
* SharePoint&lt;br /&gt;
* OneDrive&lt;br /&gt;
* Backup systems&lt;br /&gt;
* Portable storage devices&lt;br /&gt;
&lt;br /&gt;
Controls may include:&lt;br /&gt;
&lt;br /&gt;
* Encryption&lt;br /&gt;
* Access controls&lt;br /&gt;
* Data segregation&lt;br /&gt;
* Monitoring&lt;br /&gt;
* Backup protection&lt;br /&gt;
&lt;br /&gt;
=== Data in Use ===&lt;br /&gt;
&lt;br /&gt;
Data in use refers to information actively being viewed or processed.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Documents opened on workstations&lt;br /&gt;
* Reports displayed on-screen&lt;br /&gt;
* Data processed by applications&lt;br /&gt;
&lt;br /&gt;
Controls may include:&lt;br /&gt;
&lt;br /&gt;
* Session timeouts&lt;br /&gt;
* Screen locking&lt;br /&gt;
* Privileged access management&lt;br /&gt;
* Endpoint protection&lt;br /&gt;
* Rights management solutions&lt;br /&gt;
&lt;br /&gt;
=== Data in Transit ===&lt;br /&gt;
&lt;br /&gt;
Data in transit refers to information moving between systems.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Email&lt;br /&gt;
* API communications&lt;br /&gt;
* File transfers&lt;br /&gt;
* Web traffic&lt;br /&gt;
&lt;br /&gt;
Controls may include:&lt;br /&gt;
&lt;br /&gt;
* TLS encryption&lt;br /&gt;
* VPN technologies&lt;br /&gt;
* Protected file sharing platforms&lt;br /&gt;
* Secure messaging solutions&lt;br /&gt;
&lt;br /&gt;
=== Disposal ===&lt;br /&gt;
&lt;br /&gt;
Information must remain protected until it is securely destroyed.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Physical records&lt;br /&gt;
* Hard drives&lt;br /&gt;
* Backup media&lt;br /&gt;
* Archived documents&lt;br /&gt;
&lt;br /&gt;
Controls may include:&lt;br /&gt;
&lt;br /&gt;
* Secure shredding&lt;br /&gt;
* Cryptographic erasure&lt;br /&gt;
* Certified destruction services&lt;br /&gt;
* Retention enforcement policies&lt;br /&gt;
&lt;br /&gt;
== Practical Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Customer Records ===&lt;br /&gt;
&lt;br /&gt;
Customer information often contains:&lt;br /&gt;
&lt;br /&gt;
* Names&lt;br /&gt;
* Addresses&lt;br /&gt;
* Contact details&lt;br /&gt;
* Transaction history&lt;br /&gt;
&lt;br /&gt;
Such information would normally be classified as Confidential and protected through access controls, monitoring, and encryption.&lt;br /&gt;
&lt;br /&gt;
=== Financial Information ===&lt;br /&gt;
&lt;br /&gt;
Financial reports, forecasts, and budgets may influence business decisions and commercial negotiations.&lt;br /&gt;
&lt;br /&gt;
Access should typically be restricted to authorised personnel and management.&lt;br /&gt;
&lt;br /&gt;
=== Technical Documentation ===&lt;br /&gt;
&lt;br /&gt;
Not all technical documentation is sensitive.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
* User guides may be Public.&lt;br /&gt;
* Internal architecture documents may be Internal.&lt;br /&gt;
* Network diagrams and security configurations may be Confidential or Restricted.&lt;br /&gt;
&lt;br /&gt;
Classification depends upon potential impact rather than document type alone.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Classification Without Controls ===&lt;br /&gt;
&lt;br /&gt;
One of the most common failures is implementing labels without corresponding handling requirements.&lt;br /&gt;
&lt;br /&gt;
A document marked &amp;quot;Confidential&amp;quot; provides little protection if:&lt;br /&gt;
&lt;br /&gt;
* Anyone can access it.&lt;br /&gt;
* It can be freely emailed externally.&lt;br /&gt;
* It can be copied to unmanaged devices.&lt;br /&gt;
&lt;br /&gt;
Classification must drive action.&lt;br /&gt;
&lt;br /&gt;
=== Over-Classification ===&lt;br /&gt;
&lt;br /&gt;
Classifying everything as highly sensitive creates operational friction.&lt;br /&gt;
&lt;br /&gt;
Employees eventually ignore classifications that appear excessive or unrealistic.&lt;br /&gt;
&lt;br /&gt;
The objective is accuracy, not maximum restriction.&lt;br /&gt;
&lt;br /&gt;
=== User Confusion ===&lt;br /&gt;
&lt;br /&gt;
If employees cannot easily determine the correct classification, incorrect classifications become inevitable.&lt;br /&gt;
&lt;br /&gt;
Classification schemes should be simple, understandable, and practical.&lt;br /&gt;
&lt;br /&gt;
=== Focusing Only on Storage ===&lt;br /&gt;
&lt;br /&gt;
Many organisations secure data repositories but overlook what happens after information leaves them.&lt;br /&gt;
&lt;br /&gt;
Common examples include:&lt;br /&gt;
&lt;br /&gt;
* Screenshots&lt;br /&gt;
* Printed documents&lt;br /&gt;
* Downloads&lt;br /&gt;
* Email attachments&lt;br /&gt;
* Mobile device storage&lt;br /&gt;
&lt;br /&gt;
Handling controls must follow information throughout its lifecycle.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
Classification should drive security architecture decisions.&lt;br /&gt;
&lt;br /&gt;
The relationship is typically:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Classification&lt;br /&gt;
       ↓&lt;br /&gt;
Access Control&lt;br /&gt;
       ↓&lt;br /&gt;
Protection Mechanisms&lt;br /&gt;
       ↓&lt;br /&gt;
Monitoring&lt;br /&gt;
       ↓&lt;br /&gt;
Retention&lt;br /&gt;
       ↓&lt;br /&gt;
Disposal&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Access Control ===&lt;br /&gt;
&lt;br /&gt;
Access should be granted according to business need rather than convenience.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Role-Based Access Control (RBAC)&lt;br /&gt;
* Attribute-Based Access Control (ABAC)&lt;br /&gt;
* Least privilege principles&lt;br /&gt;
&lt;br /&gt;
=== Encryption ===&lt;br /&gt;
&lt;br /&gt;
Encryption requirements should align with classification levels.&lt;br /&gt;
&lt;br /&gt;
Higher classifications generally require stronger protections for storage and transmission.&lt;br /&gt;
&lt;br /&gt;
=== Monitoring ===&lt;br /&gt;
&lt;br /&gt;
Sensitive information should attract increased monitoring and auditing.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Access logging&lt;br /&gt;
* Data access monitoring&lt;br /&gt;
* Anomaly detection&lt;br /&gt;
* Data Loss Prevention (DLP)&lt;br /&gt;
&lt;br /&gt;
=== Retention and Disposal ===&lt;br /&gt;
&lt;br /&gt;
Information should not be retained indefinitely.&lt;br /&gt;
&lt;br /&gt;
Retention policies should balance:&lt;br /&gt;
&lt;br /&gt;
* Legal requirements&lt;br /&gt;
* Business requirements&lt;br /&gt;
* Security considerations&lt;br /&gt;
* Storage costs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Auditing ==&lt;br /&gt;
&lt;br /&gt;
=== Classification Reviews ===&lt;br /&gt;
&lt;br /&gt;
Regular reviews help ensure classifications remain accurate as business requirements evolve.&lt;br /&gt;
&lt;br /&gt;
Key questions include:&lt;br /&gt;
&lt;br /&gt;
* Is the classification still appropriate?&lt;br /&gt;
* Has the information become public?&lt;br /&gt;
* Have regulatory requirements changed?&lt;br /&gt;
&lt;br /&gt;
=== Access Auditing ===&lt;br /&gt;
&lt;br /&gt;
Periodic audits should verify that:&lt;br /&gt;
&lt;br /&gt;
* Access remains justified.&lt;br /&gt;
* Permissions remain appropriate.&lt;br /&gt;
* Former employees no longer retain access.&lt;br /&gt;
&lt;br /&gt;
=== Incident Investigation ===&lt;br /&gt;
&lt;br /&gt;
Classification information is valuable during security investigations.&lt;br /&gt;
&lt;br /&gt;
It helps determine:&lt;br /&gt;
&lt;br /&gt;
* Potential impact&lt;br /&gt;
* Notification requirements&lt;br /&gt;
* Escalation paths&lt;br /&gt;
* Remediation priorities&lt;br /&gt;
&lt;br /&gt;
== Design Philosophy ==&lt;br /&gt;
&lt;br /&gt;
Data classification should not be viewed as a compliance exercise.&lt;br /&gt;
&lt;br /&gt;
It is an operational mechanism for making informed security decisions.&lt;br /&gt;
&lt;br /&gt;
The objective is not to label information.&lt;br /&gt;
&lt;br /&gt;
The objective is to understand the impact of compromise and apply controls proportionate to the associated risk.&lt;br /&gt;
&lt;br /&gt;
When implemented correctly, classification becomes the foundation upon which access control, encryption, monitoring, retention, and disposal strategies are built.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Information Security Fundamentals]]&lt;br /&gt;
* [[Information Lifecycle Management]]&lt;br /&gt;
* [[Data Loss Prevention]]&lt;br /&gt;
* [[Access Control Models]]&lt;br /&gt;
* [[Encryption Technologies]]&lt;br /&gt;
* [[Records Management]]&lt;br /&gt;
* [[GDPR]]&lt;br /&gt;
* [[Microsoft Purview Information Protection]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* ISO/IEC 27001&lt;br /&gt;
* ISO/IEC 27002&lt;br /&gt;
* ISO/IEC 27701&lt;br /&gt;
* GDPR&lt;br /&gt;
* NIST Information Classification Guidance&lt;br /&gt;
* PCI-DSS&lt;br /&gt;
* Microsoft Purview Information Protection Documentation&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Cloud_Security_Architecture&amp;diff=429</id>
		<title>Cloud Security Architecture</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Cloud_Security_Architecture&amp;diff=429"/>
		<updated>2026-07-06T06:54:37Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;== Introduction ==  Cloud Security Architecture is the structured design of security controls, policies, technologies, and operational processes intended to protect cloud-based systems, applications, data, and services. It provides a framework for securing cloud environments while supporting business objectives such as scalability, availability, performance, compliance, and cost efficiency.  As organisations increasingly migrate workloads to public, private, and hybrid c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Cloud Security Architecture is the structured design of security controls, policies, technologies, and operational processes intended to protect cloud-based systems, applications, data, and services. It provides a framework for securing cloud environments while supporting business objectives such as scalability, availability, performance, compliance, and cost efficiency.&lt;br /&gt;
&lt;br /&gt;
As organisations increasingly migrate workloads to public, private, and hybrid cloud platforms, security architecture has become a fundamental discipline that ensures the confidentiality, integrity, and availability of information assets across distributed and often globally accessible environments.&lt;br /&gt;
&lt;br /&gt;
Cloud Security Architecture combines traditional information security principles with cloud-native technologies and operational practices to create a resilient and adaptable security posture.&lt;br /&gt;
&lt;br /&gt;
== Objectives ==&lt;br /&gt;
&lt;br /&gt;
The primary objectives of Cloud Security Architecture include:&lt;br /&gt;
&lt;br /&gt;
* Protecting sensitive information and business assets.&lt;br /&gt;
* Ensuring regulatory and legal compliance.&lt;br /&gt;
* Managing risk associated with cloud adoption.&lt;br /&gt;
* Enabling secure digital transformation initiatives.&lt;br /&gt;
* Supporting business continuity and disaster recovery.&lt;br /&gt;
* Preventing unauthorised access to systems and data.&lt;br /&gt;
* Detecting and responding to threats in real-time.&lt;br /&gt;
* Maintaining trust with customers, partners, and stakeholders.&lt;br /&gt;
&lt;br /&gt;
== Shared Responsibility Model ==&lt;br /&gt;
&lt;br /&gt;
A fundamental concept in cloud security is the &#039;&#039;&#039;Shared Responsibility Model&#039;&#039;&#039;, which defines the division of security responsibilities between the cloud provider and the customer.&lt;br /&gt;
&lt;br /&gt;
=== Cloud Provider Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
Typically include:&lt;br /&gt;
&lt;br /&gt;
* Physical data centre security.&lt;br /&gt;
* Hardware security.&lt;br /&gt;
* Network infrastructure protection.&lt;br /&gt;
* Hypervisor security.&lt;br /&gt;
* Availability of cloud services.&lt;br /&gt;
&lt;br /&gt;
=== Customer Responsibilities ===&lt;br /&gt;
&lt;br /&gt;
Typically include:&lt;br /&gt;
&lt;br /&gt;
* Identity and access management.&lt;br /&gt;
* Data protection and classification.&lt;br /&gt;
* Operating system security (Infrastructure as a Service).&lt;br /&gt;
* Application security.&lt;br /&gt;
* Configuration management.&lt;br /&gt;
* Security monitoring and governance.&lt;br /&gt;
&lt;br /&gt;
The exact allocation of responsibilities varies depending on the cloud service model.&lt;br /&gt;
&lt;br /&gt;
== Cloud Service Models ==&lt;br /&gt;
&lt;br /&gt;
=== Infrastructure as a Service (IaaS) ===&lt;br /&gt;
&lt;br /&gt;
Provides customers with virtualised infrastructure components including:&lt;br /&gt;
&lt;br /&gt;
* Virtual machines.&lt;br /&gt;
* Storage services.&lt;br /&gt;
* Networking components.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Azure Virtual Machines.&lt;br /&gt;
* Amazon EC2.&lt;br /&gt;
* Google Compute Engine.&lt;br /&gt;
&lt;br /&gt;
Customers are responsible for securing operating systems, applications, and data.&lt;br /&gt;
&lt;br /&gt;
=== Platform as a Service (PaaS) ===&lt;br /&gt;
&lt;br /&gt;
Provides managed platforms for application development and deployment.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Azure App Services.&lt;br /&gt;
* Azure SQL Database.&lt;br /&gt;
* Google App Engine.&lt;br /&gt;
&lt;br /&gt;
Security responsibilities shift toward application and data protection.&lt;br /&gt;
&lt;br /&gt;
=== Software as a Service (SaaS) ===&lt;br /&gt;
&lt;br /&gt;
Provides fully managed applications delivered over the internet.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft 365.&lt;br /&gt;
* Salesforce.&lt;br /&gt;
* ServiceNow.&lt;br /&gt;
&lt;br /&gt;
Customers primarily focus on access control, data governance, and compliance.&lt;br /&gt;
&lt;br /&gt;
== Core Architectural Principles ==&lt;br /&gt;
&lt;br /&gt;
=== Defence in Depth ===&lt;br /&gt;
&lt;br /&gt;
Defence in Depth employs multiple layers of security controls to prevent a single point of failure.&lt;br /&gt;
&lt;br /&gt;
Typical layers include:&lt;br /&gt;
&lt;br /&gt;
# Physical Security&lt;br /&gt;
# Network Security&lt;br /&gt;
# Perimeter Security&lt;br /&gt;
# Identity Security&lt;br /&gt;
# Endpoint Security&lt;br /&gt;
# Application Security&lt;br /&gt;
# Data Security&lt;br /&gt;
# Monitoring and Response&lt;br /&gt;
&lt;br /&gt;
=== Zero Trust ===&lt;br /&gt;
&lt;br /&gt;
Zero Trust assumes that no user, device, application, or network should be automatically trusted.&lt;br /&gt;
&lt;br /&gt;
Core principles include:&lt;br /&gt;
&lt;br /&gt;
* Verify explicitly.&lt;br /&gt;
* Use least privilege access.&lt;br /&gt;
* Assume breach.&lt;br /&gt;
* Continuously validate trust.&lt;br /&gt;
* Monitor all activity.&lt;br /&gt;
&lt;br /&gt;
=== Least Privilege ===&lt;br /&gt;
&lt;br /&gt;
Users and systems should only receive the minimum permissions necessary to perform required tasks.&lt;br /&gt;
&lt;br /&gt;
Benefits include:&lt;br /&gt;
&lt;br /&gt;
* Reduced attack surface.&lt;br /&gt;
* Lower risk of privilege escalation.&lt;br /&gt;
* Improved compliance.&lt;br /&gt;
&lt;br /&gt;
=== Secure by Design ===&lt;br /&gt;
&lt;br /&gt;
Security requirements should be integrated during system design rather than added after deployment.&lt;br /&gt;
&lt;br /&gt;
This includes:&lt;br /&gt;
&lt;br /&gt;
* Threat modelling.&lt;br /&gt;
* Security architecture reviews.&lt;br /&gt;
* Security testing.&lt;br /&gt;
* Secure coding practices.&lt;br /&gt;
&lt;br /&gt;
== Cloud Security Domains ==&lt;br /&gt;
&lt;br /&gt;
=== Identity and Access Management ===&lt;br /&gt;
&lt;br /&gt;
Identity is the primary security perimeter in modern cloud environments.&lt;br /&gt;
&lt;br /&gt;
Key controls include:&lt;br /&gt;
&lt;br /&gt;
* Multi-Factor Authentication (MFA).&lt;br /&gt;
* Conditional Access Policies.&lt;br /&gt;
* Single Sign-On (SSO).&lt;br /&gt;
* Privileged Identity Management (PIM).&lt;br /&gt;
* Role-Based Access Control (RBAC).&lt;br /&gt;
* Federated Authentication.&lt;br /&gt;
&lt;br /&gt;
=== Network Security ===&lt;br /&gt;
&lt;br /&gt;
Cloud network security controls protect communication between resources.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Virtual Networks.&lt;br /&gt;
* Network Security Groups.&lt;br /&gt;
* Firewalls.&lt;br /&gt;
* Web Application Firewalls (WAF).&lt;br /&gt;
* Private Endpoints.&lt;br /&gt;
* VPN Gateways.&lt;br /&gt;
* Bastion Hosts.&lt;br /&gt;
&lt;br /&gt;
=== Data Security ===&lt;br /&gt;
&lt;br /&gt;
Data protection measures focus on securing information throughout its lifecycle.&lt;br /&gt;
&lt;br /&gt;
Controls typically include:&lt;br /&gt;
&lt;br /&gt;
* Encryption at rest.&lt;br /&gt;
* Encryption in transit.&lt;br /&gt;
* Encryption in use.&lt;br /&gt;
* Key Management Systems.&lt;br /&gt;
* Data Loss Prevention (DLP).&lt;br /&gt;
* Information Classification.&lt;br /&gt;
* Data Retention Policies.&lt;br /&gt;
&lt;br /&gt;
=== Application Security ===&lt;br /&gt;
&lt;br /&gt;
Application security protects software workloads deployed in cloud environments.&lt;br /&gt;
&lt;br /&gt;
Key techniques include:&lt;br /&gt;
&lt;br /&gt;
* Secure Development Lifecycle (SDLC).&lt;br /&gt;
* Static Application Security Testing (SAST).&lt;br /&gt;
* Dynamic Application Security Testing (DAST).&lt;br /&gt;
* Dependency Scanning.&lt;br /&gt;
* API Security.&lt;br /&gt;
* Secure Code Reviews.&lt;br /&gt;
&lt;br /&gt;
=== Endpoint Security ===&lt;br /&gt;
&lt;br /&gt;
Endpoints connecting to cloud services require protection through:&lt;br /&gt;
&lt;br /&gt;
* Endpoint Detection and Response (EDR).&lt;br /&gt;
* Anti-malware solutions.&lt;br /&gt;
* Device compliance policies.&lt;br /&gt;
* Mobile Device Management (MDM).&lt;br /&gt;
* Device encryption.&lt;br /&gt;
&lt;br /&gt;
=== Security Operations ===&lt;br /&gt;
&lt;br /&gt;
Security operations provide visibility into cloud environments.&lt;br /&gt;
&lt;br /&gt;
Capabilities include:&lt;br /&gt;
&lt;br /&gt;
* Log aggregation.&lt;br /&gt;
* Security Information and Event Management (SIEM).&lt;br /&gt;
* Security Orchestration, Automation and Response (SOAR).&lt;br /&gt;
* Threat Intelligence.&lt;br /&gt;
* Incident Response.&lt;br /&gt;
* Security Analytics.&lt;br /&gt;
&lt;br /&gt;
== Security Architecture Components ==&lt;br /&gt;
&lt;br /&gt;
=== Governance Layer ===&lt;br /&gt;
&lt;br /&gt;
Provides strategic oversight through:&lt;br /&gt;
&lt;br /&gt;
* Security policies.&lt;br /&gt;
* Security standards.&lt;br /&gt;
* Risk management frameworks.&lt;br /&gt;
* Compliance controls.&lt;br /&gt;
* Audit programmes.&lt;br /&gt;
&lt;br /&gt;
=== Control Layer ===&lt;br /&gt;
&lt;br /&gt;
Implements technical and administrative controls.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Access controls.&lt;br /&gt;
* Monitoring controls.&lt;br /&gt;
* Encryption controls.&lt;br /&gt;
* Configuration standards.&lt;br /&gt;
&lt;br /&gt;
=== Monitoring Layer ===&lt;br /&gt;
&lt;br /&gt;
Provides continuous operational visibility.&lt;br /&gt;
&lt;br /&gt;
Includes:&lt;br /&gt;
&lt;br /&gt;
* Log collection.&lt;br /&gt;
* Event monitoring.&lt;br /&gt;
* Alerting mechanisms.&lt;br /&gt;
* Threat detection systems.&lt;br /&gt;
&lt;br /&gt;
=== Response Layer ===&lt;br /&gt;
&lt;br /&gt;
Manages security incidents through:&lt;br /&gt;
&lt;br /&gt;
* Incident response plans.&lt;br /&gt;
* Security playbooks.&lt;br /&gt;
* Automated remediation.&lt;br /&gt;
* Forensic investigations.&lt;br /&gt;
&lt;br /&gt;
== Cloud Security Technologies ==&lt;br /&gt;
&lt;br /&gt;
Common technologies within modern cloud architectures include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Defender for Cloud.&lt;br /&gt;
* Microsoft Sentinel.&lt;br /&gt;
* Azure Firewall.&lt;br /&gt;
* Azure Key Vault.&lt;br /&gt;
* Azure DDoS Protection.&lt;br /&gt;
* AWS GuardDuty.&lt;br /&gt;
* AWS Security Hub.&lt;br /&gt;
* Google Security Command Center.&lt;br /&gt;
* CrowdStrike Falcon.&lt;br /&gt;
* Palo Alto Prisma Cloud.&lt;br /&gt;
&lt;br /&gt;
== Common Threats ==&lt;br /&gt;
&lt;br /&gt;
=== Misconfiguration ===&lt;br /&gt;
&lt;br /&gt;
One of the most significant causes of cloud security incidents.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Publicly accessible storage.&lt;br /&gt;
* Excessive permissions.&lt;br /&gt;
* Open network ports.&lt;br /&gt;
&lt;br /&gt;
=== Credential Theft ===&lt;br /&gt;
&lt;br /&gt;
Compromised credentials may allow attackers to gain access to cloud resources.&lt;br /&gt;
&lt;br /&gt;
Mitigation techniques include:&lt;br /&gt;
&lt;br /&gt;
* MFA.&lt;br /&gt;
* Passwordless authentication.&lt;br /&gt;
* Conditional Access.&lt;br /&gt;
&lt;br /&gt;
=== Insider Threats ===&lt;br /&gt;
&lt;br /&gt;
May originate from employees, contractors, or partners who misuse legitimate access.&lt;br /&gt;
&lt;br /&gt;
=== Supply Chain Attacks ===&lt;br /&gt;
&lt;br /&gt;
Compromise of software, services, or third-party dependencies used within cloud environments.&lt;br /&gt;
&lt;br /&gt;
=== Ransomware ===&lt;br /&gt;
&lt;br /&gt;
Attackers may target cloud-hosted workloads, backup systems, or synchronised data repositories.&lt;br /&gt;
&lt;br /&gt;
== Compliance and Regulatory Considerations ==&lt;br /&gt;
&lt;br /&gt;
Cloud Security Architecture often supports compliance with standards and regulations including:&lt;br /&gt;
&lt;br /&gt;
* ISO 27001&lt;br /&gt;
* ISO 27017&lt;br /&gt;
* ISO 27018&lt;br /&gt;
* SOC 2&lt;br /&gt;
* PCI-DSS&lt;br /&gt;
* GDPR&lt;br /&gt;
* HIPAA&lt;br /&gt;
* NIST Cybersecurity Framework&lt;br /&gt;
* NIST SP 800-53&lt;br /&gt;
&lt;br /&gt;
Compliance should be considered throughout the solution lifecycle rather than as a final validation exercise.&lt;br /&gt;
&lt;br /&gt;
== Cloud Security Architecture Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Assessment ===&lt;br /&gt;
&lt;br /&gt;
Identify:&lt;br /&gt;
&lt;br /&gt;
* Assets.&lt;br /&gt;
* Risks.&lt;br /&gt;
* Threats.&lt;br /&gt;
* Compliance requirements.&lt;br /&gt;
&lt;br /&gt;
=== 2. Design ===&lt;br /&gt;
&lt;br /&gt;
Develop:&lt;br /&gt;
&lt;br /&gt;
* Security controls.&lt;br /&gt;
* Trust boundaries.&lt;br /&gt;
* Network architecture.&lt;br /&gt;
* Identity architecture.&lt;br /&gt;
&lt;br /&gt;
=== 3. Implementation ===&lt;br /&gt;
&lt;br /&gt;
Deploy:&lt;br /&gt;
&lt;br /&gt;
* Security technologies.&lt;br /&gt;
* Policies.&lt;br /&gt;
* Monitoring capabilities.&lt;br /&gt;
&lt;br /&gt;
=== 4. Validation ===&lt;br /&gt;
&lt;br /&gt;
Perform:&lt;br /&gt;
&lt;br /&gt;
* Vulnerability assessments.&lt;br /&gt;
* Penetration testing.&lt;br /&gt;
* Architecture reviews.&lt;br /&gt;
&lt;br /&gt;
=== 5. Operations ===&lt;br /&gt;
&lt;br /&gt;
Maintain:&lt;br /&gt;
&lt;br /&gt;
* Monitoring.&lt;br /&gt;
* Incident response.&lt;br /&gt;
* Change management.&lt;br /&gt;
&lt;br /&gt;
=== 6. Continuous Improvement ===&lt;br /&gt;
&lt;br /&gt;
Review and enhance controls based on:&lt;br /&gt;
&lt;br /&gt;
* Emerging threats.&lt;br /&gt;
* Business changes.&lt;br /&gt;
* Security incidents.&lt;br /&gt;
* Regulatory updates.&lt;br /&gt;
&lt;br /&gt;
== Emerging Trends ==&lt;br /&gt;
&lt;br /&gt;
Several trends are shaping the future of Cloud Security Architecture:&lt;br /&gt;
&lt;br /&gt;
* AI-assisted threat detection.&lt;br /&gt;
* Security Copilots and automated investigations.&lt;br /&gt;
* Extended Detection and Response (XDR).&lt;br /&gt;
* Cloud-Native Application Protection Platforms (CNAPP).&lt;br /&gt;
* Secure Access Service Edge (SASE).&lt;br /&gt;
* Security Service Edge (SSE).&lt;br /&gt;
* Confidential Computing.&lt;br /&gt;
* Post-Quantum Cryptography preparedness.&lt;br /&gt;
* Identity-first security models.&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
* Adopt a Zero Trust strategy.&lt;br /&gt;
* Enable Multi-Factor Authentication everywhere possible.&lt;br /&gt;
* Apply least privilege access principles.&lt;br /&gt;
* Encrypt sensitive data.&lt;br /&gt;
* Continuously monitor cloud environments.&lt;br /&gt;
* Automate security operations where appropriate.&lt;br /&gt;
* Conduct regular security reviews.&lt;br /&gt;
* Maintain comprehensive logging.&lt;br /&gt;
* Implement robust backup and recovery procedures.&lt;br /&gt;
* Integrate security throughout the development lifecycle.&lt;br /&gt;
&lt;br /&gt;
== Conclusion ==&lt;br /&gt;
&lt;br /&gt;
Cloud Security Architecture provides the strategic and technical foundation required to secure modern cloud environments. By integrating governance, identity, data protection, monitoring, and incident response capabilities into a cohesive architecture, organisations can confidently leverage cloud technologies while managing risk and maintaining compliance. Successful cloud security architecture is not a one-time project but an ongoing discipline that evolves alongside threats, technologies, and business requirements.&lt;br /&gt;
&lt;br /&gt;
[[Category:Cloud Computing]]&lt;br /&gt;
[[Category:Cyber Security]]&lt;br /&gt;
[[Category:Enterprise Architecture]]&lt;br /&gt;
[[Category:Information Security]]&lt;br /&gt;
[[Category:Microsoft Azure]]&lt;br /&gt;
[[Category:Infrastructure]]&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Risk_Management&amp;diff=428</id>
		<title>Risk Management</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Risk_Management&amp;diff=428"/>
		<updated>2026-07-06T06:53:11Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Risk Management is the structured process of identifying, assessing, treating, monitoring, and reviewing uncertainty that could affect the achievement of objectives. Effective risk management improves decision-making, protects assets, supports business continuity, and enables organisations to pursue opportunities with greater confidence.  Risk exists in every activity, whether managing infrastructure, delivering projects, operating services, deploying soft...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Risk Management is the structured process of identifying, assessing, treating, monitoring, and reviewing uncertainty that could affect the achievement of objectives. Effective risk management improves decision-making, protects assets, supports business continuity, and enables organisations to pursue opportunities with greater confidence.&lt;br /&gt;
&lt;br /&gt;
Risk exists in every activity, whether managing infrastructure, delivering projects, operating services, deploying software, or making strategic business decisions. The goal is not to eliminate risk entirely, but to understand it well enough to make informed choices.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
=== Why Risk Management Matters ===&lt;br /&gt;
&lt;br /&gt;
Every organisation operates in an environment filled with uncertainty. Systems fail, suppliers become unavailable, projects encounter delays, security threats emerge, and business priorities change.&lt;br /&gt;
&lt;br /&gt;
Without a structured approach to risk management, organisations often react to problems only after they occur. This reactive approach can lead to increased costs, service disruption, damaged reputation, regulatory issues, and missed opportunities.&lt;br /&gt;
&lt;br /&gt;
Risk management provides a framework for anticipating potential problems before they become incidents.&lt;br /&gt;
&lt;br /&gt;
=== Risk Is Not Always Negative ===&lt;br /&gt;
&lt;br /&gt;
A common misconception is that risk only refers to threats and undesirable outcomes.&lt;br /&gt;
&lt;br /&gt;
In practice, risk is uncertainty that may have either a positive or negative effect on objectives.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
* A new technology may introduce implementation risks.&lt;br /&gt;
* The same technology may also create opportunities for increased efficiency.&lt;br /&gt;
* Entering a new market may expose a business to financial uncertainty.&lt;br /&gt;
* The same decision may create significant growth opportunities.&lt;br /&gt;
&lt;br /&gt;
Good risk management considers both threats and opportunities.&lt;br /&gt;
&lt;br /&gt;
=== Common Misconceptions ===&lt;br /&gt;
&lt;br /&gt;
Some organisations view risk management as a compliance exercise performed solely to satisfy auditors.&lt;br /&gt;
&lt;br /&gt;
Others believe that maintaining a risk register is sufficient.&lt;br /&gt;
&lt;br /&gt;
In reality, risk management is most valuable when it influences day-to-day decision-making and becomes part of organisational culture.&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Risk ===&lt;br /&gt;
&lt;br /&gt;
A risk is a potential event or condition that may impact one or more objectives.&lt;br /&gt;
&lt;br /&gt;
A useful format for documenting risks is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If [event occurs],&lt;br /&gt;
Then [impact may result],&lt;br /&gt;
Affecting [objective].&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
If the primary internet connection fails,&lt;br /&gt;
Then remote access services may become unavailable,&lt;br /&gt;
Affecting business operations.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Threat ===&lt;br /&gt;
&lt;br /&gt;
A threat is something capable of causing harm.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Cyber attacks&lt;br /&gt;
* Hardware failure&lt;br /&gt;
* Human error&lt;br /&gt;
* Extreme weather&lt;br /&gt;
* Supply chain disruption&lt;br /&gt;
&lt;br /&gt;
=== Vulnerability ===&lt;br /&gt;
&lt;br /&gt;
A vulnerability is a weakness that could be exploited by a threat.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Unsupported software&lt;br /&gt;
* Single points of failure&lt;br /&gt;
* Weak authentication controls&lt;br /&gt;
* Insufficient backups&lt;br /&gt;
&lt;br /&gt;
=== Impact ===&lt;br /&gt;
&lt;br /&gt;
Impact measures the consequences should a risk occur.&lt;br /&gt;
&lt;br /&gt;
Impact may be measured in:&lt;br /&gt;
&lt;br /&gt;
* Financial loss&lt;br /&gt;
* Service outage duration&lt;br /&gt;
* Regulatory penalties&lt;br /&gt;
* Reputational damage&lt;br /&gt;
* Health and safety effects&lt;br /&gt;
&lt;br /&gt;
=== Likelihood ===&lt;br /&gt;
&lt;br /&gt;
Likelihood estimates the probability of a risk occurring within a defined period.&lt;br /&gt;
&lt;br /&gt;
Likelihood should be based on evidence wherever possible rather than guesswork.&lt;br /&gt;
&lt;br /&gt;
=== Risk Appetite ===&lt;br /&gt;
&lt;br /&gt;
Risk appetite defines the level of risk an organisation is willing to accept in pursuit of its objectives.&lt;br /&gt;
&lt;br /&gt;
Different organisations have different appetites for risk.&lt;br /&gt;
&lt;br /&gt;
A financial institution may have a very low tolerance for security risks, while a technology startup may willingly accept greater operational risks in exchange for faster innovation.&lt;br /&gt;
&lt;br /&gt;
== The Risk Management Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
=== Risk Identification ===&lt;br /&gt;
&lt;br /&gt;
The first step is discovering potential risks.&lt;br /&gt;
&lt;br /&gt;
Common techniques include:&lt;br /&gt;
&lt;br /&gt;
* Workshops&lt;br /&gt;
* Interviews&lt;br /&gt;
* Brainstorming sessions&lt;br /&gt;
* Lessons learned reviews&lt;br /&gt;
* Security assessments&lt;br /&gt;
* Architecture reviews&lt;br /&gt;
* Audit findings&lt;br /&gt;
&lt;br /&gt;
The objective is to identify risks before they manifest as issues.&lt;br /&gt;
&lt;br /&gt;
=== Risk Assessment ===&lt;br /&gt;
&lt;br /&gt;
Each identified risk is evaluated based on:&lt;br /&gt;
&lt;br /&gt;
* Likelihood&lt;br /&gt;
* Impact&lt;br /&gt;
* Existing controls&lt;br /&gt;
&lt;br /&gt;
This assessment determines the overall level of risk and helps prioritise mitigation efforts.&lt;br /&gt;
&lt;br /&gt;
=== Risk Treatment ===&lt;br /&gt;
&lt;br /&gt;
Treatment involves selecting an appropriate response.&lt;br /&gt;
&lt;br /&gt;
Common responses include:&lt;br /&gt;
&lt;br /&gt;
* Accept&lt;br /&gt;
* Avoid&lt;br /&gt;
* Mitigate&lt;br /&gt;
* Transfer&lt;br /&gt;
&lt;br /&gt;
These are explored later in this article.&lt;br /&gt;
&lt;br /&gt;
=== Risk Monitoring ===&lt;br /&gt;
&lt;br /&gt;
Risk environments change continuously.&lt;br /&gt;
&lt;br /&gt;
A risk that was acceptable six months ago may become critical due to changing business requirements, emerging threats, or environmental changes.&lt;br /&gt;
&lt;br /&gt;
Monitoring ensures records remain accurate and relevant.&lt;br /&gt;
&lt;br /&gt;
=== Risk Review ===&lt;br /&gt;
&lt;br /&gt;
Periodic reviews validate assumptions and determine whether controls remain effective.&lt;br /&gt;
&lt;br /&gt;
Reviews should occur:&lt;br /&gt;
&lt;br /&gt;
* At defined intervals&lt;br /&gt;
* After significant incidents&lt;br /&gt;
* Following major changes&lt;br /&gt;
* At project milestones&lt;br /&gt;
&lt;br /&gt;
== Risk Assessment Methods ==&lt;br /&gt;
&lt;br /&gt;
=== Qualitative Assessment ===&lt;br /&gt;
&lt;br /&gt;
Qualitative approaches use subjective ratings such as:&lt;br /&gt;
&lt;br /&gt;
* Low&lt;br /&gt;
* Medium&lt;br /&gt;
* High&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
* Very Low&lt;br /&gt;
* Low&lt;br /&gt;
* Moderate&lt;br /&gt;
* High&lt;br /&gt;
* Critical&lt;br /&gt;
&lt;br /&gt;
These methods are simple and suitable for many operational environments.&lt;br /&gt;
&lt;br /&gt;
=== Quantitative Assessment ===&lt;br /&gt;
&lt;br /&gt;
Quantitative approaches assign numerical values to likelihood and impact.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Financial exposure&lt;br /&gt;
* Expected annual loss&lt;br /&gt;
* Statistical probability models&lt;br /&gt;
&lt;br /&gt;
These approaches support more detailed decision-making but require reliable data.&lt;br /&gt;
&lt;br /&gt;
=== Risk Matrix Models ===&lt;br /&gt;
&lt;br /&gt;
Many organisations use a risk matrix.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Impact&lt;br /&gt;
          Low  Med  High&lt;br /&gt;
Low       Low  Low  Med&lt;br /&gt;
Medium    Low  Med  High&lt;br /&gt;
High      Med  High Critical&lt;br /&gt;
          Likelihood&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Risk matrices help stakeholders quickly visualise priorities.&lt;br /&gt;
&lt;br /&gt;
== Practical Application ==&lt;br /&gt;
&lt;br /&gt;
=== Project Risk Management ===&lt;br /&gt;
&lt;br /&gt;
Projects introduce uncertainty through:&lt;br /&gt;
&lt;br /&gt;
* Budget constraints&lt;br /&gt;
* Resource limitations&lt;br /&gt;
* Technical complexity&lt;br /&gt;
* External dependencies&lt;br /&gt;
&lt;br /&gt;
Project risks should be reviewed regularly throughout the project lifecycle rather than only during initiation.&lt;br /&gt;
&lt;br /&gt;
=== Operational Risk Management ===&lt;br /&gt;
&lt;br /&gt;
Operational risks affect day-to-day business functions.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Infrastructure failure&lt;br /&gt;
* Staffing shortages&lt;br /&gt;
* Supplier issues&lt;br /&gt;
* Process failures&lt;br /&gt;
&lt;br /&gt;
These risks are often ongoing and require continuous monitoring.&lt;br /&gt;
&lt;br /&gt;
=== Information Security Risk Management ===&lt;br /&gt;
&lt;br /&gt;
Information security is fundamentally a risk management discipline.&lt;br /&gt;
&lt;br /&gt;
Controls such as:&lt;br /&gt;
&lt;br /&gt;
* Multi-factor authentication&lt;br /&gt;
* Encryption&lt;br /&gt;
* Network segmentation&lt;br /&gt;
* Monitoring and alerting&lt;br /&gt;
&lt;br /&gt;
exist to reduce risk to acceptable levels.&lt;br /&gt;
&lt;br /&gt;
Absolute security is rarely achievable; the objective is managed risk.&lt;br /&gt;
&lt;br /&gt;
=== Business Continuity Considerations ===&lt;br /&gt;
&lt;br /&gt;
Business continuity planning focuses on maintaining essential services when risks materialise.&lt;br /&gt;
&lt;br /&gt;
Questions often include:&lt;br /&gt;
&lt;br /&gt;
* What happens if this system fails?&lt;br /&gt;
* How long can the business function without it?&lt;br /&gt;
* What alternatives exist?&lt;br /&gt;
* How quickly must recovery occur?&lt;br /&gt;
&lt;br /&gt;
Risk management provides the information required to answer these questions.&lt;br /&gt;
&lt;br /&gt;
== Common Risk Treatment Strategies ==&lt;br /&gt;
&lt;br /&gt;
=== Accept ===&lt;br /&gt;
&lt;br /&gt;
A risk may be accepted when:&lt;br /&gt;
&lt;br /&gt;
* Impact is minimal&lt;br /&gt;
* Likelihood is low&lt;br /&gt;
* Mitigation costs exceed potential losses&lt;br /&gt;
&lt;br /&gt;
Acceptance should always be a conscious decision.&lt;br /&gt;
&lt;br /&gt;
=== Avoid ===&lt;br /&gt;
&lt;br /&gt;
Avoidance removes the activity that creates the risk.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
A business may choose not to deploy an unsupported application rather than assume the associated security risk.&lt;br /&gt;
&lt;br /&gt;
=== Mitigate ===&lt;br /&gt;
&lt;br /&gt;
Mitigation reduces either likelihood or impact.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Redundant systems&lt;br /&gt;
* Automated backups&lt;br /&gt;
* Security controls&lt;br /&gt;
* Additional testing&lt;br /&gt;
&lt;br /&gt;
Most organisational risk management activity falls into this category.&lt;br /&gt;
&lt;br /&gt;
=== Transfer ===&lt;br /&gt;
&lt;br /&gt;
Transfer shifts some responsibility to another party.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Insurance&lt;br /&gt;
* Outsourced services&lt;br /&gt;
* Contractual agreements&lt;br /&gt;
&lt;br /&gt;
Responsibility may be transferred, but accountability often remains.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Treating Risk Registers as a Tick-Box Exercise ===&lt;br /&gt;
&lt;br /&gt;
A risk register that is never reviewed provides little value.&lt;br /&gt;
&lt;br /&gt;
Risk information must inform decision-making.&lt;br /&gt;
&lt;br /&gt;
=== Ignoring Low Probability, High Impact Events ===&lt;br /&gt;
&lt;br /&gt;
Rare events may still be catastrophic.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Major cyber incidents&lt;br /&gt;
* Datacentre destruction&lt;br /&gt;
* Long-term supplier failure&lt;br /&gt;
&lt;br /&gt;
These events often justify contingency planning despite their low probability.&lt;br /&gt;
&lt;br /&gt;
=== Failure to Review Risks Regularly ===&lt;br /&gt;
&lt;br /&gt;
Environments change.&lt;br /&gt;
&lt;br /&gt;
Technology changes.&lt;br /&gt;
&lt;br /&gt;
Threat actors change.&lt;br /&gt;
&lt;br /&gt;
Businesses change.&lt;br /&gt;
&lt;br /&gt;
Risk records must evolve accordingly.&lt;br /&gt;
&lt;br /&gt;
=== Confusing Issues with Risks ===&lt;br /&gt;
&lt;br /&gt;
A risk is a potential future event.&lt;br /&gt;
&lt;br /&gt;
An issue is something that has already occurred.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Risk:&lt;br /&gt;
The storage platform may exceed capacity.&lt;br /&gt;
&lt;br /&gt;
Issue:&lt;br /&gt;
The storage platform has exceeded capacity.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This distinction is important for effective governance.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Risk Ownership ===&lt;br /&gt;
&lt;br /&gt;
Every significant risk should have a clearly identified owner.&lt;br /&gt;
&lt;br /&gt;
Risk owners are responsible for:&lt;br /&gt;
&lt;br /&gt;
* Monitoring&lt;br /&gt;
* Reporting&lt;br /&gt;
* Reviewing&lt;br /&gt;
* Escalating when required&lt;br /&gt;
&lt;br /&gt;
=== Escalation Paths ===&lt;br /&gt;
&lt;br /&gt;
High-priority risks require clear escalation procedures.&lt;br /&gt;
&lt;br /&gt;
Decision-makers should understand:&lt;br /&gt;
&lt;br /&gt;
* Severity&lt;br /&gt;
* Potential consequences&lt;br /&gt;
* Required actions&lt;br /&gt;
* Time sensitivity&lt;br /&gt;
&lt;br /&gt;
=== Reporting and Communication ===&lt;br /&gt;
&lt;br /&gt;
Risk information should be understandable by both technical and non-technical audiences.&lt;br /&gt;
&lt;br /&gt;
Effective reporting focuses on:&lt;br /&gt;
&lt;br /&gt;
* Business impact&lt;br /&gt;
* Trends&lt;br /&gt;
* Control effectiveness&lt;br /&gt;
* Required decisions&lt;br /&gt;
&lt;br /&gt;
=== Culture and Accountability ===&lt;br /&gt;
&lt;br /&gt;
Strong risk cultures encourage individuals to report concerns early.&lt;br /&gt;
&lt;br /&gt;
The objective is not assigning blame.&lt;br /&gt;
&lt;br /&gt;
The objective is identifying and managing uncertainty before it causes harm.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
=== Indicators of Poor Risk Management ===&lt;br /&gt;
&lt;br /&gt;
Warning signs may include:&lt;br /&gt;
&lt;br /&gt;
* Repeated incidents&lt;br /&gt;
* Surprise failures&lt;br /&gt;
* Unmaintained risk registers&lt;br /&gt;
* Lack of ownership&lt;br /&gt;
* Poor disaster recovery preparedness&lt;br /&gt;
&lt;br /&gt;
=== Reviewing Failed Controls ===&lt;br /&gt;
&lt;br /&gt;
When an incident occurs, organisations should examine:&lt;br /&gt;
&lt;br /&gt;
* Which controls failed?&lt;br /&gt;
* Why did they fail?&lt;br /&gt;
* Were assumptions accurate?&lt;br /&gt;
* Were warnings missed?&lt;br /&gt;
&lt;br /&gt;
This process improves future decision-making.&lt;br /&gt;
&lt;br /&gt;
=== Lessons Learned Processes ===&lt;br /&gt;
&lt;br /&gt;
Post-incident reviews often provide the most valuable risk management insights.&lt;br /&gt;
&lt;br /&gt;
A mature organisation treats incidents as opportunities for improvement rather than simply restoring service and moving on.&lt;br /&gt;
&lt;br /&gt;
== Design Philosophy ==&lt;br /&gt;
&lt;br /&gt;
Risk management should not become a barrier to progress.&lt;br /&gt;
&lt;br /&gt;
Every meaningful activity involves uncertainty.&lt;br /&gt;
&lt;br /&gt;
The purpose of risk management is to provide visibility, support informed decisions, and ensure organisations understand the consequences of their choices.&lt;br /&gt;
&lt;br /&gt;
The most effective risk management practices are often the least visible. They are embedded within planning, architecture, operations, governance, and culture.&lt;br /&gt;
&lt;br /&gt;
When done well, risk management does not eliminate uncertainty.&lt;br /&gt;
&lt;br /&gt;
It allows organisations to move forward with their eyes open.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Business Continuity]]&lt;br /&gt;
* [[Disaster Recovery]]&lt;br /&gt;
* [[Incident Management]]&lt;br /&gt;
* [[Information Security Management]]&lt;br /&gt;
* [[Project Governance]]&lt;br /&gt;
* [[ISO 9001]]&lt;br /&gt;
* [[ISO 27001]]&lt;br /&gt;
* [[Change Management]]&lt;br /&gt;
* [[Infrastructure Resilience]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* ISO 31000 – Risk Management Guidelines&lt;br /&gt;
* ISO 9001 – Quality Management Systems&lt;br /&gt;
* ISO 27001 – Information Security Management Systems&lt;br /&gt;
* NIST Risk Management Framework (RMF)&lt;br /&gt;
* NIST Cybersecurity Framework (CSF)&lt;br /&gt;
* COBIT Governance Framework&lt;br /&gt;
* PMI Project Management Body of Knowledge (PMBOK)&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Security_Operations_(SecOps)&amp;diff=427</id>
		<title>Security Operations (SecOps)</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Security_Operations_(SecOps)&amp;diff=427"/>
		<updated>2026-07-06T06:42:20Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039;  Security Operations (SecOps) is the discipline of continuously monitoring, detecting, investigating, and responding to security threats within an organisation&amp;#039;s technology environment. It combines people, processes, and technology to protect business systems, data, infrastructure, and services from attack while maintaining normal business operations.  == Context ==  Modern organisations face an evolving threat landscape consisting of malware, ransomware,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Security Operations (SecOps) is the discipline of continuously monitoring, detecting, investigating, and responding to security threats within an organisation&#039;s technology environment. It combines people, processes, and technology to protect business systems, data, infrastructure, and services from attack while maintaining normal business operations.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Modern organisations face an evolving threat landscape consisting of malware, ransomware, phishing attacks, credential theft, insider threats, data breaches, and targeted intrusions.&lt;br /&gt;
&lt;br /&gt;
Historically, security was often treated as a separate function from infrastructure and operations teams. As environments became more interconnected and attacks became more sophisticated, organisations increasingly recognised that security must become an operational responsibility rather than an occasional activity.&lt;br /&gt;
&lt;br /&gt;
Security Operations emerged as the practical discipline responsible for the day-to-day defence of information systems.&lt;br /&gt;
&lt;br /&gt;
Common challenges include:&lt;br /&gt;
&lt;br /&gt;
* Alert fatigue&lt;br /&gt;
* Incomplete visibility&lt;br /&gt;
* Misconfigured security controls&lt;br /&gt;
* Delayed incident response&lt;br /&gt;
* Lack of skilled personnel&lt;br /&gt;
* Insufficient logging and monitoring&lt;br /&gt;
&lt;br /&gt;
== What is Security Operations? ==&lt;br /&gt;
&lt;br /&gt;
Security Operations is the continuous process of protecting organisational assets through monitoring, analysis, investigation, response, and improvement.&lt;br /&gt;
&lt;br /&gt;
A mature SecOps capability focuses on:&lt;br /&gt;
&lt;br /&gt;
* Detecting malicious activity&lt;br /&gt;
* Investigating suspicious behaviour&lt;br /&gt;
* Responding to incidents&lt;br /&gt;
* Recovering affected systems&lt;br /&gt;
* Improving defensive controls&lt;br /&gt;
&lt;br /&gt;
Security Operations differs from compliance activities because it is focused on actively managing real-world threats rather than simply meeting regulatory requirements.&lt;br /&gt;
&lt;br /&gt;
== Core SecOps Functions ==&lt;br /&gt;
&lt;br /&gt;
=== Monitoring ===&lt;br /&gt;
&lt;br /&gt;
Monitoring involves collecting information from infrastructure, applications, network devices, cloud services, and security products.&lt;br /&gt;
&lt;br /&gt;
Sources commonly include:&lt;br /&gt;
&lt;br /&gt;
* Firewalls&lt;br /&gt;
* Endpoint protection platforms&lt;br /&gt;
* Servers&lt;br /&gt;
* Identity systems&lt;br /&gt;
* Cloud services&lt;br /&gt;
* Network devices&lt;br /&gt;
* Application logs&lt;br /&gt;
&lt;br /&gt;
The objective is to establish visibility across the environment.&lt;br /&gt;
&lt;br /&gt;
=== Detection ===&lt;br /&gt;
&lt;br /&gt;
Detection identifies activity that may indicate malicious behaviour.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Multiple failed logon attempts&lt;br /&gt;
* Suspicious PowerShell execution&lt;br /&gt;
* Malware detections&lt;br /&gt;
* Privilege escalation events&lt;br /&gt;
* Data exfiltration patterns&lt;br /&gt;
* Unusual network traffic&lt;br /&gt;
&lt;br /&gt;
Effective detection combines signatures, behavioural analytics, threat intelligence, and contextual awareness.&lt;br /&gt;
&lt;br /&gt;
=== Investigation ===&lt;br /&gt;
&lt;br /&gt;
Security analysts investigate alerts to determine whether suspicious activity represents a genuine threat.&lt;br /&gt;
&lt;br /&gt;
Typical questions include:&lt;br /&gt;
&lt;br /&gt;
* What happened?&lt;br /&gt;
* When did it occur?&lt;br /&gt;
* Who was affected?&lt;br /&gt;
* How did it happen?&lt;br /&gt;
* What systems were involved?&lt;br /&gt;
* Is the threat still active?&lt;br /&gt;
&lt;br /&gt;
The goal is to separate genuine incidents from false positives.&lt;br /&gt;
&lt;br /&gt;
=== Response ===&lt;br /&gt;
&lt;br /&gt;
Response activities are intended to contain and eradicate threats.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Isolating compromised devices&lt;br /&gt;
* Disabling accounts&lt;br /&gt;
* Blocking malicious IP addresses&lt;br /&gt;
* Removing malware&lt;br /&gt;
* Revoking credentials&lt;br /&gt;
* Applying security patches&lt;br /&gt;
&lt;br /&gt;
Rapid containment often reduces the overall impact of an incident.&lt;br /&gt;
&lt;br /&gt;
=== Recovery ===&lt;br /&gt;
&lt;br /&gt;
Recovery returns services to normal operation.&lt;br /&gt;
&lt;br /&gt;
Activities may include:&lt;br /&gt;
&lt;br /&gt;
* Restoring systems from backup&lt;br /&gt;
* Rebuilding infrastructure&lt;br /&gt;
* Verifying data integrity&lt;br /&gt;
* Monitoring for reinfection&lt;br /&gt;
* Re-enabling services&lt;br /&gt;
&lt;br /&gt;
Recovery should be performed in a controlled and documented manner.&lt;br /&gt;
&lt;br /&gt;
== SecOps Team Roles ==&lt;br /&gt;
&lt;br /&gt;
A mature Security Operations capability may include:&lt;br /&gt;
&lt;br /&gt;
=== Security Analyst ===&lt;br /&gt;
&lt;br /&gt;
Monitors alerts, investigates incidents, and performs triage activities.&lt;br /&gt;
&lt;br /&gt;
=== Incident Responder ===&lt;br /&gt;
&lt;br /&gt;
Coordinates containment, eradication, and recovery efforts.&lt;br /&gt;
&lt;br /&gt;
=== Threat Hunter ===&lt;br /&gt;
&lt;br /&gt;
Proactively searches for evidence of threats that have not yet generated alerts.&lt;br /&gt;
&lt;br /&gt;
=== Security Engineer ===&lt;br /&gt;
&lt;br /&gt;
Implements and maintains security technologies and monitoring platforms.&lt;br /&gt;
&lt;br /&gt;
=== Security Architect ===&lt;br /&gt;
&lt;br /&gt;
Designs secure systems, controls, and defensive strategies.&lt;br /&gt;
&lt;br /&gt;
== Security Operations Centre (SOC) ==&lt;br /&gt;
&lt;br /&gt;
A Security Operations Centre (SOC) is the operational hub responsible for monitoring and protecting organisational systems.&lt;br /&gt;
&lt;br /&gt;
A SOC may be:&lt;br /&gt;
&lt;br /&gt;
* Internal&lt;br /&gt;
* Outsourced&lt;br /&gt;
* Hybrid&lt;br /&gt;
&lt;br /&gt;
A typical SOC continuously monitors security telemetry and coordinates incident response activities.&lt;br /&gt;
&lt;br /&gt;
=== Simplified SOC Overview ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+-------------+&lt;br /&gt;
| Endpoints   |&lt;br /&gt;
+-------------+&lt;br /&gt;
       |&lt;br /&gt;
       v&lt;br /&gt;
+-------------+&lt;br /&gt;
| Log Sources |&lt;br /&gt;
+-------------+&lt;br /&gt;
       |&lt;br /&gt;
       v&lt;br /&gt;
+-------------+&lt;br /&gt;
|   SIEM      |&lt;br /&gt;
+-------------+&lt;br /&gt;
       |&lt;br /&gt;
       v&lt;br /&gt;
+-------------+&lt;br /&gt;
| Analysts    |&lt;br /&gt;
+-------------+&lt;br /&gt;
       |&lt;br /&gt;
       v&lt;br /&gt;
+-------------+&lt;br /&gt;
| Response    |&lt;br /&gt;
+-------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Security Technologies Used in SecOps ==&lt;br /&gt;
&lt;br /&gt;
Common technologies include:&lt;br /&gt;
&lt;br /&gt;
=== SIEM ===&lt;br /&gt;
&lt;br /&gt;
Security Information and Event Management platforms aggregate and analyse security events from multiple sources.&lt;br /&gt;
&lt;br /&gt;
=== EDR ===&lt;br /&gt;
&lt;br /&gt;
Endpoint Detection and Response platforms provide visibility and response capabilities for workstations and servers.&lt;br /&gt;
&lt;br /&gt;
=== SOAR ===&lt;br /&gt;
&lt;br /&gt;
Security Orchestration, Automation and Response platforms automate repetitive security tasks.&lt;br /&gt;
&lt;br /&gt;
=== IDS/IPS ===&lt;br /&gt;
&lt;br /&gt;
Intrusion Detection and Prevention Systems identify suspicious network activity.&lt;br /&gt;
&lt;br /&gt;
=== Threat Intelligence Platforms ===&lt;br /&gt;
&lt;br /&gt;
Provide information regarding known indicators of compromise and emerging threats.&lt;br /&gt;
&lt;br /&gt;
== Event to Incident Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
Not every event becomes an incident.&lt;br /&gt;
&lt;br /&gt;
A typical progression is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Event&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Alert&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Investigation&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Incident&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Response&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Recovery&lt;br /&gt;
  |&lt;br /&gt;
  v&lt;br /&gt;
Lessons Learned&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The final stage is critical because improvements made after incidents strengthen future defences.&lt;br /&gt;
&lt;br /&gt;
== Practical Security Operations Workflow ==&lt;br /&gt;
&lt;br /&gt;
A typical daily workflow may involve:&lt;br /&gt;
&lt;br /&gt;
# Reviewing security dashboards&lt;br /&gt;
# Investigating alerts&lt;br /&gt;
# Correlating evidence&lt;br /&gt;
# Escalating incidents&lt;br /&gt;
# Implementing containment actions&lt;br /&gt;
# Conducting root cause analysis&lt;br /&gt;
# Updating detection rules&lt;br /&gt;
# Producing management reports&lt;br /&gt;
&lt;br /&gt;
Mature organisations continuously refine this cycle.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Alert Fatigue ===&lt;br /&gt;
&lt;br /&gt;
Analysts become overwhelmed by excessive alerts, leading to missed threats.&lt;br /&gt;
&lt;br /&gt;
=== Excessive Tooling ===&lt;br /&gt;
&lt;br /&gt;
Deploying too many security products without integration can reduce effectiveness.&lt;br /&gt;
&lt;br /&gt;
=== Poor Visibility ===&lt;br /&gt;
&lt;br /&gt;
Blind spots in logging and monitoring prevent effective detection.&lt;br /&gt;
&lt;br /&gt;
=== Lack of Documentation ===&lt;br /&gt;
&lt;br /&gt;
Inconsistent processes increase response times during incidents.&lt;br /&gt;
&lt;br /&gt;
=== Reactive Security ===&lt;br /&gt;
&lt;br /&gt;
Focusing only on active incidents while neglecting proactive improvements creates long-term risk.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
When designing a Security Operations capability, consider:&lt;br /&gt;
&lt;br /&gt;
=== Scalability ===&lt;br /&gt;
&lt;br /&gt;
Monitoring solutions must support organisational growth.&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
Monitoring infrastructure becomes a high-value target and must be protected.&lt;br /&gt;
&lt;br /&gt;
=== Maintainability ===&lt;br /&gt;
&lt;br /&gt;
Security controls should be documented, tested, and regularly reviewed.&lt;br /&gt;
&lt;br /&gt;
=== Automation ===&lt;br /&gt;
&lt;br /&gt;
Routine activities should be automated where practical.&lt;br /&gt;
&lt;br /&gt;
=== Backwards Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Legacy systems often remain critical business assets and may require alternative monitoring approaches.&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
When investigating security monitoring issues:&lt;br /&gt;
&lt;br /&gt;
* Verify log collection&lt;br /&gt;
* Confirm time synchronisation&lt;br /&gt;
* Check alert rules&lt;br /&gt;
* Review data retention&lt;br /&gt;
* Validate network connectivity&lt;br /&gt;
* Confirm agent health&lt;br /&gt;
* Examine system performance&lt;br /&gt;
&lt;br /&gt;
A surprisingly high percentage of security monitoring failures are caused by missing or incomplete telemetry rather than detection logic itself.&lt;br /&gt;
&lt;br /&gt;
== Future Trends ==&lt;br /&gt;
&lt;br /&gt;
Emerging areas influencing Security Operations include:&lt;br /&gt;
&lt;br /&gt;
* Artificial Intelligence&lt;br /&gt;
* Machine Learning&lt;br /&gt;
* Extended Detection and Response (XDR)&lt;br /&gt;
* Cloud-native security monitoring&lt;br /&gt;
* Security automation&lt;br /&gt;
* Zero Trust architectures&lt;br /&gt;
&lt;br /&gt;
These technologies improve visibility and reduce analyst workload, but they do not eliminate the need for skilled security professionals.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Security Information and Event Management]]&lt;br /&gt;
* [[Incident Response]]&lt;br /&gt;
* [[Threat Hunting]]&lt;br /&gt;
* [[Zero Trust]]&lt;br /&gt;
* [[Identity and Access Management]]&lt;br /&gt;
* [[Cybersecurity Architecture]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* NIST Cybersecurity Framework&lt;br /&gt;
* NIST Incident Response Guide&lt;br /&gt;
* MITRE ATT&amp;amp;CK Framework&lt;br /&gt;
* CIS Controls&lt;br /&gt;
* ISO/IEC 27001&lt;br /&gt;
* Vendor documentation&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Information_Security_Management_Systems_(ISMS)&amp;diff=426</id>
		<title>Information Security Management Systems (ISMS)</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Information_Security_Management_Systems_(ISMS)&amp;diff=426"/>
		<updated>2026-07-06T06:41:44Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039;  An Information Security Management System (ISMS) is a structured framework used to identify, manage, reduce, and continually improve information security risks within an organisation. Rather than being a product or technology, an ISMS is a management system that combines people, processes, policies, and technical controls to protect information assets while supporting business objectives.  == Context ==  Organisations rely upon information to conduct busi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
An Information Security Management System (ISMS) is a structured framework used to identify, manage, reduce, and continually improve information security risks within an organisation. Rather than being a product or technology, an ISMS is a management system that combines people, processes, policies, and technical controls to protect information assets while supporting business objectives.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
Organisations rely upon information to conduct business, deliver services, make decisions, and maintain customer trust. Information exists in many forms, including electronic records, paper documents, intellectual property, emails, databases, source code, and verbal communications.&lt;br /&gt;
&lt;br /&gt;
As organisations grow, information becomes increasingly distributed across users, devices, networks, cloud services, suppliers, and customers. This creates additional security risks that must be understood and managed.&lt;br /&gt;
&lt;br /&gt;
An ISMS provides a systematic approach to addressing these risks.&lt;br /&gt;
&lt;br /&gt;
Common drivers for implementing an ISMS include:&lt;br /&gt;
&lt;br /&gt;
* Regulatory compliance&lt;br /&gt;
* Customer requirements&lt;br /&gt;
* Protection of intellectual property&lt;br /&gt;
* Cybersecurity risk reduction&lt;br /&gt;
* Contractual obligations&lt;br /&gt;
* Business continuity planning&lt;br /&gt;
* Demonstrating security maturity&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Information as an Asset ===&lt;br /&gt;
&lt;br /&gt;
An ISMS treats information as a valuable business asset.&lt;br /&gt;
&lt;br /&gt;
Just as organisations protect buildings, equipment, and finances, they must also protect information from:&lt;br /&gt;
&lt;br /&gt;
* Unauthorised disclosure&lt;br /&gt;
* Alteration&lt;br /&gt;
* Destruction&lt;br /&gt;
* Loss&lt;br /&gt;
* Unavailability&lt;br /&gt;
&lt;br /&gt;
Not all information has equal value. One of the first tasks in an ISMS is identifying information assets and understanding their importance to the organisation.&lt;br /&gt;
&lt;br /&gt;
=== The CIA Triad ===&lt;br /&gt;
&lt;br /&gt;
Most information security principles are built upon three core objectives:&lt;br /&gt;
&lt;br /&gt;
* Confidentiality&lt;br /&gt;
* Integrity&lt;br /&gt;
* Availability&lt;br /&gt;
&lt;br /&gt;
==== Confidentiality ====&lt;br /&gt;
&lt;br /&gt;
Information should only be accessible to authorised individuals.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Access controls&lt;br /&gt;
* Encryption&lt;br /&gt;
* Security classifications&lt;br /&gt;
* Need-to-know policies&lt;br /&gt;
&lt;br /&gt;
==== Integrity ====&lt;br /&gt;
&lt;br /&gt;
Information must remain accurate, complete, and trustworthy.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Change control procedures&lt;br /&gt;
* Version management&lt;br /&gt;
* Hash verification&lt;br /&gt;
* Audit trails&lt;br /&gt;
&lt;br /&gt;
==== Availability ====&lt;br /&gt;
&lt;br /&gt;
Information and services must be accessible when required.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Backups&lt;br /&gt;
* Disaster recovery planning&lt;br /&gt;
* High availability systems&lt;br /&gt;
* Capacity management&lt;br /&gt;
&lt;br /&gt;
=== Risk-Based Decision Making ===&lt;br /&gt;
&lt;br /&gt;
An ISMS does not attempt to eliminate all risk.&lt;br /&gt;
&lt;br /&gt;
Instead, it seeks to:&lt;br /&gt;
&lt;br /&gt;
# Identify risks&lt;br /&gt;
# Assess their likelihood and impact&lt;br /&gt;
# Apply appropriate controls&lt;br /&gt;
# Accept, transfer, mitigate, or avoid the risk&lt;br /&gt;
&lt;br /&gt;
This risk-based approach ensures resources are spent where they deliver the greatest value.&lt;br /&gt;
&lt;br /&gt;
== ISMS Lifecycle ==&lt;br /&gt;
&lt;br /&gt;
An ISMS is a continuous cycle rather than a one-time implementation.&lt;br /&gt;
&lt;br /&gt;
The process is often represented using the Plan-Do-Check-Act (PDCA) model.&lt;br /&gt;
&lt;br /&gt;
=== Plan ===&lt;br /&gt;
&lt;br /&gt;
Identify:&lt;br /&gt;
&lt;br /&gt;
* Information assets&lt;br /&gt;
* Security risks&lt;br /&gt;
* Legal requirements&lt;br /&gt;
* Business requirements&lt;br /&gt;
&lt;br /&gt;
Define:&lt;br /&gt;
&lt;br /&gt;
* Security objectives&lt;br /&gt;
* Policies&lt;br /&gt;
* Controls&lt;br /&gt;
* Responsibilities&lt;br /&gt;
&lt;br /&gt;
=== Do ===&lt;br /&gt;
&lt;br /&gt;
Implement controls and procedures.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Access control policies&lt;br /&gt;
* Training programmes&lt;br /&gt;
* Backup systems&lt;br /&gt;
* Incident response procedures&lt;br /&gt;
* Supplier management processes&lt;br /&gt;
&lt;br /&gt;
=== Check ===&lt;br /&gt;
&lt;br /&gt;
Evaluate effectiveness through:&lt;br /&gt;
&lt;br /&gt;
* Audits&lt;br /&gt;
* Monitoring&lt;br /&gt;
* Security reviews&lt;br /&gt;
* Risk assessments&lt;br /&gt;
* Management reviews&lt;br /&gt;
&lt;br /&gt;
=== Act ===&lt;br /&gt;
&lt;br /&gt;
Make improvements based on findings.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Updating security controls&lt;br /&gt;
* Revising policies&lt;br /&gt;
* Addressing audit observations&lt;br /&gt;
* Introducing new security measures&lt;br /&gt;
&lt;br /&gt;
== Risk Assessment ==&lt;br /&gt;
&lt;br /&gt;
Risk assessment forms the foundation of an ISMS.&lt;br /&gt;
&lt;br /&gt;
A simple model can be expressed as:&lt;br /&gt;
&lt;br /&gt;
Risk = Likelihood × Impact&lt;br /&gt;
&lt;br /&gt;
For each identified risk, the organisation evaluates:&lt;br /&gt;
&lt;br /&gt;
* What could happen?&lt;br /&gt;
* How likely is it?&lt;br /&gt;
* What would the consequences be?&lt;br /&gt;
* Are existing controls sufficient?&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
A company stores customer records on a file server.&lt;br /&gt;
&lt;br /&gt;
Potential risk:&lt;br /&gt;
* Ransomware encrypts the server.&lt;br /&gt;
&lt;br /&gt;
Impact:&lt;br /&gt;
* High&lt;br /&gt;
&lt;br /&gt;
Likelihood:&lt;br /&gt;
* Medium&lt;br /&gt;
&lt;br /&gt;
Existing controls:&lt;br /&gt;
* Endpoint protection&lt;br /&gt;
* Backups&lt;br /&gt;
* User training&lt;br /&gt;
&lt;br /&gt;
Residual risk:&lt;br /&gt;
* Reduced but not eliminated&lt;br /&gt;
&lt;br /&gt;
== Controls ==&lt;br /&gt;
&lt;br /&gt;
Controls are measures used to reduce risk.&lt;br /&gt;
&lt;br /&gt;
They generally fall into three categories.&lt;br /&gt;
&lt;br /&gt;
=== Administrative Controls ===&lt;br /&gt;
&lt;br /&gt;
People and process focused.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Policies&lt;br /&gt;
* Procedures&lt;br /&gt;
* Security awareness training&lt;br /&gt;
* Supplier agreements&lt;br /&gt;
* Change management&lt;br /&gt;
&lt;br /&gt;
=== Technical Controls ===&lt;br /&gt;
&lt;br /&gt;
Implemented through technology.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Firewalls&lt;br /&gt;
* Multi-factor authentication&lt;br /&gt;
* Anti-malware solutions&lt;br /&gt;
* Encryption&lt;br /&gt;
* Security monitoring&lt;br /&gt;
&lt;br /&gt;
=== Physical Controls ===&lt;br /&gt;
&lt;br /&gt;
Designed to protect physical assets.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
* Locks&lt;br /&gt;
* Access cards&lt;br /&gt;
* CCTV&lt;br /&gt;
* Secure storage&lt;br /&gt;
* Environmental monitoring&lt;br /&gt;
&lt;br /&gt;
== ISO 27001 and the ISMS ==&lt;br /&gt;
&lt;br /&gt;
The most widely recognised ISMS standard is ISO/IEC 27001.&lt;br /&gt;
&lt;br /&gt;
ISO 27001 provides a framework for establishing, implementing, maintaining, and continually improving an ISMS.&lt;br /&gt;
&lt;br /&gt;
The standard does not prescribe specific technologies.&lt;br /&gt;
&lt;br /&gt;
Instead, it focuses on:&lt;br /&gt;
&lt;br /&gt;
* Governance&lt;br /&gt;
* Risk management&lt;br /&gt;
* Policies&lt;br /&gt;
* Responsibilities&lt;br /&gt;
* Evidence of effectiveness&lt;br /&gt;
* Continuous improvement&lt;br /&gt;
&lt;br /&gt;
Certification demonstrates that an organisation has established a structured and auditable approach to information security management.&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Treating the ISMS as a Documentation Exercise ===&lt;br /&gt;
&lt;br /&gt;
Policies alone do not improve security.&lt;br /&gt;
&lt;br /&gt;
An ISMS must be embedded into day-to-day business operations.&lt;br /&gt;
&lt;br /&gt;
=== Focusing Only on Technology ===&lt;br /&gt;
&lt;br /&gt;
Technology is only one component of security.&lt;br /&gt;
&lt;br /&gt;
People and processes are often responsible for the largest security failures.&lt;br /&gt;
&lt;br /&gt;
=== Implementing Controls Without Risk Assessment ===&lt;br /&gt;
&lt;br /&gt;
Controls should address identified risks.&lt;br /&gt;
&lt;br /&gt;
Deploying security measures without understanding the threats can waste resources and create operational friction.&lt;br /&gt;
&lt;br /&gt;
=== Lack of Management Support ===&lt;br /&gt;
&lt;br /&gt;
An ISMS requires leadership involvement.&lt;br /&gt;
&lt;br /&gt;
Without management commitment, policies often become ineffective and compliance deteriorates.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
When designing an ISMS, organisations should consider:&lt;br /&gt;
&lt;br /&gt;
=== Scalability ===&lt;br /&gt;
&lt;br /&gt;
The ISMS should grow with the organisation.&lt;br /&gt;
&lt;br /&gt;
=== Maintainability ===&lt;br /&gt;
&lt;br /&gt;
Policies and procedures should remain practical and achievable.&lt;br /&gt;
&lt;br /&gt;
=== Security by Design ===&lt;br /&gt;
&lt;br /&gt;
Security should be incorporated into projects and systems from the beginning rather than added later.&lt;br /&gt;
&lt;br /&gt;
=== Integration ===&lt;br /&gt;
&lt;br /&gt;
The ISMS should integrate with:&lt;br /&gt;
&lt;br /&gt;
* Quality Management Systems (QMS)&lt;br /&gt;
* Business Continuity Management (BCMS)&lt;br /&gt;
* IT Service Management (ITSM)&lt;br /&gt;
* Risk Management frameworks&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
Indicators that an ISMS may not be functioning effectively include:&lt;br /&gt;
&lt;br /&gt;
* Repeated security incidents&lt;br /&gt;
* Audit findings that reoccur&lt;br /&gt;
* Incomplete risk assessments&lt;br /&gt;
* Outdated policies&lt;br /&gt;
* Poor staff security awareness&lt;br /&gt;
* Lack of evidence for implemented controls&lt;br /&gt;
&lt;br /&gt;
Useful diagnostic activities include:&lt;br /&gt;
&lt;br /&gt;
* Internal audits&lt;br /&gt;
* Security reviews&lt;br /&gt;
* Incident trend analysis&lt;br /&gt;
* Policy compliance assessments&lt;br /&gt;
* Management review meetings&lt;br /&gt;
&lt;br /&gt;
== Benefits of an ISMS ==&lt;br /&gt;
&lt;br /&gt;
A mature ISMS can provide:&lt;br /&gt;
&lt;br /&gt;
* Improved risk visibility&lt;br /&gt;
* Better regulatory compliance&lt;br /&gt;
* Increased customer confidence&lt;br /&gt;
* Improved incident response capability&lt;br /&gt;
* Reduced likelihood of security breaches&lt;br /&gt;
* Better governance and accountability&lt;br /&gt;
* Continuous organisational improvement&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[ISO 27001]]&lt;br /&gt;
* [[Risk Management]]&lt;br /&gt;
* [[Information Classification]]&lt;br /&gt;
* [[Business Continuity Management]]&lt;br /&gt;
* [[Incident Response]]&lt;br /&gt;
* [[Security Controls]]&lt;br /&gt;
* [[Access Control]]&lt;br /&gt;
* [[Data Protection]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* ISO/IEC 27001&lt;br /&gt;
* ISO/IEC 27002&lt;br /&gt;
* ISO 31000 Risk Management&lt;br /&gt;
* NIST Cybersecurity Framework&lt;br /&gt;
* CIS Controls&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
	<entry>
		<id>https://knowledgebase.pirho.net/index.php?title=Multi-Factor_Authentication_(MFA)&amp;diff=425</id>
		<title>Multi-Factor Authentication (MFA)</title>
		<link rel="alternate" type="text/html" href="https://knowledgebase.pirho.net/index.php?title=Multi-Factor_Authentication_(MFA)&amp;diff=425"/>
		<updated>2026-07-06T06:39:27Z</updated>

		<summary type="html">&lt;p&gt;Dex: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Summary:&amp;#039;&amp;#039;&amp;#039; Multi-Factor Authentication (MFA) is a security mechanism that requires users to present two or more independent forms of authentication before access is granted. MFA significantly reduces the risk of compromise caused by stolen passwords and has become a fundamental component of modern identity and access management strategies.  == Context ==  For many years, usernames and passwords were the primary method of authentication. While simple and widely suppor...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Summary:&#039;&#039;&#039;&lt;br /&gt;
Multi-Factor Authentication (MFA) is a security mechanism that requires users to present two or more independent forms of authentication before access is granted. MFA significantly reduces the risk of compromise caused by stolen passwords and has become a fundamental component of modern identity and access management strategies.&lt;br /&gt;
&lt;br /&gt;
== Context ==&lt;br /&gt;
&lt;br /&gt;
For many years, usernames and passwords were the primary method of authentication. While simple and widely supported, passwords alone suffer from numerous weaknesses including phishing, password reuse, credential stuffing, brute force attacks, and accidental disclosure.&lt;br /&gt;
&lt;br /&gt;
MFA addresses these weaknesses by requiring additional evidence that the user is who they claim to be.&lt;br /&gt;
&lt;br /&gt;
A successful MFA implementation can greatly reduce the likelihood that a compromised password alone will result in unauthorized access.&lt;br /&gt;
&lt;br /&gt;
=== Real-World Usage ===&lt;br /&gt;
&lt;br /&gt;
MFA is commonly used for:&lt;br /&gt;
&lt;br /&gt;
* Microsoft 365&lt;br /&gt;
* Cloud services&lt;br /&gt;
* Virtual Private Networks (VPNs)&lt;br /&gt;
* Remote Desktop Services (RDS)&lt;br /&gt;
* Administrative accounts&lt;br /&gt;
* Banking platforms&lt;br /&gt;
* Customer portals&lt;br /&gt;
* Privileged infrastructure access&lt;br /&gt;
&lt;br /&gt;
=== Common Misconceptions ===&lt;br /&gt;
&lt;br /&gt;
* MFA makes systems impossible to compromise.&lt;br /&gt;
* MFA only applies to cloud platforms.&lt;br /&gt;
* SMS-based MFA is always secure.&lt;br /&gt;
* MFA eliminates the need for strong passwords.&lt;br /&gt;
* MFA is only required for administrators.&lt;br /&gt;
&lt;br /&gt;
In reality, MFA significantly increases security but remains one layer within a broader defence strategy.&lt;br /&gt;
&lt;br /&gt;
=== Typical Failure Points ===&lt;br /&gt;
&lt;br /&gt;
* Users enrolling incorrect devices.&lt;br /&gt;
* Lost or replaced mobiles.&lt;br /&gt;
* Poor recovery procedures.&lt;br /&gt;
* Legacy applications that cannot perform modern authentication.&lt;br /&gt;
* Overreliance on SMS authentication.&lt;br /&gt;
* MFA fatigue attacks.&lt;br /&gt;
&lt;br /&gt;
== Core Concepts ==&lt;br /&gt;
&lt;br /&gt;
=== Authentication Factors ===&lt;br /&gt;
&lt;br /&gt;
Authentication factors are traditionally divided into categories:&lt;br /&gt;
&lt;br /&gt;
==== Something You Know ====&lt;br /&gt;
&lt;br /&gt;
Knowledge-based factors include:&lt;br /&gt;
&lt;br /&gt;
* Passwords&lt;br /&gt;
* PIN numbers&lt;br /&gt;
* Security phrases&lt;br /&gt;
&lt;br /&gt;
==== Something You Have ====&lt;br /&gt;
&lt;br /&gt;
Possession-based factors include:&lt;br /&gt;
&lt;br /&gt;
* Mobile authentication applications&lt;br /&gt;
* Hardware tokens&lt;br /&gt;
* Smart cards&lt;br /&gt;
* FIDO2 security keys&lt;br /&gt;
&lt;br /&gt;
==== Something You Are ====&lt;br /&gt;
&lt;br /&gt;
Biometric factors include:&lt;br /&gt;
&lt;br /&gt;
* Fingerprints&lt;br /&gt;
* Facial recognition&lt;br /&gt;
* Iris recognition&lt;br /&gt;
* Voice recognition&lt;br /&gt;
&lt;br /&gt;
=== Multi-Factor vs Two-Factor Authentication ===&lt;br /&gt;
&lt;br /&gt;
Two-Factor Authentication (2FA) requires two distinct factors.&lt;br /&gt;
&lt;br /&gt;
Multi-Factor Authentication extends this concept and may require multiple independent factors depending on policy, risk level, location, or device trust.&lt;br /&gt;
&lt;br /&gt;
All 2FA implementations are MFA, but not all MFA implementations are limited to two factors.&lt;br /&gt;
&lt;br /&gt;
== Core Authentication Methods ==&lt;br /&gt;
&lt;br /&gt;
=== SMS One-Time Passcodes ===&lt;br /&gt;
&lt;br /&gt;
The user receives a temporary verification code by text message.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Simple deployment&lt;br /&gt;
* No application installation required&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Vulnerable to SIM-swap attacks&lt;br /&gt;
* Dependent on mobile coverage&lt;br /&gt;
* Less secure than modern alternatives&lt;br /&gt;
&lt;br /&gt;
=== Authenticator Applications ===&lt;br /&gt;
&lt;br /&gt;
Applications generate time-based one-time passcodes (TOTP).&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Microsoft Authenticator&lt;br /&gt;
* Google Authenticator&lt;br /&gt;
* Authy&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* More secure than SMS&lt;br /&gt;
* Works offline&lt;br /&gt;
* Simple user experience&lt;br /&gt;
&lt;br /&gt;
=== Push Notifications ===&lt;br /&gt;
&lt;br /&gt;
The user receives an approval request on a registered device.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* User friendly&lt;br /&gt;
* Fast authentication process&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Vulnerable to MFA fatigue attacks if poorly configured&lt;br /&gt;
&lt;br /&gt;
=== Hardware Security Keys ===&lt;br /&gt;
&lt;br /&gt;
Physical authentication devices based on standards such as FIDO2 and WebAuthn.&lt;br /&gt;
&lt;br /&gt;
Advantages:&lt;br /&gt;
&lt;br /&gt;
* Resistant to phishing&lt;br /&gt;
* Strong cryptographic protection&lt;br /&gt;
* No reliance on cellular networks&lt;br /&gt;
&lt;br /&gt;
Disadvantages:&lt;br /&gt;
&lt;br /&gt;
* Hardware cost&lt;br /&gt;
* Device management requirements&lt;br /&gt;
&lt;br /&gt;
=== Smart Cards and Certificates ===&lt;br /&gt;
&lt;br /&gt;
Widely used in government, healthcare, military, and enterprise environments.&lt;br /&gt;
&lt;br /&gt;
Authentication is based upon possession of a certificate and associated private key.&lt;br /&gt;
&lt;br /&gt;
== Practical Application ==&lt;br /&gt;
&lt;br /&gt;
=== Small Business Deployment ===&lt;br /&gt;
&lt;br /&gt;
A typical deployment may require:&lt;br /&gt;
&lt;br /&gt;
* Password&lt;br /&gt;
* Mobile authenticator application&lt;br /&gt;
* Recovery methods&lt;br /&gt;
&lt;br /&gt;
This provides substantial protection with minimal infrastructure requirements.&lt;br /&gt;
&lt;br /&gt;
=== Enterprise Deployment ===&lt;br /&gt;
&lt;br /&gt;
Larger organizations often combine:&lt;br /&gt;
&lt;br /&gt;
* Conditional Access policies&lt;br /&gt;
* Device compliance checks&lt;br /&gt;
* MFA enforcement&lt;br /&gt;
* Identity protection systems&lt;br /&gt;
* Privileged access controls&lt;br /&gt;
&lt;br /&gt;
Access decisions become risk-based rather than relying solely on static credentials.&lt;br /&gt;
&lt;br /&gt;
=== Administrative Accounts ===&lt;br /&gt;
&lt;br /&gt;
Administrative accounts should always be protected by MFA.&lt;br /&gt;
&lt;br /&gt;
Recommended approaches include:&lt;br /&gt;
&lt;br /&gt;
* Hardware security keys&lt;br /&gt;
* Certificate-based authentication&lt;br /&gt;
* Dedicated administrative accounts&lt;br /&gt;
* Privileged access workstations&lt;br /&gt;
&lt;br /&gt;
== Common Pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Treating MFA as a Silver Bullet ===&lt;br /&gt;
&lt;br /&gt;
MFA is highly effective but does not prevent:&lt;br /&gt;
&lt;br /&gt;
* Malware infections&lt;br /&gt;
* Session hijacking&lt;br /&gt;
* Insider threats&lt;br /&gt;
* Compromised endpoints&lt;br /&gt;
&lt;br /&gt;
=== Weak Recovery Processes ===&lt;br /&gt;
&lt;br /&gt;
Many organizations secure authentication but leave account recovery procedures vulnerable.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* Helpdesk password resets without verification&lt;br /&gt;
* Shared recovery email addresses&lt;br /&gt;
* Uncontrolled break-glass accounts&lt;br /&gt;
&lt;br /&gt;
=== MFA Fatigue Attacks ===&lt;br /&gt;
&lt;br /&gt;
Attackers repeatedly trigger authentication prompts hoping users will eventually approve one.&lt;br /&gt;
&lt;br /&gt;
Mitigations include:&lt;br /&gt;
&lt;br /&gt;
* Number matching&lt;br /&gt;
* Geographic verification&lt;br /&gt;
* User training&lt;br /&gt;
* Risk-based sign-in controls&lt;br /&gt;
&lt;br /&gt;
=== Legacy Systems ===&lt;br /&gt;
&lt;br /&gt;
Older applications may rely on:&lt;br /&gt;
&lt;br /&gt;
* Basic authentication&lt;br /&gt;
* POP3&lt;br /&gt;
* IMAP&lt;br /&gt;
* Legacy APIs&lt;br /&gt;
&lt;br /&gt;
These systems often require modernization before MFA can be fully implemented.&lt;br /&gt;
&lt;br /&gt;
== Design &amp;amp; Architecture Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Security ===&lt;br /&gt;
&lt;br /&gt;
Prioritize phishing-resistant authentication where possible.&lt;br /&gt;
&lt;br /&gt;
Preferred order:&lt;br /&gt;
&lt;br /&gt;
# FIDO2 Security Keys&lt;br /&gt;
# Certificate-Based Authentication&lt;br /&gt;
# Authenticator Applications&lt;br /&gt;
# SMS Authentication&lt;br /&gt;
&lt;br /&gt;
=== Scalability ===&lt;br /&gt;
&lt;br /&gt;
Consider:&lt;br /&gt;
&lt;br /&gt;
* Enrollment processes&lt;br /&gt;
* Device lifecycle management&lt;br /&gt;
* Self-service registration&lt;br /&gt;
* Self-service password reset&lt;br /&gt;
&lt;br /&gt;
=== Maintainability ===&lt;br /&gt;
&lt;br /&gt;
Successful deployments require:&lt;br /&gt;
&lt;br /&gt;
* Documented procedures&lt;br /&gt;
* User training&lt;br /&gt;
* Disaster recovery planning&lt;br /&gt;
* Recovery code management&lt;br /&gt;
&lt;br /&gt;
=== Backwards Compatibility ===&lt;br /&gt;
&lt;br /&gt;
Some environments must support legacy systems temporarily.&lt;br /&gt;
&lt;br /&gt;
Where modernization is not immediately possible:&lt;br /&gt;
&lt;br /&gt;
* Isolate legacy systems&lt;br /&gt;
* Restrict network access&lt;br /&gt;
* Monitor authentication activity&lt;br /&gt;
* Plan migration away from legacy protocols&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting &amp;amp; Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
=== User Cannot Receive Authentication Prompt ===&lt;br /&gt;
&lt;br /&gt;
Check:&lt;br /&gt;
&lt;br /&gt;
* Device registration status&lt;br /&gt;
* Internet connectivity&lt;br /&gt;
* Authenticator application health&lt;br /&gt;
* Notification permissions&lt;br /&gt;
&lt;br /&gt;
=== User Replaced Their Mobile Device ===&lt;br /&gt;
&lt;br /&gt;
Verify:&lt;br /&gt;
&lt;br /&gt;
* Recovery methods exist&lt;br /&gt;
* Secondary authentication factors are available&lt;br /&gt;
* Enrollment process is documented&lt;br /&gt;
&lt;br /&gt;
=== Authentication Works for Some Services Only ===&lt;br /&gt;
&lt;br /&gt;
Investigate:&lt;br /&gt;
&lt;br /&gt;
* Conditional Access policies&lt;br /&gt;
* Legacy authentication usage&lt;br /&gt;
* Application compatibility&lt;br /&gt;
* Federation configuration&lt;br /&gt;
&lt;br /&gt;
=== Unexpected MFA Challenges ===&lt;br /&gt;
&lt;br /&gt;
Review:&lt;br /&gt;
&lt;br /&gt;
* User location&lt;br /&gt;
* Device trust state&lt;br /&gt;
* Risk policies&lt;br /&gt;
* Recent identity protection alerts&lt;br /&gt;
&lt;br /&gt;
== Architectural Overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+------------------+&lt;br /&gt;
| User             |&lt;br /&gt;
+--------+---------+&lt;br /&gt;
         |&lt;br /&gt;
         v&lt;br /&gt;
+------------------+&lt;br /&gt;
| Identity System  |&lt;br /&gt;
| (Azure AD / IdP) |&lt;br /&gt;
+--------+---------+&lt;br /&gt;
         |&lt;br /&gt;
         v&lt;br /&gt;
+------------------+&lt;br /&gt;
| Password Check   |&lt;br /&gt;
+--------+---------+&lt;br /&gt;
         |&lt;br /&gt;
         v&lt;br /&gt;
+------------------+&lt;br /&gt;
| MFA Challenge    |&lt;br /&gt;
| Push / Token     |&lt;br /&gt;
| Key / Biometrics |&lt;br /&gt;
+--------+---------+&lt;br /&gt;
         |&lt;br /&gt;
         v&lt;br /&gt;
+------------------+&lt;br /&gt;
| Access Granted   |&lt;br /&gt;
+------------------+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Best Practices ==&lt;br /&gt;
&lt;br /&gt;
* Enforce MFA for all users.&lt;br /&gt;
* Require stronger methods for privileged accounts.&lt;br /&gt;
* Use phishing-resistant authentication where possible.&lt;br /&gt;
* Disable legacy authentication protocols.&lt;br /&gt;
* Implement Conditional Access policies.&lt;br /&gt;
* Test account recovery procedures regularly.&lt;br /&gt;
* Monitor sign-in logs and authentication anomalies.&lt;br /&gt;
* Educate users about phishing and MFA fatigue attacks.&lt;br /&gt;
&lt;br /&gt;
== Related Topics ==&lt;br /&gt;
&lt;br /&gt;
* [[Identity and Access Management]]&lt;br /&gt;
* [[Conditional Access]]&lt;br /&gt;
* [[Single Sign-On]]&lt;br /&gt;
* [[Passwordless Authentication]]&lt;br /&gt;
* [[Public Key Infrastructure]]&lt;br /&gt;
* [[Zero Trust Architecture]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* FIDO2 Specifications&lt;br /&gt;
* WebAuthn Standards&lt;br /&gt;
* NIST Digital Identity Guidelines&lt;br /&gt;
* Microsoft Entra ID Documentation&lt;br /&gt;
* RFC 6238 (Time-Based One-Time Password Algorithm)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Category: Security&lt;br /&gt;
Audience: Technical / Architectural&lt;br /&gt;
Depth: Intermediate&lt;br /&gt;
Last Reviewed: 2026-07-06&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dex</name></author>
	</entry>
</feed>