Skip to content
back to the presentation
Talk summary2020Fellow

Modern Approaches to Software Development

Product development begins before coding and continues after release. This talk expands the simple idea-to-implementation model to include design, data storage, delivery, quality, security, and operations. Drawing on Tinkoff examples, the author explains why functioning software is not necessarily easy to evolve or suitable for real-world use.

Devfest 20203 min read

This summary is shorter than the original material; examples and assessments reflect the author’s experience and views.

The main thread of the material
01

Requirements and dependencies determine evolvability

Rapid implementation without extensive design can suit a prototype or research project. Problems arise when that code becomes a long-lived system: accumulated dependencies make subsequent changes harder. Teams therefore need to distinguish what they are building from how they will build it, considering quality characteristics alongside functionality. Reliability and maintainability belong in product discussions, not outside them.

The author describes internal structure through layers and Clean Architecture's dependency rule: domain logic should not depend on external implementation mechanisms. At the system level, the talk covers monoliths, service-oriented design, and microservices. A monolith can be a reasonable starting point. Decomposition requires meaningful boundaries, for which domain-driven design can help; a higher service count is not itself evidence of a better design.

02

Data and delivery need deliberate engineering choices

The storage overview distinguishes transactional and analytical workloads, relational databases, object storage, and distributed processing. These tools address different problems. Selection should follow access patterns, scale, and consistency requirements, rather than treat each new storage category as a mandatory next step for every system. Distributed environments make the consequences of chosen guarantees particularly important.

Delivery evolves from manually copying files to scripts and full CI/CD pipelines. Infrastructure similarly moves from individual servers through virtualization and cloud resources to containers and platform services. These approaches make deployment, scaling, and repeated operations more manageable. Some responsibilities move to a platform or provider, while understanding application requirements and checking the result remain the team's work.

03

Quality, security, and operations belong in one cycle

Testing only immediately before release discovers problems too late. Shifting quality work left brings QA into requirements discussions: test cases clarify expected behavior, while participation in design improves testability. Checks can then be automated during development. Security likewise needs early involvement, so the final review is not the first time specialists encounter the system or identify expensive changes.

Work continues after release. SRE treats operations as an engineering problem, while DataOps connects data flows with analysis and product development. Observing how the product is used informs the next cycle of decisions. This model is more involved than coding each incoming idea, but the connections between stages make it possible to deliver defined qualities and keep evolving the product. No individual tool can replace a coherent process.

Takeaways

What to take away

  1. 01Design must account for functionality and quality, with dependencies that allow future changes.
  2. 02Storage, architecture, and infrastructure choices should follow workloads and requirements.
  3. 03Quality and security start with requirements; operations and data complete the product development cycle.

Sources