Tl;dr - Define architectural backend for Status and the specifications of the modules required to deliver current functionality and beyond
The IFT would like the Status App teams to come up with an ideal architecture specification for the Status backend (status-go
). This work would be a partial effort from all parties involved (No 100% FTE allocation), i.e. it doesn’t hinder current user growth and retention efforts.
With it, it defines
- the modules (e.g. draft specifications) it needs to consume to replicate current functionality
- the manner it creates business logic around these modules to surface features
- the process in which it surfaces these features to a front end
- the orchestration mechanism that facilitates all of this
The resultant deliverable needs to satisfy the following org constraints:
- defines clear product/business deliverables that are made possible by underlying changes; the delivery of those product goals, in a layered, modular, and spec’s manner is the “Definition of Done”[1]
- facilitates the ability to efficiently consume project capabilities (inside IFT and out), develop business logic around them, and surface them to the front-end.
- logically built to be efficient, from both a performance perspective as well as maintenance and contribution perspectives.
- allows for easily built, Status compatible, front-end clients based on surfaced features
- can efficiently consume Nim packages, as the initial targeted consumed modules would be Nwaku (networking), Chat SDK, Nimbus (potentially light client proxy), Logos Core, and Codex (large data storage and retrieval)
- should prioritize internal (or recommended) dependencies (IFT) over external ones.
- clear separation of concerns, who owns what across the stack should be intuitive and understood.
The Status team should leverage key resources within the IFT to confirm compatible architectures.
A draft of these deliverables should be ready to present and discuss at the All Hands in Croatia.
[1]: A note on this one for clarification. The business case drives the tech. We most definitely don’t want to find ourselves in a position where we’re just “refactoring code” as engineers and that effort is completely divorced from the features we’re providing to users in order to grow adoption and retention. These two things go hand-in-hand.
Some Motivation as to why (very non-exhaustive)
The Status backend suffers from significant historical and technical debt, and lacks a number of properties deemed vital to its long term success.
- Many of the CCs that made the decisions that lead to the current architecture are not here anymore. The lack of documentation and knowledge passing has lead to current maintainers not fully understanding the codebase they’re responsible for.
- the separation of Vac/Waku from Status and no strong communication afterwards left portions of the codebase without clear ownership (chat protocols).
- incorporation of new protocols and the development of new features and business cases for Status is slow and difficult to reason about
- e.g. identifying issues with Waku performance being caused by Waku or Status’ implementation being difficult, no integration of Nimbus or verification proxy
- It has been difficult to abstract away key protocols within the codebase
- e.g. Chat SDK and communities
- It is effectively impossible for the community to “build on Status,” limiting our ability to grow a developer community or any permissionless innovation of the ecosystem.
- the start of liblogos, a core to web3 clients
The IFT needs a function within itself that fosters an efficient road from new infrastructure functionality to user facing access to it. Having such a thing serves multiple purposes:
- valuable user feedback and live performance testing to new functionality within our infrastructure projects
- quick adoption of novel features to test new business cases
- separation of concerns
Status should be the vehicle for this. So let’s start mapping a road to make it one.
As always, feedback, requests for clarification, and criticism welcome.
edits:
- altered wording around the timeline and quality of expected delivery
- added historical ownership motivational reason
- typos