We build this software on the shoulders of giants - amazing open source projects that provide us with the technologies to create an amazing tool to make the job of timekeeping easier and more enjoyable.
Rather than taking the monolithic framework approach, Aurelia is composed of smaller, focused modules.
It enables applications to store data locally while offline, then synchronize it with CouchDB and compatible servers when the application is back online, keeping the user's data in sync no matter where they next login.
These are just the biggest building blocks, but we use many other great open source tools and frameworks that we will give credit here soon.
We use modern concepts and patterns of software design to create a solid and maintainable base for the functional components required. The choices we made were based upon years of experience and research.
Domain Driven Design (DDD) is a methodology to put the knowledge domain at the core of the software design.
An ubiquitous language that is based on the language of the domain experts helps to communicate between business and developers.
With Event Sourcing the application stores data changes rather than overwriting a latest snapshot.
It therefore prevents losing valuable information of change history. Also, it allows for very efficient and precise conflict resolution when working colaboratively on data.
Command Query Responsibility Segregation is a natural consequence of using EventSourcing and a pattern that clearly separates write and read concerns on an architectural level.
It thereby allows for specifically optimized write and read storages (databases) and in combination with EventSourcing enables to produce multiple optimized representations of the same application changes.
Model-View-ViewModel is one of the various MV* patterns and widely used in web frontend frameworks.
It has a clear separation of the UI (View) and the data model (ViewModel) that is displayed within the View. That way it is much easier to test user interfaces automatically and optimize the user experience independently of the representation logic.