Micro-Frontends: A Sociotechnical Journey Toward a Modern Frontend Architecture

Mike's Notes

A good way to think of this. It's added clarity to Pipi UI's architecture, so I need to make a tiny change to the CMS Engine, etc. Thanks, Luca.

The CMS Engine datamodel > page_section needed an additional column for the workflow process run by a specific team, agent or system.

30 minutes thinking, 1 minute coding. Done 😁

Now

Page > Module > Component

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library > Subscriptions > InfoQ Weekly Digest
  • Home > Handbook > 

Last Updated

28/11/2025

Micro-Frontends: A Sociotechnical Journey Toward a Modern Frontend Architecture

By: Luca Mezzalira
InfoQ: 24/11/2025

Principal Serverless Specialist Solutions Architect @AWS.

Luca Mezzalira is a Principal Solutions Architect and the author of Building Micro-Frontends. He helps organizations design evolutionary architectures and leads modernization programs for global engineering teams. Luca is also the host of the Micro-Frontends in the Trenches podcast, where he explores the future of distributed frontend systems getting deeper into heuristics, pitfalls, and lessons learned from teams that turned this architectural evolution into a competitive advantage. The podcast can be listened to on Spotify, Apple Podcasts or YouTube

  • Micro-frontends are different from components. Components are abstraction mechanisms designed for standardisation and reuse, while micro-frontends optimise for autonomy and flow.
  • Micro-frontends are not a technical pattern, but a sociotechnical shift mirroring Conway’s law.
  • The micro-frontends migration is not a binary decision but a continuum. The migration should start where autonomy brings the most value. The architecture needs to be aligned with the team structure.
  • Embrace duplication when it accelerates flow and favours iterative delivery over big rewrites. 
  • The first micro-frontend should go end-to-end: from design and development through deployment and observability. That vertical slice will surface every challenge you’ll face later - routing, shared dependencies, authentication, monitoring - on a scale that’s still manageable. 

For years, distributed systems have defined how we think about backend architecture. We’ve learned to break apart monoliths into independently deployable services, embracing autonomy, faster feedback, and continuous change. But on the frontend, many organisations are still trapped in the same cycle we escaped on the backend: large codebases that slow teams down, coupled deployments that introduce risk, and interfaces so entangled that any change becomes an exercise in fear management.

The rise of micro-frontends is not simply a reaction to this pain; it’s part of a deeper sociotechnical evolution. The same forces that once drove backend modularisation are now reshaping the frontend. As organisations demand faster delivery, greater autonomy, and continuous modernisation, our frontend architectures must evolve in step with our teams.

The distributed frontend era is here, but it’s not defined by new frameworks or fancy tooling. It’s defined by the way we align people, processes, and architecture around a shared goal: delivering value faster without losing control.

In this article, you’ll learn when micro-frontends make sense, how to evolve existing systems safely, and how to handle cross-cutting concerns like routing, state, and user experience without disrupting delivery. The goal is to show how micro-frontends represent not a trend, but a natural sociotechnical evolution.


Multiple teams working together on the same UI leveraging the independent nature of micro-frontends

Rethinking Micro-Frontends

This article focuses on architectural principles rather than any specific framework or vendor solution.

Micro-frontends are often introduced as a technical pattern - a way to break a large frontend into smaller, independently deployable pieces. But that framing misses the point. Micro-frontends are not a new stack; they are a new way of structuring work. They represent a sociotechnical shift - one that mirrors Conway’s Law, which tells us that system design reflects communication structures.

When teams are forced to coordinate through a single release train, decision-making slows. When every change requires syncing across multiple domains, creativity fades. The result is not just technical debt but organisational inertia. Micro-frontends reverse that dynamic. They allow teams to own slices of the product end-to-end - domain, design, delivery - without waiting for centralised approval.

It’s also essential to distinguish micro-frontends from components. Components are a software abstraction mechanism designed to standardise and reuse behaviours or interfaces within a single application or shared ecosystem. They optimise consistency and maintainability. Micro-frontends, instead, maximise independence and flow. They exist to reduce cognitive load, enable teams to make decisions autonomously, and accelerate delivery by removing cross-team dependencies. As a result, micro-frontends operate at a much coarser granularity than components. Where components encapsulate behaviours, micro-frontends encapsulate responsibility, for example, a complete vertical slice of the system owned and operated by a single team.

That autonomy doesn’t come for free. Distributed systems always bring complexity. But when applied thoughtfully, micro-frontends unlock a kind of evolutionary architecture that’s been missing from the client side: the ability to change direction safely and iteratively, at the speed of the business.

When Micro-Frontends Make Sense

Not every system needs to be decomposed. A small product built by a single team can thrive perfectly well with a modular monolith. The signal that you may need micro-frontends is rarely technical - it’s organisational.

If your release cadence slows down as your team grows, if changes in one area routinely break others, if onboarding new engineers feels like navigating an archaeological dig through years of intertwined code - these are the symptoms of a system that has outgrown its structure.

Micro-frontends address this by restoring local autonomy. Each team can ship independently, evolve its stack, and respond to customer needs without waiting for the rest of the organisation to move. The return on investment becomes visible early because, unlike a complete rewrite, migration to micro-frontends is incremental. Each small step delivers value on its own, reducing risk and building confidence.

At one media company I worked with, the shift from a shared frontend to domain-owned micro-frontends reduced coordination effort per release by more than half. Deployment frequency rose tenfold within months. That momentum created the trust needed to continue the migration safely.

But micro-frontends are not a silver bullet. For small teams or products with limited complexity, the overhead might outweigh the benefits. The goal is not to adopt a pattern for its own sake but to solve concrete problems: delivery bottlenecks, scaling limits, and the inability to modernise safely.

Evolving Existing Systems

The hardest part of adopting micro-frontends is not starting fresh; it’s evolving what already exists. Most organisations operate in brownfield environments - large, mature systems that can’t be simply replaced. The challenge is to introduce modularity without breaking everything that works today.

The first principle is to think iteratively. A successful migration doesn’t require shutting down the old world to build the new one. Instead, it uses the old system as scaffolding while gradually introducing new components. Each iteration becomes a slight, measurable improvement - an opportunity to validate assumptions, build new capabilities, and reduce uncertainty.

An iterative approach delivers faster ROI and lowers risk. It allows the business to continue operating while modernisation happens in parallel. It also keeps teams motivated, as each release produces visible progress rather than waiting months for the "big reveal".

From Big Bang to Incremental Change

In backend modernisation, the strangler fig pattern has long been used to gradually replace monolithic systems. The same principle applies beautifully to the frontend. Instead of mixing old and new code in the same pages, route traffic at the edge to decide which version of the application should serve a given request.

By placing routing logic at the CDN or edge layer, you can divert specific paths - say, /checkout or /dashboard - to a new micro-frontend while leaving the rest of the site untouched. If something goes wrong, rollback is instant: just change a routing rule. There’s no need to redeploy or revert code.


Micro-frontends iterative migration with edge-compute

This pattern also unlocks powerful release strategies. You can test new experiences with canary deployments, feature flags, or country-based rollouts, and collect honest feedback before a full release. This iterative rhythm builds trust between technical and business stakeholders. Each deployment becomes both a delivery and a learning opportunity.

The key is to resist the temptation to blend old and new UI within the same page. Mixing rendering systems multiplies complexity and breaks the isolation that makes micro-frontends valuable in the first place. Clear, page-level or route-level boundaries keep the migration safe and reversible.

Planning the Migration

Every migration is a balance between impact and safety. The first module you choose sets the tone for everything that follows. It should be meaningful enough to prove value but isolated enough to minimise risk.

In practice, this often means starting with a new feature or a module already scheduled for major refactoring. That way, the migration effort aligns naturally with business goals - you’re not just modernising for its own sake, you’re enabling new capabilities.

Your first micro-frontend should go end-to-end: from design and development through deployment and observability. That vertical slice will surface every challenge you’ll face later - routing, shared dependencies, authentication, monitoring - on a scale that’s still manageable. The lessons learned there will inform every subsequent migration step.

Think of it as your pilot. If it works, it becomes a reusable template; if it doesn’t, you’ve lost little and gained invaluable insight. Treat migration not as a project but as an ongoing evolutionary process. Each success builds momentum. Each mistake refines your heuristics.

Designing for Modularity

When starting a greenfield project, micro-frontends should align business domains, not technical layers. Instead of organising code by framework or feature type, design independent product capabilities that map to real user needs - catalogue, checkout, profile, analytics.

This domain-driven alignment enables micro-frontends to scale. Each module becomes a boundary between both code and communication. Teams own their space end to end, choosing their technologies, deployment pipelines, and release rhythms. Over time, this reduces coupling not only between systems but between people.

That autonomy requires a contract of trust. Shared guidelines - like how routing works, how design tokens are managed, or how observability is implemented - create coherence without reintroducing central control. The goal is a federation of teams, not anarchy of frameworks.

Evolutionary architecture is not about predicting the future; it’s about being ready for it. Designing change means optimising reversibility. Every decision - tooling, boundary, dependency - should be easy to revisit. The systems that last are those that can adapt, not those that were perfect on day one.

Handling Cross-Cutting Concerns

As with any distributed system, the most complex parts are the seams: routing, authentication, shared state, and user experience. These are the invisible threads that make a product feel cohesive.

Routing is the backbone of your migration. Centralising it at the edge keeps logic out of your application code and simplifies rollback. Using absolute URLs for navigation between systems ensures clarity and predictability. If something breaks, users never land in an undefined state - they’re simply redirected to the stable version.

In practice, this approach turns the edge into a single source of truth for traffic control during the migration period. Instead of embedding conditional logic inside every frontend, edge functions can decide, in milliseconds, whether a request should go to the legacy monolith or to a specific micro-frontend. This also enables progressive rollout strategies, such as canary releases or blue-green deployments, without touching your frontend code.

One of the most valuable advantages is the ability to roll back instantly without polluting your legacy codebase or new micro-frontends with temporary routing hacks. If an issue appears, you simply switch the routing rule at the edge, and all traffic flows back to the stable version. There’s no redeployment, no manual intervention inside the applications, and no need to maintain hybrid rendering layers that mix old and new UI code. The separation between systems remains clean and reversible, which is critical for long-running migrations.

Centralised routing also reduces cognitive load for teams and improves platform stability. Developers no longer need to maintain throwaway routing logic in multiple repositories or synchronise URL patterns between systems. It also simplifies observability, since all incoming requests pass through a single control point that can emit consistent metrics and logs.

Authentication can often be handled more simply than teams expect. As long as all micro-frontends share the same subdomain as the legacy app, they can access the same cookies and session data.

Implementing refreshed token logic in both worlds keeps sessions alive without complex cross-app communication.

State management in micro-frontends should remain local to each application to preserve independence and avoid cross-team coupling. When multiple micro-frontends need to communicate, prefer loosely coupled events that broadcast intent and data where necessary over enforcing shared runtime dependencies. This reinforces architectural boundaries while enabling collaboration where required.

Some configurations, such as authentication tokens, locale, or feature flags, can be shared across systems using stable mechanisms, such as cookies or local storage, or by injecting a lightweight context into each micro-frontend. The key is to keep this shared layer minimal and predictable.

Embracing Duplication (Wisely)

Duplication in distributed systems should never be accidental; it should be intentional. The goal is not to eliminate all repetition but to make conscious decisions about where duplication helps teams move faster and where it introduces unnecessary overhead.

Good heuristics lie at the intersection of complexity and rate of change. For example, a design system evolves quickly during its early phases but stabilises over time. Once mature, its release cycle slows down - nobody changes the design system every day. Similarly, a shared logging library across multiple micro-frontends has low volatility and clear behaviour, so centralising it makes sense. On the other hand, consider a complex video player in a streaming platform. Its heuristics may vary by browser or device to optimise buffering, latency, or startup times. The complexity is high and the rate of change is frequent, so duplication would only multiply maintenance pain without tangible benefits.

Conversely, if you’re dealing with a simple component - say, a basic form of field or small utility - that doesn’t change often and requires minimal effort to implement, feel free to duplicate it. Abstraction can always come later once patterns are proven, and the need for consistency is evident.

Every shared abstraction introduces governance, versioning, and ownership responsibilities. Leaving ownership inside the team responsible for a micro-frontend simplifies the process and preserves autonomy. The best abstractions are those that emerge naturally, not those imposed prematurely. Intentional duplication buys you speed and flexibility; thoughtful consolidation gives you long-term coherence. Balancing the two is what makes distributed architectures evolve gracefully.

The Fastest Path to Modernisation

One of the most persistent myths about micro-frontends is that you need microservices to support them. You don’t. The frontend and backend evolve at different speeds, and the frontend almost always moves faster.

Micro-frontends focus on how teams build and deliver interfaces, not on how data is served. As long as you have stable API contracts, your frontend can modernise independently of your backend. You can keep your monolithic APIs while introducing modular frontends on top of them. The stateless nature of frontends makes them ideal for incremental modernisation.

Backend migrations are often lengthy because data has gravity. Schema changes, replication strategies, and legacy dependencies can stretch timelines for months or years. Frontend migrations, by contrast, can deliver visible value in weeks. You can start improving performance, maintainability, and user experience immediately, without waiting for backend modernisation to catch up.

At a retail company I advised, the frontend migration to micro-frontends was completed in roughly 14 months. The backend modernisation took twice as long, but the organisation saw immediate value early on through faster releases and a better user experience, even while the backend was still monolithic.

The frontend can lead the way, serving as a proving ground for distributed practices and a catalyst for broader organisational change.

Modernisation at Human Speed

Modernisation is not a single event; it’s a journey. The temptation to start over is strong, especially when legacy systems feel immovable. But the "big bang" approach rarely succeeds. It freezes business progress, drains morale, and often ends in partial rewrites that never reach production.

Micro-frontends offer a different path, one that aligns with how organisations truly evolve. They let you move at human speed: fast enough to show progress, slow enough to stay safe. They encourage experimentation, continuous learning, and local ownership.

Every migration is a balancing act between ideal architecture and practical delivery. The teams that succeed are those that accept imperfections as part of the process. They know that good architecture is not about purity; it’s about flow.

If there’s a guiding principle to remember, it’s this: evolutionary beats revolutionary. Iterate, learn, and adapt. The systems you build today will change tomorrow, and that’s a feature, not a flaw.

For teams exploring this path, the distributed frontend era is not about frameworks or bundlers. It’s about designing systems and organisations that can evolve continuously, safely, and with purpose.

Conclusion

Micro-frontends are more than a technical pattern; they reflect how modern organisations build software. They embody the shift from centralised control to distributed ownership, from significant releases to continuous flow, from architectural rigidity to evolutionary change.

By approaching migration iteratively - starting small, learning fast, and keeping business goals at the centre - you can modernise your frontend without halting innovation. Whether your backend is still monolithic or already distributed doesn’t matter. What matters is your ability to evolve safely and deliver value continuously.

Architecture, at its best, mirrors the way people collaborate. When teams are empowered, systems follow. Micro-frontends are simply the architectural expression of that truth.

How to write a great agents.md: Lessons from over 2,500 repositories

Mike's Notes

Great working example here of how to do this. Agents.md is supported by multiple agents. Useful for future integration. Thanks, Matt.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

28/11/2025

How to write a great agents.md: Lessons from over 2,500 repositories

By: Matt Nigh
GitHub Blog: 19/11/2025

Program Manager Director, I lead the AI for Everyone program at GitHub.

Learn how to write effective agents.md files for GitHub Copilot with practical tips, real examples, and templates from analyzing 2,500+ repositories.

We recently released a new GitHub Copilot feature: custom agents defined in agents.md files. Instead of one general assistant, you can now build a team of specialists: a @docs-agent for technical writing, a @test-agent for quality assurance, and a @security-agent for security analysis. Each agents.md file acts as an agent persona, which you define with frontmatter and custom instructions.

agents.md is where you define all the specifics: the agent’s persona, the exact tech stack it should know, the project’s file structure, workflows, and the explicit commands it can run. It’s also where you provide code style examples and, most importantly, set clear boundaries of what not to do.

The challenge? Most agent files fail because they’re too vague. “You are a helpful coding assistant” doesn’t work. “You are a test engineer who writes tests for React components, follows these examples, and never modifies source code” does.

I analyzed over 2,500 agents.md files across public repos to understand how developers were using agents.md files. The analysis showed a clear pattern of what works: provide your agent a specific job or persona, exact commands to run, well-defined boundaries to follow, and clear examples of good output for the agent to follow. 

Here’s what the successful ones do differently.

What works in practice: Lessons from 2,500+ repos

My analysis of over 2,500 agents.md files revealed a clear divide between the ones that fail and the ones that work. The successful agents aren’t just vague helpers; they are specialists. Here’s what the best-performing files do differently:

  • Put commands early: Put relevant executable commands in an early section: npm test, npm run build, pytest -v. Include flags and options, not just tool names. Your agent will reference these often.
  • Code examples over explanations: One real code snippet showing your style beats three paragraphs describing it. Show what good output looks like.
  • Set clear boundaries: Tell AI what it should never touch (e.g., secrets, vendor directories, production configs, or specific folders). “Never commit secrets” was the most common helpful constraint.
  • Be specific about your stack: Say “React 18 with TypeScript, Vite, and Tailwind CSS” not “React project.” Include versions and key dependencies.
  • Cover six core areas: Hitting these areas puts you in the top tier: commands, testing, project structure, code style, git workflow, and boundaries. 

Example of a great agent.md file

Below is an example for adding a documentation agent.md persona in your repo to .github/agents/docs-agent.md:

---
name: docs_agent
description: Expert technical writer for this project
---
You are an expert technical writer for this project.

## Your role
- You are fluent in Markdown and can read TypeScript code
- You write for a developer audience, focusing on clarity and practical examples
- Your task: read code from `src/` and generate or update documentation in `docs/`

## Project knowledge
- **Tech Stack:** React 18, TypeScript, Vite, Tailwind CSS
- **File Structure:**
  - `src/` – Application source code (you READ from here)
  - `docs/` – All documentation (you WRITE to here)
  - `tests/` – Unit, Integration, and Playwright tests

## Commands you can use
Build docs: `npm run docs:build` (checks for broken links)
Lint markdown: `npx markdownlint docs/` (validates your work)

## Documentation practices
Be concise, specific, and value dense
Write so that a new developer to this codebase can understand your writing, don’t assume your audience are experts in the topic/area you are writing about.

## Boundaries
- ✅ **Always do:** Write new files to `docs/`, follow the style examples, run markdownlint
- ⚠️ **Ask first:** Before modifying existing documents in a major way
- 🚫 **Never do:** Modify code in `src/`, edit config files, commit secrets

Why this agent.md file works well

  • States a clear role: Defines who the agent is (expert technical writer), what skills it has (Markdown, TypeScript), and what it does (read code, write docs).
  • Executable commands: Gives AI tools it can run (npm run docs:build and npx markdownlint docs/). Commands come first.
  • Project knowledge: Specifies tech stack with versions (React 18, TypeScript, Vite, Tailwind CSS) and exact file locations.
  • Real examples: Shows what good output looks like with actual code. No abstract descriptions.
  • Three-tier boundaries: Set clear rules using always do, ask first, never do. Prevents destructive mistakes.

How to build your first agent

Pick one simple task. Don’t build a “general helper.” Pick something specific like:

  • Writing function documentation
  • Adding unit tests
  • Fixing linting errors

Start minimal—you only need three things:

  • Agent name: test-agent, docs-agent, lint-agent
  • Description: “Writes unit tests for TypeScript functions”
  • Persona: “You are a quality software engineer who writes comprehensive tests”

Copilot can also help generate one for you. Using your preferred IDE, open a new file at .github/agents/test-agent.md and use this prompt:

Create a test agent for this repository. It should:

- Have the persona of a QA software engineer.
- Write tests for this codebase
- Run tests and analyzes results
- Write to “/tests/” directory only
- Never modify source code or remove failing tests
- Include specific examples of good test structure

Copilot will generate a complete agent.md file with persona, commands, and boundaries based on your codebase. Review it, add in YAML frontmatter, adjust the commands for your project, and you’re ready to use @test-agent.

Six agents worth building

Consider asking Copilot to help generate agent.md files for the below agents. I’ve included examples with each of the agents, which should be changed to match the reality of your project. 

@docs-agent

One of your early agents should write documentation. It reads your code and generates API docs, function references, and tutorials. Give it commands like npm run docs:build and markdownlint docs/ so it can validate its own work. Tell it to write to docs/ and never touch src/

  • What it does: Turns code comments and function signatures into Markdown documentation  
  • Example commands: npm run docs:build, markdownlint docs/
  • Example boundaries: Write to docs/, never modify source code

@test-agent

This one writes tests. Point it at your test framework (Jest, PyTest, Playwright) and give it the command to run tests. The boundary here is critical: it can write to tests but should never remove a test because it is failing and cannot be fixed by the agent. 

  • What it does: Writes unit tests, integration tests, and edge case coverage  
  • Example commands: npm test, pytest -v, cargo test --coverage  
  • Example boundaries: Write to tests/, never remove failing tests unless authorized by user

@lint-agent

A fairly safe agent to create early on. It fixes code style and formatting but shouldn’t change logic. Give it commands that let it auto-fix style issues. This one’s low-risk because linters are designed to be safe.

  • What it does: Formats code, fixes import order, enforces naming conventions  
  • Example commands: npm run lint --fix, prettier --write
  • Example boundaries: Only fix style, never change code logic

@api-agent

This agent builds API endpoints. It needs to know your framework (Express, FastAPI, Rails) and where routes live. Give it commands to start the dev server and test endpoints. The key boundary: it can modify API routes but must ask before touching database schemas.

  • What it does: Creates REST endpoints, GraphQL resolvers, error handlers  
  • Example commands: npm run dev, curl localhost:3000/api, pytest tests/api/
  • Example boundaries: Modify routes, ask before schema changes

@dev-deploy-agent

Handles builds and deployments to your local dev environment. Keep it locked down: only deploy to dev environments and require explicit approval. Give it build commands and deployment tools but make the boundaries very clear.

  • What it does: Runs local or dev builds, creates Docker images  
  • Example commands: npm run test
  • Example boundaries: Only deploy to dev, require user approval for anything with risk

Starter template

---
name: your-agent-name
description: [One-sentence description of what this agent does]
---
You are an expert [technical writer/test engineer/security analyst] for this project.

## Persona
- You specialize in [writing documentation/creating tests/analyzing logs/building APIs]
- You understand [the codebase/test patterns/security risks] and translate that into [clear docs/comprehensive tests/actionable insights]
- Your output: [API documentation/unit tests/security reports] that [developers can understand/catch bugs early/prevent incidents]

## Project knowledge
- **Tech Stack:** [your technologies with versions]
- **File Structure:**
  - `src/` – [what's here]
  - `tests/` – [what's here]

## Tools you can use
- **Build:** `npm run build` (compiles TypeScript, outputs to dist/)
- **Test:** `npm test` (runs Jest, must pass before commits)
- **Lint:** `npm run lint --fix` (auto-fixes ESLint errors)

## Standards
Follow these rules for all code you write:
**Naming conventions:**
- Functions: camelCase (`getUserData`, `calculateTotal`)
- Classes: PascalCase (`UserService`, `DataController`)
- Constants: UPPER_SNAKE_CASE (`API_KEY`, `MAX_RETRIES`)

**Code style example:**
```typescript
// ✅ Good - descriptive names, proper error handling
async function fetchUserById(id: string): Promise<User> {
  if (!id) throw new Error('User ID required');
  
  const response = await api.get(`/users/${id}`);
  return response.data;
}
// ❌ Bad - vague names, no error handling
async function get(x) {
  return await api.get('/users/' + x).data;
}

Boundaries
- ✅ **Always:** Write to `src/` and `tests/`, run tests before commits, follow naming conventions
- ⚠️ **Ask first:** Database schema changes, adding dependencies, modifying CI/CD config
- 🚫 **Never:** Commit secrets or API keys, edit `node_modules/` or `vendor/`


Key takeaways

Building an effective custom agent isn’t about writing a vague prompt; it’s about providing a specific persona and clear instructions.

My analysis of over 2,500 agents.md files shows that the best agents are given a clear persona and, most importantly, a detailed operating manual. This manual must include executable commands, concrete code examples for styling, explicit boundaries (like files to never touch), and specifics about your tech stack. 

When creating your own agents.md cover the six core areas: Commands, testing, project structure, code style, git workflow, and boundaries. Start simple. Test it. Add detail when your agent makes mistakes. The best agent files grow through iteration, not upfront planning.

Now go forth and build your own custom agents to see how they level up your workflow first-hand!


Agent.md supported Agents

  • Codex from OpenAI
  • Amp
  • Jules from Google
  • Cursor
  • Factory
  • RooCode
  • Aider
  • Gemini CLI from Google
  • Kilo Code
  • opencode
  • Phoenix
  • Zed
  • Semgrep
  • Warp
  • Coding agent from GitHub Copilot
  • VS Code logo
  • VS Code
  • Ona logo
  • Ona
  • Devin logo
  • Devin from Cognition
  • Coded Agents from UiPath

Workspaces for the Built Environment

Mike's Notes

This is where I will keep detailed working notes on creating Workspaces for the Built Environment. Eventually, these will become permanent, better-written documentation stored elsewhere. Hopefully, someone will come up with a better name than this working title.

This replaces specific coverage in Industry Workspace written on 13/10/2025.

Testing

The current online mockup is version 1 and will be updated frequently. If you are helping with testing, please remember to delete your browser cache so you see the daily changes. Eventually, a live demo version will be available for field trials.

Learning

I was greatly encouraged and influenced by Dr Matthew West, who was the technical lead on establishing the UK Digital Twin Project. He was also co-chair of the Ontology Forum and answered many of my newbie questions in a nice way.

I first came across him while searching for a time-based database design. I ended up using 4Dism, which he and Chris Partridge of BORO fame were responsible.

What I learned from Matthew and Chris enabled me to build Pipi 9. It is all in the ontology. (Palintir discovered the same). I just wish Matthew were still alive so I could thank him properly.

Why

Watching roads being built, then dug up again a short time later because engineers in the same office don't talk to each other. There are many similar examples caused by silos. The waste of opportunity and the cost to society are massive. It's a global problem.

Resources

References


References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

19/02/2026

Workspaces for the Built Environment

By: Mike Peters
On a Sandy Beach: 28/11/2025

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

Open-source

This open-source SaaS cloud system will be shared on GitHub and GitLab.

Dedication

This workspace is dedicated to the life and work of Dr Matthew West.

Dr Matthew West 1953 – 2023

Source: https://www.blog.ajabbi.com/2023/08/matthew-west-1953-2023.html

"Matthew leads the work developing the technical core of the Information Management Framework for the National Digital Twin programme. He is a Chemical Engineer by original training, and did his PhD in numerical modelling. He worked for Shell for 30 years in a variety of roles, and from 1987 he worked on the computing/business interface with a particular interest in information management, information quality, master and reference data management, data modelling, data integration and ontology. He was involved in the data strategy for Downstream One, a large scale business integration and improvement project across Shell’s downstream (oil tanker to petrol pump) business. He has been a key technical contributor to a number of standards including ISO 15926 – Lifecycle integration of process plant data, and ISO 18876 – Integration of Industrial Data for Exchange Access and Sharing, ISO 8000 – Data and Information Quality, and also ISO 21838-1 – Top-Level Ontologies. In 2008 he cofounded Information Junction, providing information management consultancy to industry and government. He has been a Visiting Professor at the University of Leeds and is the author of “Developing High Quality Data Models”. He was awarded an OBE for services to information management in the 2021 New Year’s honours list." - Centre for Digital Built Britain

Notes

Change Log

Ver 3 includes Buildings, construction and maintenance, infrastructure and parks.

Existing products


Features

This is a basic comparison of features in civil engineering software.

[TABLE]

Industry Links

Ontologies

City infrastructure ontologies

Data Model

words

Database Entities

  • Facility
  • Party
  • etc

Standards

The workspace needs to comply with all international standards.

  • (To come)

Workspace navigation menu

This default outline needs a lot of work. The outline can be easily customised by future users using drag-and-drop and tick boxes to turn features off and on.

  • Enterprise Account
    • Applications
      • Built Environment (v.3)
        • Buildings
          • Public Buildings
            • Accessible Toilets
            • Changing Places
            • Exterior Doors
            • Lifts
        • Construction and Maintenance
          • Construction
            • Material
            • Plan
            • Site
          • Maintenance
            • (To come)
        • Infrastructure
          • Transportation
            • Bridges
            • Parking
              • Mobility Parking
              • Mobility Parking Permits
              • Parking Buildings
              • Parking Meters
            • Roads
              • Berms
              • Bus Stops
              • Crossings
              • Cycle Lanes
              • Footpaths
              • Networks
              • Rain Gardens
              • Roadways
              • Roundabouts
              • Shared Paths
              • Street Furniture
            • Signage
          • Utilities
            • Drainage
              • Network
              • Storage
              • Treatment
            • Electricity Supply
              • Generator
              • Network
            • Sewer Network
              • Network
              • Treament
            • Water Supply
              • Network
              • Storage
              • Treatment
        • Open Space
          • Parks
            • Paths
            • Playgrounds
        • Customer (v2)
          • Bookmarks
            • (To come)
          • Support
            • Contact
            • Forum
            • Live Chat
            • Office Hours
            • Requests
            • Tickets
          • (To come)
            • Feature Vote
            • Feedback
            • Surveys
          • Learning
            • Explanation
            • How to Guide
            • Reference
            • Tutorial
          • Settings (v3)
            • Account
            • Billing
            • Deployments
              • Workspaces
                • Modules
                • Plugins
                • Templates
                  • City
                  • Home
                  • Hydroelectric Dam
                  • Nuclear Power Station
                  • Wind Turbine
                • Users

        Welcome to KiwiSaaS! Your team’s member benefits start now

        Mike's Notes

        About time this project signed up to an Industry organisation, so Ajabbi is now a paid member of KiwiSaaS under the startup category. 😊

        The KiwiSaaS Story

        "From 2021 to 2024, the KiwiSaaS community brought together nearly 4,000 SaaS professionals from across Aotearoa — sharing knowledge, swapping stories, and helping each other grow. 

        With support from government funding during that time, KiwiSaaS helped the sector collaborate more deeply and amplify New Zealand’s impact on the global stage. 

        Now, we’ve stepped into an exciting new chapter as an industry‑led community within the NZTech Group. This evolution keeps the momentum going — creating a member‑driven network built for long‑term growth, empowering SaaS businesses and championing their success worldwide." - KiwiSaaS

        Monthly Chats

        Back then, I would use "KiwiSaaS Orbit" to get a monthly chat at random with someone in NZ who's also a startup founder. I learned a great deal from those meetings. Everyone was learning by the seat of their pants, trying to solve very hard problems. Then the funding was removed, and KiwiSaaS was dead.

        Resource

        In late 2025, KiwiSaaS was revived and is now run by volunteers. There is a growing list of resources that I'm finding very useful. The talks on Zoom are great.

        Ajabbi is a bootstrap startup, so funds are very tight, and making careful decisions is necessary. I'm glad Ajabbi has joined KiwiSaaS now. Later, Ajabbi can join OMG, etc.

        Volunteering

        It would be good to volunteer to help KiwiSaaS.

        Update 5/12/2025

        Just paid the KiwiSaaS annual membership invoice that came from XeroPayment was made via Stripe using the Link feature. It was very nice to use. Someone in an NZTE course post-advisory session recommended that Ajabbi use Stripe as the payment gateway. Now I can see why.

        Resources

        References

        • Reference

        Repository

        • Home > Ajabbi Research > Library >
        • Home > Handbook > 

        Last Updated

        11/12/2025

        Welcome to KiwiSaaS! Your team’s member benefits start now

        By: 
        KiwiSaaS: 27/11/2025

        We provide the following free of charge to all our SaaS community:

        • Workshops – online and in person, across a range of SaaS areas. Our events page
        • Resource library – with 20+ videos/articles that we’ll build as we go. Our Resource Library 
        • SaaS in My Region –KiwiSaaS supports local organisers to run and grow your local tech and SaaS groups. What’s happening in my area? 
        • News + views relevant to you – News, articles, events and opportunities for people in your role, in your area. Sign up for our newsletter 

        As a member, your whole team now has access to additional premium benefits:

        • Member-only events – Step behind the velvet rope. Get access to exclusive sessions, private roundtables, and invite‑only gatherings — including special events for $5M+ ARR members. > See what’s on 
        • Tune Up consultations– Think of it as a friendly pit stop for your SaaS. Get a free “tune‑up” on any part of your business from experienced Kiwi operators who’ve already run that race. > Request Tune-Up 
        • Intros to connections and mentors– Wish you could pick the brain of someone a few million ARR ahead? We’ll connect you with mentors, peers, and helpers who’ve been there — tailored to your goals and growth stage. > Request an intro 
        • SaaS board exchange – Ever wondered, “Is our board supposed to run like this?” Visit and observe other SaaS boards in action, and learn how the best in the business tackle governance and growth. > Find out more 
        • Discounted tickets to events – Members save on workshops, masterclasses, parties, and our flagship Southern SaaS conference returning late 2026  — where the whole community gets together (and gets inspired). > Southern SaaS 
        • SaaS Helpdesk– Got a SaaS‑shaped problem? Fire away. Our team will connect you with the right advice — fast, practical, and no jargon required. > Ask for help 
        • Member-only resources (coming 2026) – We’ll always share public resources, but from next year you’ll also get access to member‑exclusive toolkits designed to save leaders serious time (and cash) on professional development.
        • Member-only communities - Connect with peers on your wavelength — from early‑stage founders to seasoned growth leaders. Safe, collaborative spaces to swap ideas and scale smarter. Member Communities 
        • Member logo - Please find attached 3 versions of our Member logo for use on your website and marketing collateral. Standard branding rules apply, so please do not alter the logo in any way.

        Plus, you get the good vibes that come from knowing your membership is enabling us to keep most of our offerings free to strengthen our community and grow our sector.

        So where do we start with all this?

        1. Take advantage of your new membership benefits. The list is above, get stuck in. 
        2. Let your team know you are in. Either let them know, encouraging them to sign up to our newsletter, or have us email them for you. If you want to do comms to your team,  we’ve got ready-to-go announcement copy to make it easy > here.  
        3. Let us know your asks and offers. We want to understand what we can do for you, and what you can do for the community. As a membership organisation, KiwiSaaS relies on both your fees (to pay for the organising we do) and a range of volunteers that bring the learning and connection of our community to life. Let us know what you want from us, and what you and your team want to offer.

        AI 101: What is Continual Learning?

        Mike's Notes

        This came through today. I copied part of Alyona Vert's article from TuringPost below as an introduction to these papers

        • A Comprehensive Survey of Continual Learning: Theory, Method and Application, by Liyuan Wang, Xingxing Zhang, Hang Su, and Jun Zhu, submitted to ArXiv on 31/01/2023.
        • Continual Learning and Catastrophic Forgetting by Gido M. van de Ven, Nicholas Soures, Dhireesha Kudithipudi, submitted to arXiv on 8/03/2024

        Resources

        References

        • A Comprehensive Survey of Continual Learning: Theory, Method and Application by Liyuan Wang, Xingxing Zhang, Hang Su, Jun Zhu.
        • Continual Learning and Catastrophic Forgetting by Gido M. van de Ven, Nicholas Soures, Dhireesha Kudithipudi.

        Repository

        • Home > Ajabbi Research > Library >Subscriptions > Turing Post
        • Home > Handbook > 

        Last Updated

        27/11/2025

        AI 101: What is Continual Learning?

        By: Alyona Vert
        Turing Post: 27/11/2025

        Joined Turing Post in April 2024. Studied control systems of aircrafts at BMSTU (Moscow, Russia), where conducted several researchers on helicopter models. Now is more into AI and writing.

        Can models add new knowledge without wiping out what they already know? We look at why continual learning is becoming important right now and explore the new methods emerging for it, including Google’s Nested Learning and Meta’s Sparse Memory Fine-tuning.

        If you think about the term AGI, especially in the context of pre-training, you will realize that the human being is not an AGI, because a human being lacks a huge amount of knowledge. Instead, we rely on continual learning. - Ilya Sutskever

        Do you feel this shift too? The idea of models learning endlessly is showing up everywhere. We see it, we hear it, and it’s all pushing the spotlight toward continual learning.

        Continual learning is the ability to keep learning new things over time without forgetting what you already know. Humans do this naturally (as Ilya Sutskever also noted) and they are very flexible to changing data. But, unfortunately, neural networks are not. When developers change the training data, they often face something that is called catastrophic forgetting: the model starts loosing its previous knowledge, and returns to training model from scratch.

        Finding the very balance between a model’s plasticity and its stability in previously learned knowledge and skills is becoming a serious challenge right now. Continual learning is the path to more “intelligent” systems that will save time, resources, and money spent on training, it helps mitigate biases and errors, and, in the end, things can just go easier and more naturally with model deployment.

        Today we’ll look at the basics of continual learning and two approaches that are worth your attention: very recent Google’s Nested Learning and Meta FAIR’s Sparse Memory Finetuning. There is a lot to explore →

        Follow us on YouTube

        In today’s episode, we will cover:

        • Continual Learning: the essential basics
        • Setups and scenarios for Continual Learning training
        • How to help models learn continually? General methods
        • What is Nested Learning?
          • How does Nested Learning work?
          • HOPE: Google’s architecture for continual learning
          • Not without limitations
        • Cautious continual learning with memory layers
          • Sparse Memory Finetuning
          • Limitations
        • Conclusion / Why continual learning is important now?
        • Sources and further reading

        Continual Learning: The essential basics

        Continual learning means learning step-by-step from data that changes over time. So it is related to two main things:

        • Non-stationary data, which means the data distribution does not stay the same and keeps shifting.
        • Incremental learning – the model should add new knowledge without wiping out what it learned before.

        The new pieces of information can be new skills, new examples, new environments, or new contexts. As the data comes in gradually, continual learning is also known as lifelong learning. The process of continual learning happens when the model is already deployed.

        Everything would be great if models didn’t face one major challenge – catastrophic forgetting. This problem generally looks like this: a neural network is trained on Task 2 after Task 1, and its weights are updated for Task 2. This often pushes them away from the optimum for Task 1, and the model suddenly performs very poorly on that task.

        The problem here is not the model’s capacity – this usually happens because of the sequential training procedure. Even in 1989-1990, Michael McCloskey and Neal J. Cohen and R. Ratcliff identified this problem and showed that simple networks lose previous knowledge extremely quickly when trained sequentially. They also highlighted that this forgetting is much worse than in humans.

        But if you train on Tasks 1 and 2 interleaved, forgetting does not happen.

        Image Credit: Illustration of catastrophic forgetting, “Continual Learning and Catastrophic Forgetting” paper

        Preventing forgetting is only one part of the solution. Effective continual learning also requires:

        • Fast adaptation
        • Ability to leverage task similarities
        • Task-agnostic behavior
        • Robustness to noise
        • High efficiency in memory and compute
        • Avoiding storing all past data and retraining on all previous data

        If tasks are related, the model should get better at one after learning another, which marks positive knowledge transfer:

        • Forward transfer → Task 1 helps Task 2 later.
        • Backward transfer → Task 2 helps improve Task 1. This is a more difficult variant for neural networks.

        So, a good continual learning system needs the right balance: it should stay stable (not forget old things) while still being plastic enough to learn new ones. It also needs to handle differences within each task and across different tasks. How is it released on practice?


        Image Credit: “A Comprehensive Survey of Continual Learning: Theory, Method and Application” paper

        Setups and scenarios for Continual Learning training

        Continual learning is mainly about moving from one task to the next while keeping performance stable or improving it during ongoing learning. That’s why two fundamental setups are used for it:

        1. Task-based continual learning: Data is organized into clear, separate tasks which are shown one after another, with explicit task boundaries. It is the most common setup, because it is convenient and controlled – you know exactly when tasks switch. But it doesn’t represent gradual changes found in the real world, and models may rely too heavily on boundaries for memory updates.
        2. Task-free continual learning: This one is more realistic, because it better reflects real-world data where distributions shift continuously. There is still an underlying set of tasks, but task boundaries are not given and transitions are smooth.


        Image Credit: “Continual Learning and Catastrophic Forgetting” paper

        Continual learning researchers often uses three main scenarios to describe what the model is expected to know at test time and whether it gets task identity information. Importantly, these scenarios are defined by how the changing data relates to the function the network must learn:


        Upgrade to read the rest on Turing Post

        A formalization of foundations of geometry in Coq

        Mike's Notes

        Very useful. Proof assistants are wonderful tools. The original article has many links to source material.

        Resources

        References

        • Reference

        Repository

        • Home > Ajabbi Research > Library >
        • Home > Handbook > 

        Last Updated

        27/11/2025

        A formalization of the foundations of geometry in Coq

        By: Julien Narboux
        GeoCoq: Copied 27/11/2025

        About

        This page describe a formalization of geometry using the Coq proof assistant. It contains both proofs about the foundations of geometry and high-level proofs in the same style as in high-school.

        Content

        You can browse the Coq files from the index of everything, or you can see some specific parts.

        The axiom systems

        There are several ways to define the foundations of geomety:

        • a synthetic approach
          • Hilbert's axioms: points, lines, planes + geometric axioms
          • Tarski's axioms: points + geometric axioms
          • Euclid's axioms
        • an analytic approach (starting from a given field 𝔽 (usually ℝ) and defining the plane as 𝔽n),
        • mixed analytic/synthetic approaches assuming both a field and some geometric axioms:
          • area method: start field a field for measure signed distance and areas + geometric axioms
          • Birkhoff's style axiom system: start with a field for measuring distance and angles + geometric axioms
        • approaches based on group of transformations (Erlangen progam)...

        We use here a synthetic approach but following Descartes and Tarski we prove that we can define coordinates.

        Our main axiom system is the one of Tarski, but we define also Hilbert's axiom system and a version of Euclid's axioms sufficient to prove the propositions in Book 1 of the Elements. We prove that Tarski's axioms (except continuity) are equivalent to Hilbert's axioms (except continuity).

        • Tarski axioms in Coq
        • Hilbert axioms in Coq
        • Euclid axioms in Coq

        The formalization based on Tarski's axioms

        Alfred Tarski 1968TarskiIn the early 60s, Wanda Szmielew and Alfred Tarski started the project of a treaty about the foundations of geometry. A systematic development of euclidean geometry based on Tarski's axioms was supposed to constitute the first part, but the early death of Wanda Szmielew  put an end to this project. Finally, Wolfram Schwabhäuser continued the project of Wanda Szmielew and Alfred Tarski. He published the treaty in 1983 in German : Metamathematische Methoden in der Geometrie.

        The main part of this development consists in the formalization of the first part of this book.SST Book

        • Ch. 02 congruence properties
        • Ch. 03 between properties
        • Ch. 04 congruence between properties 
        • Ch. 04 collinearity 
        • Ch. 05 between transitivity le 
        • Ch. 06 out lines 
        • Ch. 07 midpoint 
        • Ch. 08 orthogonality 
        • Ch. 09 planes
        • Ch. 10 line reflexivity 2D
        • Ch. 10 line reflexivity
        • Ch. 11 angles
        • Ch. 12 parallelism
        • Ch. 12 parallelism using intersection decidability
        • Ch. 13 Synthetic proofs of the theorems of Pappus and Desargues.Pappus
          • Ch. 13.1
          • Ch. 13.2 length Length defined as an equivalence class using the Congruence predicate.
          • Ch. 13.3 angles Angle measure defined as an equivalence class using the angle congruence predicate.
          • Ch. 13.4 cos
          • Ch. 13.5 Pappus-Pascal
          • Ch. 13.6 Desargues Hessenberg's proof that Pappus implies Desargues.
        • Ch. 14 Arithmetization of geometry
        • Descartes Geometrie
          • Ch. 14.1 Sum Geometric definition of the sum.
          • Ch. 14.2 Product Geometric definition of the product.
          • Ch. 14.3 Ordered. field All proofs necessary to obtain an ordered field.
        • Ch. 15 Lengths Definition of the length of a segment using coordinates, definition of length comparison using coordinates, proof that these definitions corresponds to their geometric counterparts,
        • Pythagoras theorem,
        • Thales theorem.
        • Ch. 16 Coordinates Proof of the formulas to characterize the congruence, betweeness, collinearity, and midpoint predicates using coordinates.
        • Ch. 16 extension Instanciation of ordered field structures and connection to the nsatz tactic to obtain proof automatically using Gröbner basis.

        Formalization of Euclid's Elements

        Euclid's ElementsRegarding the formalization of Euclid's Elements, GeoCoq contains two different approaches:

        • The first approach consists in formalizing Euclid's statement without trying to formalize the original proofs. Then we can try to minimize the assumptions. For example, we have formalized Gupta's proof that midpoint can be constructed without circle/circle continuity axioms, whereas the original proof by Euclid needs this assumption. We gather Euclid's statements formalized using this approach here. Export to html with GeoGebra figures is here.
        • The second approach consists in trying to formalize the original proofs. This is not completly possible because Euclid's proofs contain some gaps, but it can be done to some extent by introducing the missing axioms and reordering some proofs. The formalization of first book of the Elements has been completed by Michael Beeson and then exported to Coq. The details are given in this paper. These proofs have also been exported to Hol-Light, see the webpage of this project. The Coq formalization consists of:
          • Our formalization of Euclidean axioms
          • Some adhoc tactics
          • Book 1
          • Going from Tarski's axiom to Euclid's axioms
          • Going from Euclid's axioms to Tarski's axioms

        Connection with Hilbert's axioms

        HilbertGrundlagen der GeometrieMost of the axioms of Hilbert are implicitely proved in the book, but we explicit all the proofs here. We define lines by couple of points... This work is described in this paper. We also proved that Tarski's axioms follow from Hilbert's axioms.

        • Tarski to Hilbert A proof that Hilbert's axioms (without continuity) follows from Tarski's axioms.
        • Hilbert to Tarski A proof that Tarski's axioms (without continuity) follows from Hilbert's axioms.

        Variants of Tarski's axiom system

        • Tarski to Makarios The formalization of a short paper by Makarios which shows that by slightly changing an axiom we can delete another axiom.
        • Tarski to Beeson The proof that the constructive axiom system proposed by Beeson is classicaly equivalent to Tarski's axiom system.

        Parallel postulates

        We prove the equivalence between several versions of the parallel postulate including the well known Playfair's postulate, and Euclid's 5th postulate. The details are in this paper.

        • Definition of several versions of the parallel postulate.
        • The equivalences theorems summarizing the results.

        High level theorems

        To give a demonstration of the library and of the tactics, we prove some classical results of high-school geometry.

        • Midpoints theorems
        • Midpoint Thales theorem
        • Varignon's theorem
        • Quadrilaterals and Quadrilaterals with inter dec Definition of some quadrilaterals and their properties.
        • Orthocenter theorem
        • Circumcenter theorem
        • Gravity center theorem
        • Incenter theorem
        • Euler line
        • Circumcenter theorem
        • Euler line

        Contributors

        • Michael Beeson
        • Pierre Boutry
        • Gabriel Braun
        • Roland Coghetto
        • Charly Gries
        • Julien Narboux
        • Dan Song

        Forum

        If you seek help about GeoCoq please using the following forum:

        GeoCoq Group

        Licence

        The code is released under the terms of the LGPL version 3.0.

        How to install

        We are working on a proper documentation, please contact us if you need help.

        Manual installation

        To use this library, first you need to install Coq.

        We tested GeoCoq 2.3.0 using Coq versions 8.5pl3, 8.6.1 and 8.7beta. The previous versions are not supported. Then download and unpack the files, it will create a GeoCoq directory. In this directory, type ./configure and make to compile the files, it will create some .vo files. It takes a while to compile (> 30 minutes).

        Using opam pacakage manager

        You can install both Coq and GeoCoq using opam. See the instructions here.

        opam repo add coq-released https://coq.inria.fr/opam/released
        opam install -j4 -v coq-geocoq

        Related papers

        (To come)

        Related work

        Larry Wos and Michael Beeson have studied Tarskian Geometry using Otter: An amazing approach to plane geometry and Finding Proofs in Tarskian Geometry.