Challenges in R&D
Horizontal Scaling Requirements
Because internet traffic is bursty, traffic in some modules varies greatly.
Can we withstand the traffic increase by adding application replicas? Can the number of replicas adapt automatically to the traffic level?
These are things to consider while writing the code.
Faster Delivery Cadence
Every iteration should have at least one complete delivery.
The larger the project and the more code there is, the longer it takes to add one new feature and the more testing is required.
How do we speed up delivery? Can we let a group of users try it first, and then roll it out gradually, lowering the risk of delivery?
High Reliability Requirements
One line of code with a bug bringing down the entire system happens all the time.
How do we shrink a bug's blast radius and confine system-breaking behavior to a small area? When a failure occurs, how do we detect and recover quickly?
Any tiny error, amplified by heavy traffic, becomes fatal. Internet applications place new demands on a system's fault tolerance, stability, and self-healing ability.
A Diverse Technology Stack
New technologies keep emerging, and using different stacks within one system can be an advantage.
The typical case is frontend-backend separation: TypeScript on the frontend, Python on the backend. In fact, on the backend side we may split further, using Rust for the core, Go for cloud-native integration, and Python to expose the API.
The reasons for choosing a multi-language, multi-framework stack vary — team skills, performance requirements in a given scenario, or dependence on particular features.
Once the stack becomes diverse, the cost of managing all these services rises sharply.