Skip to content

Instantly share code, notes, and snippets.

@akingdom
Last active July 9, 2024 04:12
Show Gist options
  • Save akingdom/bf3f498810a33e17f2d6d12425ef51ff to your computer and use it in GitHub Desktop.
Save akingdom/bf3f498810a33e17f2d6d12425ef51ff to your computer and use it in GitHub Desktop.
Six Principles for Creating a Programmable System

Six Principles for Creating a Programmable System

By Andrew Kingdom

  1. User-Centric Design: The system should be designed with a core intent of assisting users to leverage their existing knowledge and experiences. This means the system should be intuitive and familiar, allowing users to apply what they already know to interact with and navigate the system effectively. Using familiar metaphors is one way to do this.

  2. Multi-Sensory Interactivity: Users should be able to create interactive elements that can be interacted with not only visually (e.g., through touch or gesture on a screen), but also through other senses. For example, users could create elements that respond to voice commands (auditory) or provide haptic feedback (tactile). This multi-sensory interactivity can enhance the user experience and make the system more accessible to a wider range of users.

  3. Inclusive Language and Symbolic Representations: The system should offer multiple modalities for instructions, including spoken language and symbolic representations. This would make the system more inclusive, catering to users with different cognitive abilities and communication preferences. For instance, for users with extreme autism who might struggle with complex language constructs, the system could use live symbolic representations of a 'story' such as me food now please.

  4. Modularity: The system should promote a modular approach to software development. One core function/intent of a modular system is to promote reusability and efficiency. A user could create a module for a specific task, and then reuse that module in different parts of the system or in different projects, without having to rewrite the same code or process each time.

  5. Stateful Event-Driven Model: The system should react to events as they occur, maintain a history of past events, and provide context-aware responses based on its current state and history.

  6. Extensibility: The system should allow more experienced users to extend its functionality. This means that users should be able to add new features or modify existing ones to better suit their needs.

These principles ensure that the system is user-friendly, inclusive, efficient, responsive, and adaptable, while also complying with international legal requirements.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment