There is a singularity to developer and user experience: one click.
Every click above that first click must justify itself, and it's the developer and product managers job to try to return to one click whenever possible.
OpenQ Implementation
boot.sh: Clones all microservices, boots with docker-compose in one click.
Leaked source code should never expose your app to exploits. Only leaked secrets should be.
Open Source (even read-only permissioned open source) is a challenge more corporates should take on.
OpenQ Implementation
Everything from our auth server to our TLS certificate manager is open source.
Readership of documentation drops with every click away from the codebase. So does usership.
Put your documentation and product at the place where it is most useful.
OpenQ Implementation
Configuration consists of variables which define how external services are access.
Configuration should be fully externalized from the application, provided to the application via environment variables, and version controlled.
Failing to externalize all configuration makes it operationally onerous or impossible to:
- Run your full stack locally
- Separate test, development, staging and production environments
- Run mock local environments when you want to focus on design and frontend
- Unit test
- Support multiple blockchains (contract addresses and ABIs, network provider URLs, and chain identifiers)
Failure to version control configuration leads to:
- Inability to atomically upgrade and rollback multiple interrelated services in unison
- (Second Order Consequence of the above ^) Fear of making changes for lack of a Ctrl+Z undo option.
OpenQ Implementation
OpenQ-Helm: values
files
Loading environmnet in Kubernetes from secrets, ConfigMaps, and JSON provided at build time.
You would never see a tech company brag about how they use Postgres or MongoDB on their main consumer website. So why do they do so with blockchain?
Often it is to extract marketing value from what should be an implementation detail of the software stack.
Blockchain is a decentralized compute and storage platform with the potential for societal impact rivalled in recent decades only by the advent of the Internet.
But it is still meant to do the same thing as all other software: provide humans with something valuable.
Where blockchain is round-peg-square-holed into products which benefit little or negatively from decentralization, one's red flag 🚩 alert should go off.
The areas in which OpenQ leverages decentralized options:
- Smart escrow through smart contracts: Programmable money lets OpenQ pay out bounties only to the rightful contributors, refund bounties for uncompleted tasks, all without intermediaries.
- Decentralized accounting with ERC20/ERC721: ERC20 and ERC721 have everything we need to accept all kinds of cryptocurrencies and digital assets as bounties
- Indexing, event sourcing and data aggregation with The Graph
Better technical solutions should win on utility, not marketing value.
Though we are not fully decentralized yet, we have a roadmap to get there as soon as it is technologically possible to do so without compromising on user experience.
- Internet Computer: Deploy our microservices to workers running on Internet Computer
- API3 Airnode for Github: Work with Github and API3 to help Github expose public user and repository data directly on-chain using Airnode. Since Github is an inherently centralized data source (unlike price feeds or weather data), using Chainlink's impressive Decentralized Oracle Networks (DONs) infrastrucutre would be redundant, adding higher cost for bounty withdrawls with limited to no increase in security.
- Use Handshake for DNS Resolution
In the meantime, a healthy mix of centralization and decentralization provides the best developer and user experience.
OpenQ Implementation
- OpenQ-Oracle
- Coingeck API
- Caching coin prices with Redis
How to properly add a service: https://github.com/OpenQDev/OpenQ-Frontend/pull/294/files