Architecture scaling and lifecycle
- Validate ideas first with mocks and ads to gauge interest and gather data
- Refine idea with first few hardcore fans to iterate on
- Use tools that are easy and familiar to validate early ideas
- (But consider long-term consequences of not using simple ones)
- Examine data model for relationships
- Traditional RDBMS if relational data, where referential integrity is important
- PostgreSQL
- Heroku integration
- Free, open-source
- Good optimizations
- Battle-tested reliability, community, performance
- NoSQL when horizontal scaling is paramount and eventual consistency is sufficient
- Graph databases for graph-like data
- Mono-repo monolith
- Minimal cognitive load for new, smaller codebase
- Established fully-featured framework (e.g., Luminus, Next.js, Ruby on Rails, Django, etc.)
- Quick setup
- Conventions over configuration
- Minimal bikeshedding, analysis paralysis
- Community of libraries/add-ons
- 12factor principles
- Server-side rendering
- Integrated data binding
- Migration generation
- Documented schema
- Bulma CSS to Bootstrap basics
- PaaS infrastructure to minimize reliability issues and management (e.g., Heroku)
- Use other services to ramp up quickly
- Test business value feedback loop as quick as possible
- Mobile-first, responsive web apps
Expansion: Proven founder-product-market fit
- More custom SQL instead of with ORMs
- Database views for security
- Established testing frameworks (e.g., clojure.test, Jest, RSpec, Capybara, etc.)
- Many Unit tests
- A few system, end-to-end tests of core functionality
- Test-driven development
- Inexpensive adaptability
- High test coverage
- Simple tests
- Model domain a simple as possible
- Minimize premature optimization
- Break off a few major services that are fundamentally separate
- Explore other technologies outside of The Citadel
- Lower-level for performance
- Larger community for hireability and tooling
- Types for easing larger scale refactoring
- Typescript/Golang?
- Auto-scaling via Cloud infrastructure (e.g., AWS, Google Cloud, etc.)
- API Gateway
- Single domain for API
- Let outside developers interface with back-end
- GraphQL (optional)
- Front-end declarative data fetching
- Less knowledge of back-end API necessary
- CDN front-end
- Feature flagging for testing in production
- More, stronger testing
- A/B Testing with a lot of data to optimize key metrics
- Dedicated specialists
- Go to the metal or create your own metal if performance is needed
- Consider building own, custom infrastructure
- For business-specific problems
- Native front-ends
- iOS/Android
- Vanilla JS, less libraries