README.md in foobara-0.0.17 vs README.md in foobara-0.0.18
- old
+ new
@@ -1,10 +1,43 @@
# Foobara
-Foobara is a command-based software framework with an emphasis on reflection features to facilitate integration with
-other systems or subsystems. The focus of the framework is to provide these features to help
-with managing domain complexity in projects with higher domain complexity. However, Foobara
-is also expected to be pleasant for use in projects with simpler domains as well.
+Foobara is a software framework meant to help with projects that have
+a complicated business domain. It accomplishes this by helping to
+build projects that are command-centric and discoverable, as well as some other features.
+
+### Commands
+
+* Foobara commands are meant to encapsulate high-level domain operations.
+* They serve as the public interface to Foobara systems/subsystems.
+* They are organized into Organizations and Domains.
+
+### Discoverability
+* This means there is a formal machine-readable description of the systems/subsystems
+* The implication of this is that integration code can be abstracted away.
+
+### Implications of command-centric + discoverability
+* The system better communicates the mental model of the problem and the chosen solution
+* Engineers are able to spend more time writing code relevant to the domain and less time
+ writing code related to specific tech-stack, software pattern, or architecture decisions.
+* Engineers can spend more time operating within a specific mental model at a time instead of
+ multiple mental models all at once.
+
+### Other features for helping with Domain complexity
+
+* Domain mappers
+ * These can map a concept from one domain to another.
+ * This separation of concerns leads to commands that have code
+ that reflects the domain they belong to as opposed to logic from many different domains.
+* Remote commands
+ * These have the same interface as commands that live in other systems and act as a proxy to them.
+ * This allows rearchitecting of systems without changing interfaces and so reducing refactoring/testing required.
+ * These currently exist for both Ruby and Typescript
+* An extract-repo script
+ * Can be used to extract files from one Foobara project to another, preserving history.
+ * Making this easier can help with rearchitecting systems.
+* Custom crud-drivers (if needed)
+ * You could hypothetically write your own custom CRUD driver that knows how
+ to assemble an entity record with a clean mental model from a mismodeled legacy database.
## Installation
To add foobara to an existing project, you can add `foobara` gem to your Gemfile or .gemspec as you normally would.