Knowledge Library
Software Engineering Concepts
Explore software architecture, design patterns, system design and engineering fundamentls.
Architecture
Software Architecture
Understand how a system's major parts are organised, how they collaborate, and how architectural decisions influence quality attributes throughout the software lifecycle.
Requirements Engineering
Translate user needs into explicit functional behavior, measurable quality goals, constraints and assumptions that can guide design and verification.
System Design
Quality Attributes in System Design
Understand availability, reliability, performance, scalability, security and the trade-offs that determine whether a system is fit for its workload.
Scalability
Explore vertical and horizontal scaling, stateless application design, database bottlenecks, indexing, connection pooling, replicas, partitioning and sharding.
Load Balancing
Learn how load balancers distribute incoming traffic, perform health checks and provide a stable entry point to horizontally scaled application instances.
Caching in System Design
Understand cache hits, misses, cache-aside, write strategies, TTL, invalidation, stampedes, penetration, eviction and Redis failure handling.
Database Design for Backend Systems
Explore relational modelling, keys, relationships, normalisation, indexes, transactions, connection pools, query planning, pagination, replication and backups.
Design Patterns
Singleton Pattern
Understand the creational pattern that restricts a class to one instance within a defined application scope and provides a shared access point.
Factory Method Pattern
Delegate the creation of a product to creator implementations so client code depends on abstractions rather than concrete constructors.
Builder Pattern
Construct complex objects step by step with readable configuration, optional parameters and validation before the completed object is returned.
Adapter Pattern
Make incompatible interfaces work together by translating the interface expected by the client into calls understood by an existing component.
Bridge Pattern
Decouple an abstraction from its implementation so both hierarchies can vary independently without a combinatorial explosion of subclasses.
Composite Pattern
Represent part-whole hierarchies as trees and let clients treat individual objects and groups through one common interface.
Decorator Pattern
Attach responsibilities to an individual object dynamically by wrapping it with objects that implement the same interface.
Facade Pattern
Provide a unified, higher-level interface to a complex subsystem while keeping subsystem coordination behind a simpler entry point.
Flyweight Pattern
Reduce memory usage by sharing reusable intrinsic state across many fine-grained objects and passing context-specific extrinsic state when operations are performed.
Proxy Pattern
Place a surrogate in front of a real object to control access and add behaviour such as security checks, lazy initialisation, caching or remote communication.