4. What to expect
● Fundamentals of Application Architecture
● Thinking above just functionality ( Oh! It works)
● Some techniques and patterns of how to craft and design
software that perform at scale.
● Identifying some performance bottlenecks in code and cross
cutting concerns
● I also want to listen to your contributions
5. What this is not about
● Writing code i.e for another day
● Talking about infrastructure (may be i’m not the guy to tell you
about it )
● Attempting to cover all the design patterns or architectures
(are you sure you want to do that?)
● Attempt to cover every performance bottlenecks
6. Imagine that you have a huge(500GB) log file, that contains one hash per line, like:
4eca9bfff1a7db8d6211894b73c730a4
e2c503457ceee545d9e241b428e1957f
d093abb24912040ee4b4d96a90ccaf3c
4eca9bfff1a7db8d6211894b73c730a4
daf709c31432cb30a53bdf50150813bb
d093abb24912040ee4b4d96a90ccaf3c
● Your goal is to get a unique list of hashes from this file.
● Your are not limited by _any_ tool, programming language and approach.
● How would you solve this task? Remember about the performance and memory
consumption.
7. Tools driven approach to software
development doesn’t cut it when
you have to write software that
scales by default
7
11. Layered Architectural Pattern
From Microsoft Application Guide 2.0
This is the foundation of all
architectural patterns that you’ve heard
about today like MVC, client server
architecture.
It is a high level pattern that impacts
the overall structure of the application
both logically and Physically
The layered architecture pattern
embodies the principle of separation
of concerns
Getting the model of the business
right is a sure bet for a project success
12. What I mean by Software that scales by default
● Performance as the application grows
● Organization, as the project grows
● Maintainability as the Team grows
Every Software that we write must scale in these (3) ways:
13.
14. Tips about optimizing performance as the application grows
● Let the database do what it knows how to do
● Be Proactive about using performance monitoring tools as you
write code e.g Datadog, Scout APM, etc
● Don’t keep the user waiting for too long ( use background jobs)
● Try to minimize the amount of query generated if possible as
you write code
● Think about batching for mass updates, etc
15. From Scout APM
Scout APM used for monitoring Memory Bloat and Database in development
16. Tips about Maintainability as the team grows and organization as the
project grows
Institute Software development practices that helps absorb
change:
- Think about Test Driven Development
- Think About deployment Patterns i.e CI & CD
- Think about source code management tools
- Think about design principles as you write code e.g Separation
of concerns, Don’t Repeat Yourself
17. “It is hard to read code than to
write it” -(Joel)
17