A business model for Ajabbi

Mike's Notes

Here are more notes about what I have been learning.

Resources

References

  • Reference

Repository

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

Last Updated

17/05/2025

    A business model for Ajabbi

    By: Mike Peters
    On a Sandy Beach: 24/02/2025

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

    The New Zealand Ecological Restoration Network (NZERN) was originally behind Pipi. I was its founder and National President and was responsible for the design of Pipi. Many people helped with the work. Pipi 4 was highly successful in New Zealand. It drove the 17th most popular website in NZ for many years, but it ultimately failed because NZERN was financially dependent on funding from the NZ government. They changed their funding criteria just like the weather. They also demanded processes that got in the way of serving the many users best.

    I didn't have a way to understand the problem at the time. Much later, I discovered business models for businesses and non-profits like NZERN, which can lead to better decision-making.

    In 2016, I realized that Pipi was a decade ahead of its time and an early form of cloud computing. I also realised that if the applications it could run were broader, income could be generated, making it financially self-supporting. Things like health, space, utilities, transport, agriculture, and movies.

    I then discovered Alex Osterwalder, Steve Blank, Eric Reis, and Ash Maurya, who all developed systematic methodologies for achieving success using simple tools called Canvases.

    So, in 2017, while I rebuilt the core of Pipi 4 from memory and called it Pipi 6, I also deep-dived into cloud computing to catch up with recent changes and watched video talks from DevOps teams on better processes. I also systematically studied the experiences of others in launching new products and how to ensure success.

    In 2025, Ajabbi is mission-driven, not a business, and will use the Mission Canvas. However, a small company has been established to collect usage fees and pay bills. All profits will be donated to a mission-driven foundation that supports open-source SaaS applications and users. A separate R&D institution is also planned for the long-term development of Pipi. Each will be quite different and need its own canvas.

    Open Handbooks are also being written, so everything is open.

    You can read the detailed history of Pipi on this blog.

    Rabinowitz, Boudin, Standard, Krinsky & Lieberman

    Mike's Notes

    Note

    Resources

    References

    • Reference

    Repository

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

    Last Updated

    26/11/2025

    Rabinowitz, Boudin, Standard, Krinsky & Lieberman

    By: Mike Peters
    On a Sandy Beach: 23/02/2025

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

    Preparing for launching Ajabbi to make Pipi available is extensive. One area of focus is legal issues and how to deal with them.

    My attitude in life is to prepare for the worst and expect the best.

    I have founded and led many organisations and managed large, complex projects. To cope with the unexpected, it is always better to over-prepare than under-prepare.

    Unfortunately, the world is dominated by large, nasty outfits that will stop at nothing to protect their interests, including mounting legal challenges. I'm thinking about future legal firms that might be required to provide further assistance in different countries.

    I want to work with people whom I can trust. I would like to hear other people's recommendations.

    • Rabinowitz, Boudin, Standard, Krinsky & Lieberman (RBSKL).
      • Famous New York-based law firm
      • Highly ethical

    • Hudson Gavin Martin
      • Auckland-based law firm in NZ
      • I had a great meeting with Partner Edwin (Ed) Lim in November 2025, whom I had previously met via KiwiSaaS. Certainly knew his stuff.
      • Can draft up the software licences for different account types
      • Setting up an IP company separate from the trading companies required in different jurisdictions.
      • Setting up a charitable foundation to receive the net profit.
      • The bits in between.

    Building a Devops Engine

    Mike's Notes

    Here are some working notes from my current job on Pipi 9.

    Resources

    References

    • Reference

    Repository

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

    Last Updated

    17/05/2025

    Building a Devops Engine

    By: Mike Peters
    On a Sandy Beach: 22/02/2025

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

    Tonight, I started back on the DevOps Engine (dvp) after several years of absence (March 2023, to be exact).

    The engine is based on The DevOps Handbook, which was written by Gene Kim, Jez Humble, Patrick Debois, and John Willis and published by IT Revolution.


    "A DevOps toolchain is a set or combination of tools that aid in delivering, developing, and managing software applications throughout the systems development life cycle, as coordinated by an organisation that uses DevOps practices.

    Generally, DevOps tools fit into one or more activities that support specific DevOps initiatives: Plan, Create, Verify, Package, Release, Configure, Monitor, and Version Control." - Wikipedia.

    First, I had to solve many other dependencies to determine what needed to be done on this engine. Then, in December 2024, I could create a reasonable roadmap for Pipi, which has been made public and works.

    I'm using the published roadmap as if it were a product of the DevOps Engine, and I'm working backwards to correct the necessary process model.

    The key priorities are high quality, fast flow speed and automation.

    The data model is designed to maximise flow.

    Everything is pinned back to the NameSpace Engine (nsp), and any rendering uses the existing working engines.

    There is a constant interdependency between these engines, which maintain each other.

    The DevOps Engine deals with flow. Each of the 8 steps will have its own engine, often working with other engines, such as the existing Feature Flag Engine or the Canary Engine.

    I am already tweaking the roadmap, replacing "Goal" with "Function" and "OKR" (Objective and Key Results).

    The Versioning Engine (ver) will also be impacted, as each engine's version increments with DevOps updates and flows onto Pipi's versioning.

    Version logging has been off since Pipi 7 and will be turned on once automation is in place. I don't use version control; I keep dated drawings in ring binders. However, version control will become necessary as complexity increases, especially when teams are established.

    Here are some of the initial options for the model in the DevOps Engine.

    Options

    • WBS
    • Step
    • Priority
    • Flow Status
    • Started
    • Completed
    • Time Taken
    • Verb
    • Function
    • OKR
    • Scope
    • Task
    • Assigned
    • WIP
    • Batch Size
    • % Resource Busy

    WBS

    Example: "1.2".

    Step

    1. Plan
    2. Code
    3. Build
    4. Test
    5. Release
    6. Deploy
    7. Operate
    8. Monitor

    Priority

    • Low
    • Medium
    • High

    Flow Status

    • Yet to Start
    • Underway
    • Completed

    Started

    24/12/2024

    Completed

    25/12/2024

    Time Taken

    Example: 6,000 seconds.

    Verb

    • Edit
    • Make
    • Render
    • Test

    Function

    Example: "Workspace".

    OKR

    Example: "Workspace Upgrade 3".

    Scope

    • Name of namespace object.

    Task

    Example: "Export the Google Sheet to DevOps engine".

    Assigned

    • Name of person/team/robot responsible.

    WIP

    • Example: 5

    Batch Size

    • Example: 1

    % Resource Busy

    • Example: 85%

    Smashing Meets Future of Design Systems

    Mike's Notes

    Smashing Magazine held a free online meeting in February 2024 about the future of design systems. Panellist Brad Frost argued for a library of common design components that could be styled differently. This would replace the hodgepodge of hundreds of design systems that use components built differently.

    As a result, the top one million web pages have an average of 50 accessibility errors per page.

    His article is copied below. The original has more information and links.

    I agree with Brad 100%. A Global Design System would be great for Pipi CMS. I will ensure that the Pipi Design System components can be easily swapped.

    Resources

    References

    • Reference

    Repository

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

    Last Updated

    17/05/2025

      A Global Design System

      By: Brad Frost
      bradfrost.com: 09/012024

      TL;DR: This is a call to action to create a Global Design System that provides the world’s web designers & developers a library of common UI components. A Global Design System would improve the quality and accessibility of the world’s web experiences, save the world’s web designers and developers millions of hours, and make better use of our collective human potential.

      Sounds pretty good, right? In this article, I’ll talk about our collective design system journey, the rationale for creating a Global Design System, some thoughts on how to make a Global Design System actually happen, and discuss how a Global Design System would impact the world’s web designers and developers. Let’s dig in!

      Our design systems journey

      Once upon a time, people had to design, construct, and maintain a bespoke user interface for each and every web digital product. This was manageable when an organization’s digital landscape looked something like this:

      But as we all know, the digital landscape has exploded into a cacophony of websites, web apps, native mobile applications, and other software applications we can collectively call “digital products.” It’s not unusual for an organization’s digital product landscape to look something like this:

      Designing, building, and maintaining a bespoke user interface for each individual digital product is expensive, inefficient, and fraught. And so a chorus of voices rings out across organizations the world over: “Let’s stop reinventing the wheel! Let’s save designers and developers time and agony! Let’s promote consistency and cohesion! Let’s ship higher-quality users interfaces!” This is the rallying cry for what we have come to know as design systems.

      Over the past ~10-15 years, concepts around modular UIs have matured, technologies have been born, and tools have evolved to create a library of common user interface components that power an organization’s portfolio of digital products.

      With a design system in place, product teams can wield the design system’s buttons, form controls, accordions, and other common UI components in order to increase speed, improve UI quality, and free teams up to work on more worthwhile tasks. This approach has proven to be very effective, and now design systems have become a best practice employed by digital organizations of all shapes and sizes around the world. Hooray design systems!

      Our duplicative present

      And we all live happily ever after, right? Well, not so fast. Organization-wide design systems have eased the individual burden of designing/building (and redesigning/rebuilding ad nauseam) common solutions over and over again. But an ironic pattern emerges: every organization ends up building solutions that overlap substantially with what every other organization is building. Our efforts to reduce duplicative work at the individual level are resulting in duplicative work at the inter-organization level.

      An illustration demonstrating a large collection of org-specific design systems and digital products served by each design system.

      This phenomenon is understandable: organizations are trying to bring order where they have influence. (We see this within organizations as well, where several production teams under the same roof build their own systems because they don’t have influence beyond their group to build an org-wide system.) But the result is the same: now we have a meta design system problem.

      Right now, vast numbers of human beings are devoting their time and energy to designing, building, documenting, and maintaining the exact same set of common components. Accordions that open when a user clicks them. Accordions that — you guessed it — close when a user clicks them again. Datepickers that…pick dates. Tabs that switch panels when selected. Form fields that associate labels with their respective inputs. Alerts that communicate success, error, warning, and information status. Dialogs and tooltips and drawers oh my! By and large, these components are unexceptional commodities that assume the same general shape and behavior regardless of whether the design system serves a non-profit, a federal agency, a bank, a publication, an e-commerce site, a Fortune 500 enterprise, a dog salon, a startup, SaaS company, you get the picture.

      These basic UI components are tricky to get right. Looking across the World Wide Web, 0 of the top 100 websites use valid HTML, and our collective accessibility game is abysmal. The WebAIM Million project crawls the top million websites and reliably delivers a depressing annual report about the state of website accessibility:

      "Across the top one million home pages, 49,991,225 distinct accessibility errors were detected—an average of 50.0 errors per page." - WebAIM Million

      While these issues can’t solely be attributed to the constant reinvention of common UI components, they certainly contribute to the problem! Historically our approach to this important issue has been to shout louder at developers to construct things with accessibility as a primary consideration, but that strategy doesn’t appear to be working.

      All of this duplicative work yields experiences that still suffer serious quality deficiencies, and there are even more wrinkles to consider. Each design system is isolated and disconnected, which means each organization is left to its own devices to ensure the library keeps up with the web’s ever-evolving best practices. Updating components to adopt new HTML elements, attributes, and techniques has so far been a manual process that is delicate and error-prone. And it’s a two-way street: there’s not a clear path for the broader web to benefit from excellent solutions and ideas that were born in org-specific systems.

      So what are we to do? Let’s return to our wise design systems rallying cry: “Let’s stop reinventing the wheel! Let’s save designers and developers time and agony! Let’s promote consistency and cohesion! Let’s ship higher-quality users interfaces!”

      Only now let’s redirect that rallying cry outside of any individual organizations’ walls and apply it to the world at large.

      A proposal for a Global Design System

      "When the design system is boring, it frees designers and developers to do the new stuff, to solve new problems. The design system carries the burden of the boring, so that designers and developers don’t have to." - Josh Clark

      There is a massive opportunity to save the world’s designers and developers millions upon millions of hours, freeing up time and human potential to work on far more pressing problems than making an accordion open and close.

      There’s a massive opportunity to dramatically improve the accessibility, semantics, and overall quality of the world’s web experiences.

      There’s a massive opportunity to harness the collective brain power of the world’s best and brightest.

      There’s a massive opportunity for the web community to demonstrate to a volatile world what true worldwide collaboration and cooperation looks like.

      I think there’s a massive opportunity to create a Global Design System.

      An illustration showing a global design system bubble on the left with an arrow pointing right to a collection of smaller bubbles representing organization-specific design systems

      A Global Design System would centralize common UI components, reduce so much of this unnecessary duplication, integrate with any web-based tech stack, and create a connected vehicle for delivering front-end best practices to the world’s web experiences.

      What exactly would a Global Design System look like? We’ll get to that, but first let’s talk about how it differs from a few things that already exist.

      A layer on top of HTML

      You might be asking, “So you’re saying we just need to add a bunch of new elements to the HTML spec?” To which my answer is “Maybe!” But also “Maybe not!”

      HTML is amazing, and provides the elemental pieces we need to make websites and apps work. I think about HTML elements and attributes as the most elemental, low-level IKEA furniture parts:

      A picture of small Ikea components: dow rods, brackets, and screws

      Historically, that’s all developers have had to work with. We’d rummage around the pile and pick out the things we need to create our products. As we’ve already discussed, there’s a lot of room for error in this process; it’s a bit like drawing the rest of the owl.

      Thanks to the tireless work of browser folks and standards bodies, I think that by and large we have most HTML elements and primitives in place to make most common web user interfaces. What we need now are more prefabricated UI components that abstract away much of the close-to-the-metal HTML and give developers composed, ready-to-use modules to drop into their projects.

      We don’t necessarily need more HTML elements; we need more sturdy pre-fabricated components that developers can drop in with confidence.

      Many — or even most! — web developers shouldn’t need to understand many close-to-the-metal HTML concepts in order to make web applications function. What would it mean to centralize the markup of dozens of common components and provide those as plug-and-play solutions to back-of-the-front-end developers?

      A Global Design System can also serve as an incubator or test kitchen for new HTML elements or properties. We see this with recipes in the layered design system ecosystems we encounter; great ideas born in product-specific layers can eventually be absorbed by the lower-level system. The HTML standards process is necessarily slow, deliberate, and comprehensive, so a Global Design System layer on top of HTML can pragmatically help developers get things done now while also creating a path to future inclusion in the HTML spec if applicable.

      Why don’t we just use [third-party library]?

      For many years, we’ve heard “Why doesn’t everyone just use [Material Design | Bootstrap | Tailwind UI | Foundation by Zurb | etc]?” After all, these tools are already constructed, tested, documented, open sourced, and put through their paces by some of the world’s largest organizations.

      This instinct makes a ton of sense! Great artists steal, and there’s a real pragmatism in reaching for existing, sturdy work. However, adopting someone else’s design system surfaces two important issues:

      1. These solutions were (understandably!) created with a specific organization’s specific goals & considerations in mind. The architecture, conventions, and priorities of these libraries are tuned to the organization it serves; they don’t take into account the sheer breadth of the world’s UI use cases.
      2. They nearly always come with a specific default aesthetic. If you adopt Material Design, for example, your products will look like Google’s products. These libraries can be configurable, which is great, but themeabilitiy has limits and often results in many teams fighting the default look-and-feel to achieve custom results. In our experience, this is where folks end up creating a big mess.

      Projects like Headless UI and react-aria provide primitive UI components and functionality without a default look and feel. This is what we’re shooting for! We want the common structure and functionality that third-party components provide, but we often want to bring our own styles to the party. However, many of these libraries are tied to a specific technology, namely React, which limits their reach.

      So while existing libraries are great, they come with a default look and feel that have limits to their customizability. And while headless UI libraries capture the right spirit, they’re tethered to specific libraries or frameworks. What we need is a library of aesthetic-and-technology-agnostic UI components that provides sturdy semantics and functionality while also providing a ton of aesthetic flexibility.

      Making a Global Design System happen

      Here’s where the rubber meets the road. What does this look like? How would all of this go down? Who would be involved? Where would this live? When should this happen?

      The answers to these questions require a lot of conversation, collaboration, and coordination amongst a diverse, yet-to-be-determined set of stakeholders. I don’t pretend to know exactly how to turn this idea into a reality, and I’d very much welcome ideas and conversation about how to make it happen! With that caveat, I’d like to share a few ideas that could be helpful.

      What would a Global Design system be?

      A Global Design System would be a common library containing common UI components currently found in most design systems (Shout out to the brilliant Open UI project for this epic matrix!). In order to be successful, these components would need to be:

      • Vehicles for accessibility and other front-end best practices, creating a single source of truth for common UI components.
      • Easily themeable in order to match any brand or design language.
      • Intuitive to use, providing users with a cohesive & consistent API language, sensible structure, and grokkable syntax.
      • Interoperable to be able to power any website or app.
      • Be internationalized in order to account for the sheer diversity of languages, writing modes, et al. found throughout the world.
      • Be composable and extensible so users can modify or extend the system without having to hack things to pieces.

      Given the above principles, I think it would make sense for the Global Design System to be a library of Web Components. Web Components are part of the web platform and are interoperable (in theory at least) with any web-based tech stack. Setting aside current weirdness with Web Components (that’s a post for another day), they seem like a sensible technology choice for an initiative like this.

      Web Components for a Global Design System could look something along the lines of these examples:

      <w3c-text-field 

        label="Email Address" 

        type="email" 

        required>

      </w3c-text-field>


      <w3c-alert variant="error">

         <w3c-icon name="stop" slot="icon"></w3c-icon>

         Your credit card is expired. Please update your information.

      </w3c-alert>


      <w3c-button-group>

        <w3c-button variant="primary">Log In</w3c-button>

        <w3c-button>Cancel</w3c-button>

      </w3c-button-group>

      For all you literal people out there, take all of this with a grain of salt. I’m not proposing this exact syntax or structure; take this as a “for instance” gesture sketch.

      A Global Design System would exist as a standalone library of components that consumers would pull into their projects, style to match their brand/visual language, and integrate into their application’s business logic. Not only would this be far more efficient than having to design, build, test, deploy, and integrate bespoke components from scratch, a Global Design System would give teams added confidence that the components are sturdy and reliable.

      Of course it would also make sense to create a corollary UI library in Figma and other design tools that share the same API, structure, conventions, and default appearance as the Global Design System code library. And of course there would need to be solid reference documentation for this library, which would take the burden away from each and every design system team on the planet to define and describe what a freaking button is. And while we’re at it, it likely makes sense to consider native mobile and desktop operating systems as well; while these environments differ in important ways, there are also many shared conventions that a Global Design System can help define or inform.

      What wouldn’t a Global Design System be?

      I think there are a few special callouts for what a global design system wouldn’t be. A Global Design System wouldn’t:

      • Provide a particular aesthetic – Think of this as a vanilla base containing only browser-default styles. People can create their own custom themes or use styles contained in Tailwind, Open Props, Bootstrap, Material, et al. In our experience working with scores of different design systems, common components have a shared general semantics and behavior, but are styled dramatically different. Think Global Design System + CSS Zen Garden.
      • Be a comprehensive solution for all UI needs – It’s impossible to account for every use case on the planet. Think pragmatism and the 80/20 rule here. If the Global Design System could provide solutions for the majority of use cases for a given component, that would be a huge win! But what if you have a need to make a custom SVG starburst button that does a backflip when you click on it? That’s fine! We still have the ability to make our own special pieces of UI the old-fashioned way. This is also why a layer on top of HTML might be a better approach than extending HTML itself; HTML has to account for all use cases, where a Web Component library can limit itself to the most common use cases. It would be critical for the library itself to be quite conservative and focus on extremely common use cases or else it would buckle under its own weight and endless requests from the peanut gallery. Governance would be key!

      Who

      I tend to define a design system as the official story of how an organization builds user interfaces. A design system needs to be tuned for the specific digital product landscape that exists at an organization in order for it to be successful. But the organization we’re talking about here is this:

      This is the target organization for a global design systen.

      Because of the global nature of this effort, it couldn’t be owned by a specific corporation. With that said, it seems like it would make sense for huge tech companies to sponsor and fund an effort like this!

      From my perspective, an organization like the W3C would be the best home for something like this. Their mission is pretty hand-in-glove with this whole idea:

      The World Wide Web Consortium (W3C) develops standards and guidelines to help everyone build a web based on the principles of accessibility, internationalization, privacy and security.

      It’s also worth mentioning the amazing Open UI project, which has been doing a lot of the hard legwork on rounding up common UI components across many popular design systems. And I have no doubt there are many other organizations, projects, and people from the design system community who would love to participate in an effort like this.

      Where

      A Global Design System would need to consist of a set of assets that include:

      • A code repository containing the source code for the Web Components
      • Any necessary code packages (npm, yarn, composer) to deliver the Web Components to any environment. (Note: reliance on JS, packages, etc is something to address in order to create components that can be easily used by any web environment. This post by Lea Verou captures how the modern landscape creates barriers for people to create/use Web Components)
      • A design library in popular design tools like Figma and Sketch.
      • A reference website to provide documentation and information about the project.

      Where exactly those things would live is determinant on a whole slew of factors, so we can leave it here for now.

      How

      As mentioned before, I have no idea how exactly this would all go down. I’d figure it would require a lot of conversation, alignment, and coordination before anything tangible could happen. Here’s my hand-wavy stab at a process from my naive outsider perspective:

      • Have conversations with any interested party, including: standards bodies, relevant existing groups, design system teams, individual designers & developers, etc to get some momentum going.
      • Probably create a working group or similar to start moving forward in a more formal way.
      • Do research to better understand what common UI components and variants should exist in a Global Design System. Have conversations with and learn from popular design system teams and popular UI library maintainers. Talk to product designers and web developers to better learn what their pain points are and learn what they’d like to see in a Global Design System. Involve experts in accessibility, semantics, internationalization, and other relevant specialists to ensure a Global Design System embodies best practices. Sync with Open UI to see how this overlaps with their existing work. Study existing design systems. Conduct an interface inventory across the web to capture a cross-section of in-the-wild use cases.
      • Lay out a plan of attack to build a Global Design System library. Define what exactly it is, align on technology choices, establish architecture, align on naming conventions, etc. Establish a roadmap for creating and delivering the Global Design System components. Figure out who’s doing what, and so on.
      • Design and build – This is the easy part 😂. Design, build, document common UI components according to the architectural conventions. Test alpha/beta releases with guinea pigs.
      • Release – Make the Global Design System components available to use; get everyone in the web community to evangelize, and get prominent design systems and projects to adopt the new library.
      • Iterate – Add new components and variants to the library according to the roadmap. Get feedback, etc.
      • Govern – A core group would of course need to govern the design system on an ongoing basis to address issues, field requests, protect the system’s integrity, and so on. This would obviously be a tough gig considering the global nature of the project, but I’d imagine it would be fulfilling in the same ways that working on big globe-spanning projects are.

        Something like that. Again, my perspective is naive so take all of this with a grain of salt. For now, let’s at least get the conversation part started!

        When

        I’ve had the opportunity to speak about this topic at several conferences, and I’ve thoroughly enjoyed the subsequent discussion about the prospects of a Global Design System. The number of “I’ve been saying this for years!” and “you have my sword!” responses leads me to believe there’s a strong appetite for a Global Design System. People are hungry for this to happen, the technologies are now largely in place, and the whole industry has a far better understanding of component-driven design and development. I think the time for a Global Design System is now.

        What would this mean for the world’s web designers and developers?

        I think that a Global Design System has the potential to transform how web designers and developers do their jobs.

        When I talk about design systems, I often talk about respect and human potential. Every design system team having to build their own common components isn’t a respectful use of their time and potential. Lord knows there are some wicked problems to solve, so let’s free our hands and brains up to work on those problems instead!

        If a Global Design System existed, what would design system teams do? While I understand anxiety around being replaced (hey, we hear this about design systems from product designers & developers all the time), there’s still plenty of work to do. I find this tremendously exciting: design system teams would be freed up to focus on more interesting aspects of creating great digital products than simply component construction.

        Plenty of the current work would remain:

        • Crafting a design language – The design system team would continue to be responsible for the applying the brand’s application to digital product as a thoughtful design language.
        • Documenting guidelines for specific use and context of components within the organization would still need to

        But there would also be a huge opportunity to free teams up to focus on bigger-picture issues. In our work at Big Medium, we help our clients with the human, process, product-level, and organization-level aspects of design systems. This is the stuff that truly makes or breaks a design system effort, but too often gets lost in the ground-level work of component production. With a Global Design System in place, teams could:

        • Architect and orchestrate a thoughtful design system ecosystem that helps the organization ship better products faster, realizing the value of a design system.
        • Collaborate with production teams to create and curate high-value product-specific design patterns, on top of the common UI.
        • Create smart components that are wired up and ready to integrate into product codebases.
        • Build new automation tools (hello, AI!) to scaffold designs, code, and tests quickly.
        • Use the design system to bust barriers between disciplines, especially between design and development. A Global Design System can help these world’s get closer together, but
        • Help consuming teams make great UX and development decisions with common and org-specific components.
        • Capture, curate, and celebrate the organization’s standards, best practices, and innovations.

        Freed from much of the mechanical production work, design system teams can spend more time on the stuff that is truly unique to the organization. There’s still a ton of work to do, and that remaining work makes better use of our human intellect.

        What’s next?

        That’s a damn good question! How to transition from “A Global Design System seems like a good idea” into “let’s do this!” is a big question mark. So I’ll pose the question to you: what’s next? What do you think about the idea of having a Global Design System? Good idea? Bad idea? What would you like to see in a Global Design System? How do you envision it all going down?

        I believe in the web. There have been many weird twists and turns over the years, but the idealistic embers of the World Wide Web are still burning. I want the web to thrive, and I want people working to build the web to thrive and realize their potential as human beings. I bet you feel the same way. So let’s make a Global Design System happen together!

        What if

        Mike's Notes

        This is a note to self; there are some questions I need to answer.

        I'm doing some helpful free "start-up" training at NZTE, CreativeHQ, Startup Aotearoa, etc., which involves thinking about some hard questions and putting words onto several canvases. The people are all excellent, making me do a lot of thinking.

        Pipi is not a simple app. It uses a novel architecture to help solve enormous, complex, and challenging problems.

        How do I explain to anyone interested in what Pipi provides?

        Resources

        References

        • Reference

        Repository

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

        Last Updated

        17/05/2025

        What if

        By: Mike Peters
        On a Sandy Beach: 20/02/2025

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

        • A complete enterprise SaaS system took 24 hours to automatically deploy for a customer.
        • Built out of reusable modules that automatically sync with no limit on the number of modules.
        • New modules can be simply and quickly created using no code.
        • It can start small and cheaply with minimal risk with one module, then add more as needed.
        • No sales engineers.
        • All self-service.
        • Fully configurable by their DevOps team using no code.
        • The enterprise SaaS was 100% open-source.
        • Its underlying industry model was constantly improved by the users of all deployments.
        • Industry Ontology and standards-based.
        • Customer data stays with the customer and is invisible to the platform.
        • Any human language or writing script can be used.
        • Community-provided translation and localisation
        • Its code base was completely obfuscated (all UUID).
        • Each deployment had a unique code obfuscation.
        • Only the UI, API and stored data use actual words.
        • The platform is a closed-source black box with all parameters visible.
        • A unique enterprise SaaS system was fully delivered on time and on budget.
        • Costs are cut by an order of magnitude.
        • Long-term low-cost of ownership.
        • It can scale simply.
        • Able to make use of existing tools like Kubernetes, Docker, etc.
        • Designed to run on most Cloud providers, giving users options and data sovereignty.
        • Encourages an open ecosystem without moats, including 3rd party support, training, plugins, etc.
        • Had a fully-synced closed-source visible digital twin for experiments and system learning.
        • It can be integrated via API without restrictions.
        • It didn't need a super-computer with thousands of cores.
        • The whole thing is owned by a public good foundation, so there are no investors, corporate highjacking or enshittification risks.
        • Public open handbook.

        Open questions

        • What kind of problems does Pipi solve?
        • Why do these problems exist?
        • Why solving these problems is essential?
        • Would it be beneficial to society?
        • What's wrong with the existing alternatives?
        • Would people use it?
        • Would enough people pay to use it to make it viable?
        • Would it reduce the waste of software failure?
        • What kind of Foundation would be needed?
        • How would the developer community be supported?
        • How would R&D be supported?

        Free Geometry Books, Problems and More

        Mike's Notes

        I discovered this fascinating website dedicated to Olympiad geometry problems. It includes geometry articles, books, magazines, shortlists for juniors and seniors, and problem collections with solutions from national, regional, and international mathematical Olympiads.

        The books are in PDF format.

        The geometry problems all have a worked solution on AoPS (Art of Problem Solving).

        Resources

        References

        • Reference

        Repository

        • Home > Ajabbi Research > Library > Subjects > Mathematics
        • Home > Handbook > 

        Last Updated

        17/05/2025

        Article

        By: Mike Peters
        On a Sandy Beach: 20/04/2025

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

        OOUX

        Mike's Notes

        Object-oriented UX (OOUX) involves "Identifying objects, their characteristics, and relationships in an experience. This can help simplify designs and make systems easier to use by aligning with people's mental models" (Credit: Sophia Prater).

        I recently discovered OOUX and these resources. I have already been working roughly this way without realising it had a name (OOUX).

        The examples in the OOUX documentation include some details I should also use.

        Pipi 9 uses model-driven user interfaces. I should change the model diagram to explicitly include OOUX and label it as such.

        The current render chain is DDD > Wfl > AUI > CUI > FUI > LUI > PUI

        Resources

        References

        • Reference

        Repository

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

        Last Updated

        17/05/2025

        OOUX Talks

        By: Sophia Prater
        YouTube: Playlist

        OOUX: A Foundation for Interaction Design

        By: Sophia Prater
        A List Apart: April 19, 2016

        There’s a four-year story behind my current design process, something I introduced last year on A List Apart—“Object-Oriented UX.” The approach advocates designing objects before actions. Now it’s time to get into the deeper benefits of OOUX and the smooth transition it can set up while shifting from object-based system design to interaction design.

        "The “metaphor,” once found, is a perfectly definite thing: a collection of objects, actions on objects, and relationships between objects." - Dave Collins, Designing Object-Oriented User Interfaces (1995)

        Imagine you’re designing a social network that helps chefs trade recipes requiring exotic ingredients. With good ol’ fashioned research, you develop a solid persona (Pierre, the innovator-chef, working in a gourmet restaurant) and you confirm the space in the market. You understand the industry and the project goals. Now it’s time to put marker to whiteboard.

        Where would you start designing?

        Would you start by sketching out an engaging onboarding process for chefs? We do need chefs to make this thing successful—no chefs, no network! So maybe we start by making sure their first interaction is amazing.

        Or maybe you start with one of the most frequent activities: how a chef posts a new recipe. And that could easily lead you to sketching the browsing experience—how will other chefs find new recipes?

        Three or four years ago, I’d start by storyboarding a critical user path. I’d start with the doing.

        Pre-OOUX, my initial design-thinking would look something like this. I’d figure out the interaction design while figuring out what a recipe actually should be.

        I imagine many other user experience designers begin the same way, by designing how someone would use the thing. One interaction flow leads to the design of another interaction flow. Soon, you have a web of flows. Iterate on those flows, add some persistent navigation, and voilà!—you have a product design.

        But there is a problem with this action-first approach. We are designing our actions without a clear picture of what is being acted on. It’s like the sentence, “Sally kicked.” We’ve got our subject (the user) and we’ve got our verb (the action). But where’s the object? Sally kicked what? The ball? Her brother? A brain-hungry zombie?

        When we jump right into actions, we run the risk of designing a product with a fuzzy reflection of the user’s mental model. By clearly defining the objects in our users’ real-world problem domain, we can create more tangible and relatable user experiences.

        These days, a lot happens before I begin sketching user flows (in this article, I use “user flow” and “interaction flow” interchangeably). I first define my user, asking, “Who’s Sally?” Next, I figure out her mental model, meaning all the things (objects) that the problem is made of, all the things she sees as part of the solution, and how they relate to one another. Finally, I design the interactions. Once I understand that Sally is a ninja armed with only a broomstick, and that she is faced with a team of zombies, I can better design the actions she’ll take.

        In retrospect, I feel like I was doing my job backwards for the first two-thirds of my career, putting interaction flows before building an object-oriented framework. Now, I would figure out the system of chefs, recipes, and ingredients before worrying about the chef onboarding process or how exactly a chef posts a recipe. How do the objects relate to one another? What content elements comprise each object? Which objects make up my MVP and which objects can I fold in later? Finally, what actions does a user take on each object?

        That’s what Object Oriented UX is all about—thinking in terms of objects before actions. In my previous article, we learned how to define objects and design a framework based on those objects. This time, we’re exploring how to smoothly transition from big-picture OOUX to interaction design by using a very simple tool: the CTA Inventory.

        What’s a CTA Inventory, and why is it important?

        Calls to action (CTAs) are the main entry points to interaction flows. If an interaction flow is a conversation between the system and the user, the CTA is a user’s opening line to start that conversation. Once you have an object framework, you can add possible CTAs to your objects, basically putting a stake in the ground that says, “Interaction design might go here.” These stakes in the ground—the CTAs—can be captured using a CTA Inventory.


        A CTA Inventory is a bridge from big-picture OOUX to detailed interaction design.

        A CTA Inventory is just a fancy list of potential CTAs organized around your objects. Since most (all?) interactions involve creating, manipulating, or finding an object, we create this inventory by thinking about what a user wants to do in our system—specifically, what a user wants to do to objects in our system.

        Creating a CTA Inventory does two things. First, it helps us shift gears between the holistic nature of system design to the more compartmentalized work of interaction design. Second, it helps us:

        1. think about interactions creatively;
        2. validate those interactions;
        3. and ultimately write project estimates with greater accuracy.

        Let’s explore these three benefits a little more before creating our own CTA Inventory.

        Creative constraints improve brainstorming

        Simply understanding your objects will help you determine the things that a user might do with them. We know that Sally wants to destroy zombies—but it’s only after we’ve figured out that these are the fast, smart, light-averting zombies that we can be prepared to design exactly how she’ll do it.

        When we think about interactions in the context of an object, we give ourselves a structure for brainstorming. When we apply the constraints of the object framework, we’re likely to be more creative—and more likely to cover all of our bases. Brainstorm your actions object by object so that innovative features are less likely to fall through the cracks.

        For example, let’s think about the object “ingredient” in our Chef Network app. What are all the things that Pierre might want to do to an ingredient?

        • Mark the ingredient as a favorite.
        • Claim he’s an expert on the ingredient.
        • Add the ingredient to a shopping list.
        • Check availability of the ingredient at local stores.
        • Follow the ingredient to see new recipes that are posted using this ingredient.
        • Add a tip for using this ingredient.

        By using the object framework, I might uncover functionality I wouldn’t otherwise have considered if my brainstorming was too broad and unconstrained; structure gives creative thinking more support than amorphous product goals and squishy user objectives.

        Validate actions early

        Good news. You can user-test your system of objects and the actions a user might take on them before spending long hours on interaction design. Create a prototype that simply lets users navigate from one object to another, exploring the framework (which is a significant user goal in itself). Through observation and interviews, see if your system resonates with their mental model. Do you have the right objects and do their relationships make sense? And are the right “buttons” on those objects?

        Armed with a simple prototype of your interconnected objects and their associated CTAs, you now have a platform to discuss functionality with users—without all the hard work of prototyping the actual interactions. In a nutshell: talk to your users about the button before designing what happens when they click it.

        Interaction design can be some of the most difficult, time-consuming, devil-in-the-details design work. I personally don’t want to sweat through designing a mechanism for following chefs, managing alerts from followed chefs, and determining how the dreaded unfollow will work…if it turns out users would rather follow ingredients.

        Estimate with interaction design in mind

        As we’ve established, interaction design is a time- and resources-devouring monster. We have to design a conversation between the system and the user—an unpredictable user who requires us to think about error prevention, error handling, edge cases, animated transitions, and delicate microinteractions. Basically, all the details that ensure they don’t feel dumb or think that the system is dumb.

        The amount and complexity of interaction design your product requires will critically impact your timeline, budget, and even staffing requirements, perhaps more than any other design factor. Armed with a CTA Inventory, you can feel confident knowing you have solid insight into the interaction design that will be handled by your team. You can forecast the coming storm and better prepare for it.

        So, do you love this idea of better brainstorming, early validation, and estimating with better accuracy? Awesome! Let’s look at how to create your amazing CTA Inventory. First, we will discuss the low-fidelity initial pass (which is great to do collaboratively with your team). Next, we will set up a more formal and robust spreadsheet version.

        CTA Inventory: low-fidelity

        If you haven’t read my primer on object mapping, now would be a great time to go and catch up! I walk you through my methodology for:

        • extracting objects from product goals;
        • defining object elements (like core content, metadata, and nested objects);
        • and prioritizing elements.

        The walk-through in the previous article results in an object map similar to this:


        An object map before layering on a CTA Inventory.

        I’ve used outlined blue stickies to represent objects; yellow stickies to represent core content; pink stickies to indicate metadata; and additional blue stickies to represent nested objects.

        A low-fidelity CTA Inventory is quite literally an extension of the object mapping exercise; once you’ve prioritized your elements, switch gears and begin thinking about the CTAs that will associate with each object. I use green stickies for my CTAs (green for go!) and stack them on top of their object.


        An object map with a quick, low-fidelity CTA Inventory tacked on. Potential CTAs are on green stickies placed next to each object.

        This initial CTA brainstorming is great to do while workshopping with a cross-functional team. Get everyone’s ideas on how a user might act on the objects. You might end up with dozens of potential CTAs! In essence, you and your team will have a conversation about the features of the product, but within the helpful framework of objects and their CTAs. Essentially, you are taking that big, hairy process of determining features, then disguising it as a simple, fun, and collaborative activity: “All we’re doing is brainstorming what buttons need to go on our objects! That’s all! It’s easy!”

        Each object might need roughly 10–15 minutes, so block out an hour or two to discuss CTAs if your system has three to five objects. You’ll be surprised at the wealth of ideas that emerge! You and your team will gain clarity about what your product should actually do, not to mention where you disagree (which is valuable in its own right).

        In our chef example, something pretty interesting happened while the team was hashing out ideas. During the CTA conversation about “ingredient,” we thought that perhaps it would be useful if chefs could suggest a substitute ingredient (see circled green sticky below). “Fresh out of achiote paste? Try saffron instead!” But with that in mind, those “suggested substitute ingredients” need to become part of the ingredient object. So, we updated the object map to reflect that (circled blue sticky).


        Although I always begin with my objects and their composition, CTA brainstorming tends to loop me back around to rethinking my objects. As always, be prepared to iterate!

        CTA Inventory: high-fidelity

        CTAs can get complicated; how and when they display might be conditional on permissions, user types, or states of your object. Even in our simple example above, some CTAs will only be available to certain users.

        For example, if I’m a chef on an instance of one of my own recipe objects, I will see “edit” and “delete” CTAs, but I might not be able to “favorite” my own recipe. Conversely, if I’m on another chef’s recipe, I won’t be able to edit or delete it, but I will definitely want the option to “favorite” it.

        In the next iteration of our CTA Inventory, we move into a format that allows us to capture more complexities and conditions. After a first pass of collaborative, analogue brainstorming about CTAs, you might want to get down to business with a more formal, digitized CTA Inventory.


        A detailed CTA Inventory for our chef network example. Dig in deeper on the actual Google Sheet.

        Using a Google spreadsheet, I create a matrix (see above) that lets me capture thoughts about each object-derived CTA and the inevitable interaction flows for each one:

        • Why do we even have this CTA? What’s the purpose, and what user or business goal does it ladder up to?
        • Who will trigger this CTA? A certain persona or user type? Someone with a special permission or role?
        • Where will the CTAs live? Where are the obvious places a user will trigger this interaction flow? And are there other creative places we should consider putting it, based on user needs?
        • How much complexity is inherent in the interaction flow triggered by this CTA? This can help us estimate level of effort.
        • What is the priority of this interaction flow? Is this critical to launch, slated for a later phase, or a concept that needs to be researched and validated?
        • What questions and discussion points does this CTA raise?

        Before you start designing the interactions associated with each of your CTAs, get comfortable with the answers to these questions. Build an object-oriented prototype and validate the mental model with users. Talk to them and make sure that you’ve included the right doorways to interaction. Then you will be perfectly positioned to start sketching and prototyping what happens when a user opens one of those doors.

        A solid foundation for designing functionality

        You’ve collaboratively mapped out an elegant object-oriented design system and you’ve created a thorough CTA Inventory. You built a rough, clickable prototype of your system. With real users, you validated that the system is a breeze to navigate. Users pivot gracefully from object to object and the CTAs on those objects make sense for their needs. Life is good.

        But OOUX and a CTA Inventory will not help you design the interactions themselves. You still have to do that hard work! Now, though, as you begin sketching out interaction flows, you can feel confident that the functionality you are designing is rooted in solid ground. Because your CTA Inventory is a prioritized, team-endorsed, IxD to-do list, you’ll be more proactive and organized than ever.

        Most important, users getting things done within your system will feel as if they are manipulating tangible things. Interacting will feel less abstract, less fuzzy. As users create, favorite, add, remove, edit, move, and save, they will know what they’re doing—and what they’re doing it to. When you leverage an object-based CTA Inventory, your product designs and your design process will become more elegant, more streamlined, and more user-friendly.

        About the Author

        Sophia V. Prater is founder and lead UX designer of Rewired and the chief evangelist of Object-Oriented UX. Sophia teaches her OOUX methodologies at conferences, within companies, and through her OOUX Certification Program. She is the host of the OOUX Happy Hour meetup and the OOUX Podcast.

        Sophia has brought the complexity-untangling magic of OOUX to companies such as Facebook, Mastercard, Macy’s, Credit Karma, Hubspot, Intercom, Delta Airlines, CNN, and many more.