Learning
  • Software Engineering Golden Treasury
  • Trail Map
  • Caching
    • Alternatives to use before using cache
    • Caching Architecture
    • Cache Invalidation and Eviction
    • Cache Patterns
    • Cache
    • Consistency
    • Distributed Caching
    • Issues with caching
    • Types of caches
  • Career
    • algo types
    • Backend Knowledge
    • Burnout
    • consultancy
    • dev-level
    • Enterprise Developer
    • how-to-get-in-tech-from-other-job
    • how-to-get-into-junior-dev-position
    • induction
    • Interview
    • junior
    • mid
    • New Job
    • paths
    • Principle/staff Engineer
    • Requirements for job
    • Senior Dev capabilities
    • learning
      • automating-beginner
      • company1
        • analyst-progression
        • core-eng-progression
        • dev-progression
        • perf-eng-progression
        • soft-deliv-progression
    • mentoring
      • mentor-resources
    • recruitment
      • questions
      • Spotting posers
  • Computer Science
    • boolean-algebra
    • Compiler
    • Finite State Machine
    • Hashing
    • Algorithms
      • Breadth Firth Search
      • complexity
      • Depth First Search
      • efficiency
      • Sliding Window
      • sorting
    • data-structures
      • AVL Trees
      • data-structures
      • Linked List
    • machines
      • Intel Machine
      • Turing Machine
      • von neumann machine
      • Zeus Machine
  • devops
    • The 5 Ideals
    • microservice
    • Artifact repository
    • Bugs and Fixes
    • Build police
    • cloud-servers
    • Deployments
    • Environments
    • GitOps
    • handling-releases
    • infrastructure-as-code
    • System Migrations
    • SDP
    • On Premises Hosting
    • Properties/configuration
    • Release process
    • Release
    • Roll Outs
    • serverless
    • Serverless
    • Cloud Services
    • Versioning
    • AWS
      • deploy-docker-esc
      • cloud-practitiioner-essentials-notes
        • Module 1 - Intro to AWS
        • Module 2 Compute in the cloud
        • Module 3 Global Infrastructure and Reliability
        • Module 4 Networking
        • Module 5 Storage and Databases
        • Security
        • 7 Monitoring and Aanlytics
        • 8 Pricing and Support
        • 9 Migration and Innovation
      • developer-associate
        • AWS Elastic Beanstalk
    • build-tools
      • Managing dependecies
      • Apache ANT
      • Gradle
        • Custom Plugins
        • local-jars
      • Project Management - maven
        • Archtypes
        • Build Lifecycles
        • Customising build lifecycle
        • Dependencies
        • Directory layout
        • jar-files
        • one-to-one
        • Modules
        • Phases
        • Maven Plugins
        • POM
        • profiles
        • setup
        • Starting a maven project
        • wrapper
    • CI/CD
      • Continuous Delivery
      • zookeeper
      • Continuous Integration (CI)
      • github-actions
      • Pipeline
      • Teamcity
    • Cloud computing
      • Overview
      • Service Models
      • Cloud Services
    • containers
      • Best Practices
      • Docker
    • Infrastructure
      • IT Infrastructure Model
      • Non functional Attributes (Quality Attributes)
        • Infrastructure Availability
        • Performance
        • Secruity
    • monitoring
      • Alerting
      • Monitoring & Metrics
      • Metrics
      • Ready pages
      • Splunk
      • Status pages
      • notes-devops-talk
      • logging
        • logging
        • issues
        • Logging
        • Logging
    • Service mesh
      • Service Discovery
      • Istio
    • Terraform
    • container-management
      • Kubernetes
        • commands-glossary
        • OLTP
        • config-maps
        • Links
        • ingress
        • SDP
        • minikube
        • filter
        • indexes
        • sidecar
        • continuous-deployment
  • General Paradigms
    • CAP theorem
    • designing data-intensive applications summary
    • a-philosophy-of-software-design-notes
    • Aspect oriented Programming (AOP)
    • Best Practice
    • Cargo Cult
    • Clean Code
    • Coding reflections
    • Cognitive Complexity
    • Complexity
    • Conventions
    • Design discussions
    • Design
    • Error Handling Checklist
    • Exceptions
    • Feature Flags/toggle
    • Functional requirements
    • Last Responsible Moment
    • Lock In
    • Named Arguments
    • Naming
    • Performance Fallacy
    • Quality
    • Redesign of a system
    • Resuse vs Decoupling
    • Rules for software designs
    • Sad Paths
    • Scaling Webservices
    • Scientific Method
    • stream-processing
    • Upstream and Downstream
    • Patterns
      • Client-SDK-Pattern
      • ORM
      • Api gateway
      • Business Rules Engine
      • cache
      • Composition Root
      • Dependency Injection Containers
      • Dependency Injections
      • Double Dispatch
      • Exception Handling
      • Gateway pattern
      • Humble Object
      • Inheritance for reuse
      • Null Object Pattern
      • Object Mother
      • Patterns
      • Collection pipeline pattern
      • Service Locator
      • Setter constructor
      • Static factory method
      • Step Builder Pattern
      • telescopic constructors
      • Toggles
      • API
        • Aims of API designs
        • Avoid Checked Exceptions
        • Avoid returning nulls
        • Be defensive with your data
        • convience-methods
        • Fluent Interfaces
        • Loan Pattern
        • prefer-enums-to-boolean-returns
        • return-meaningful-types
        • Small intefaces
        • Support Lambdas
        • Weakest type
      • Gang of Four
        • Builder
        • Factory Pattern
        • Strategy Pattern
        • Template
        • abstract Factory
        • Adapter
        • Bridge Pattern
        • Chain of responsibility
        • Command Pattern
        • Composite Design Pattern
        • Decorator Pattern
        • Facade Pattern
        • Flyweight pattern
        • Guard Clause
        • Interpreter
        • html
        • Mediator Pattern
        • Memento Pattern
        • Observer
        • Prototype
        • Proxy
        • Singleton
        • State Pattern
        • Visitor Pattern
    • Architecture
      • Entity Component System
      • Integration Operation Segregation Principle
      • Adaptable Architecture
      • Architecture
      • C4 Modelling
      • cell-based
      • Clean/Hexagonal Architecture
      • Codifying architecture
      • Correct By configuration
      • Cost Base Architecture
      • Data Oriented Design
      • deliberate
      • Domain oriented DOMA
      • Event Driven Architecture
      • Evolutionary Architecture
      • examples
      • Feature Architecture
      • Framework and Libraries
      • functional-core-imperative-shell
      • Layered Architecture
      • Micro services
      • monoliths-to-services
      • Multi tiered Architecture
      • Multi tenant application
      • Resilient Architecture
      • stage event driven architecture (SEDA)
      • links spring rest app
      • Tomato Architecture
      • Tooling
      • Types of architecture
      • checklist
        • Checklist for new project
        • Back end Architecture Checklist
        • Front end Architecture Checklist
        • Mobile Architecture Checklist
      • Cloud Patterns
        • Command and Query Responsibility Segregation (CQRS)
        • Event Sourcing & CQRS
        • Asynchronous Request and Reply
        • Circuit Breaker
        • Retry
        • Sidecar
        • Strangler pattern
      • Domain driven design
        • value & entity
      • Microservices
        • Alternatives to choosing microservices first when scaling
        • Consistency in distributed systems
        • 12 Factor applications
      • Modularity
        • Module monolith vs Microservices
        • Spring Moduilth
      • Architecture Patterns
        • Hexagonal architecture
        • Inverting dependencies
        • Layering & Dependency Inversion Principle
        • Mappings
        • Vertical Slice architecture
        • Web Client Server
        • domain
          • Business and Data Layers Separation
          • DTO
          • Domain Model Pattern
          • Domain Object
          • Transaction Script/ Use Case pattern
        • Enterprise Patterns
          • Concurrency
          • Distribution strategies
          • Domain layer patterns
          • Layering/organisation of code
          • Mapping to datasource
          • Session State
        • Usecases
          • Use case return types
      • Serverless
        • Knative
    • Design architecture aims
      • back of envelope
      • Design ideas
      • Design mistakes
      • high-volume-design
      • ISO Quality Attributes
      • Non functional requirements
      • “Designing for Performance” by Martin Thompson
      • High Performance
      • Qaulity Attributes
        • Availability
        • System Availability
        • Fault Tolerance
        • interoperability
        • Latency
        • Maintability
        • Modifiability
        • Performance
        • Readability
        • Reliability
        • Scalability vs performance
        • Scalability
        • Scaling
        • statelessness
        • Testability
        • Throughput
      • System Design
      • web-scalability-distributed-arch
        • scalable-and-distributed-web-architecture
    • README
      • Conflict-free Replicated Data Type
      • Fallacies
      • Load balancing
      • Rate Limiting
      • Transactions
    • Patterns of Enterprise Application Architecture
      • Repository Pattern
      • Rules Engines
      • scatter-gather
      • Specification Design Pattern
      • Table Driven Development
      • Workflow Design Patterns
        • Triggers
    • Principles
      • Do It Or Get Bitten In The End
      • Dont Repeat Yourself
      • Habitability
      • Keep it simple
      • Responsibility Driven Design
      • Ya Ain’t Gonna Need It
      • Conceptual Overhead
      • CUPID
      • Reuse existing interfaces
      • Facts and Fallacies
      • locality of behaviour
      • Separation of Concerns
      • Simplicity
      • SLAP principle
      • Step down rule
      • Unix Philosophy
      • Wrong abstractions
      • SOLID
        • 1. Single Responsibility Principle
        • 2. Open Close Principle
        • 3. Liskov Substitution Principle
        • 4. Interface Segregation Principle
        • 5. Dependency Inversion Principle
        • GRASP (General Responsibility Assignment Software Principles)
        • Solid for packages
          • jobs
          • CCP
          • CRP
          • REP
          • egress
          • gossip-protocol
        • STUPID
    • programming-types
      • Coding to Contract/Interface
      • Links
      • Declarative vs Imperative Programming Languages
      • defensive-programming
      • Design by contract
      • Domain Specific Languages (DSL)
      • Event Driven
      • file-transfers
      • Logical Programming
      • Mutability
      • Self Healing
      • Simplicity
      • Type Driven Design
      • Value objects
      • Aspect Oriented Programming
      • Concurrent and Parallel Programming
        • Actor Model
        • Asynchronous and Synchronous Programming
        • Batch processing
        • Concurrency Models
        • SAP
        • Multithreading
        • Non Blocking IO
        • Optimistic vs Pessimistic Concurrency
        • Thread per connection or request model
        • Actor
        • aysnchronous-tasks
          • Computational Graphs
          • Divide and conquer
          • Future
          • Thread Pool
        • barriers
          • Barriers
          • Race conditions
        • design
          • agglomeration
          • Communication
          • Mapping
          • Partitioning
        • Liveness
          • Abandoned Lock
          • Deadlocks
          • Livelock
          • Starvation
        • locks
          • Read write lock
          • Reentrant lock
          • Try Lock
        • Mutual Exclusion
          • Data Races
          • Mutual Exclusion AKA Locks
        • performance
          • Amdahl's Law
          • Latency, throughput & speed
          • Measure Speed up
        • synchronization
          • Condition variable
          • producer consumer pattern
          • Semaphore
        • Threads and processes
          • Concurrent and parallel programming
          • Daemon Thread
          • Execution Scheduling
          • sequential-parallel
          • Thread Lifecycle
          • threads-and-processes
      • Functional Programming
        • Currying
        • design-patterns-to-func
        • imperative-programming
        • First class functions
        • Functional Looping
        • Higher Order Functions
        • Immutability
        • Issues with functional Programming
        • Lambda calculus
        • Lazy & Eager
        • map
        • Monad
        • Railway Programming
        • Recursion
        • Reduce
        • referential-transparacy
        • Referential transparency
        • Supplier
      • oop-design
        • Issues with object oriented code
        • Aggregation
        • Anti Patterns
        • Association
        • class-and-objects
        • Composition
        • general-laws-of-programming
        • general-notes
        • Getters and Setters
        • Inside out programming
        • Inversion of control
        • oop-design
        • Other principles
        • Outside in programming
        • Readability
        • Why OO is bad
        • README
          • abstraction
          • encapsulation
          • inheritance
          • Polymorphism
        • clean-code
          • Code Smells
          • Comments
          • Naming
          • CLEAN design
            • code is assertive
            • Cohesion
            • Connascence
            • Coupling
            • Encapsulation
            • Loose Coupling
            • Nonredundant code
      • Reactive Programming
        • reactive-programming
    • Projects and Software types
      • Applicatoin Development
      • Buying or creating software
      • Console Applications
      • Embedded Software development
      • Enterprise
      • Framework Development
      • Games
      • Library development
      • Rewriting
      • White Label Apps
    • State Machines
      • Spring State Machine
  • Other
    • 10x devs
    • Aim of software
    • Choosing Technologies
    • Coding faster
    • Component ownership
    • developer-pain-points
    • Developer Types
    • Effective Software design
    • Full Stack Developer
    • Good coder
    • Issues with Software Engineering and Engineers
    • Learning
    • Logic
    • Role
    • Software Actions
    • Software craftmanship
    • Software Designed
    • Software Engineering
    • Software
    • article-summaries
      • General notes
      • Summary of The Grug Brained Developer A layman's guide to thinking like the self-aware smol brained
      • improve-backend-engineer
      • Optimising Api
      • Simple and Easy
    • README
  • Hardware
    • Cpu memory
    • Storage
  • Integration
    • GRPC
    • API
    • Apis and communications between apps
    • asynchronous and synchronous communications
    • Batch Processing
    • Communications between apps
    • Delivery
    • Distributed Computing
    • Entry point
    • Event Source
    • SDP
    • egress
    • Graphql
    • Idempotency
    • Libraries
    • Long Polling
    • Multiplexing & Demultiplexing
    • Publish Subscribe
    • Push
    • Request & Response
    • REST
    • Remote Method Invocation
    • Remote Procedure Calls
    • Server Sent Events
    • Short Polling
    • Sidecars
    • SOAP
    • Stateless and Stateful
    • Streams
    • Third Party Integrations
    • wdsl
    • Web Services
    • Webhooks
    • repository
    • Kafka
      • Kafka Streams
    • message-queues
      • ActiveMQ
      • Dead Letter Queue
      • JMS
      • Messaging
  • Languages
    • C
    • Choosing A Language
    • cobol
    • Composite Data Types
    • creating
    • Date time
    • Numbers
    • Pass by value vs Pass by reference
    • Primitive Data Types
    • REST anti-patterns
    • Rust
    • Scripting
    • Static typing
    • string
    • Task Oriented Language
    • assembly
    • Getting started
      • Functional Concepts
    • cpp
    • Java
      • Code style
      • Garbage Collection
      • Intellij Debugging
      • Artifacts, Jars
      • Java internals
      • Java resources
      • Java versions
      • JShell
      • Libraries
      • opinionated-guide
      • Starting java
      • Java Tools
      • Why use java
      • Advanced Java
        • Annotations
        • API
        • Database and java
        • Debugging Performance
        • Files IO
        • Finalize
        • JDBC
        • jni
        • Libraries
        • Logging
        • SAP
        • Memory Management
        • Modules
        • OTher
        • Packaging Application
        • Pattern matching
        • performance
        • Properties
        • Reference
        • reflection
        • Scaling
        • Scheduling
        • secruity
        • Serilization
        • Time in Java
        • validation
        • Vector
        • Concurrency and Multithreaading
          • Akka
          • ExecutorCompletionService
          • Asynchronous Programming
          • Concurrency and Threads
          • CountDownLatch
          • Conccurrent Data Structures
          • Executor Service
          • Futures
          • reactive
          • Semaphore
          • structured concurrency
          • Threadlocal
          • Threads
          • Virtual Threads
          • Mutual Exclusion
            • Atomic
            • Synchronized
            • Thread safe class
            • Threads
        • debug
          • heap-dumps
          • thread-dumps
        • functional
          • Collectors
          • Exception Handling
          • Flatmap
          • Functional Programming
          • Generators
          • Immutability
          • issues
          • Optional
          • Parallel Streams
          • Reduce
        • networks
          • HTTP client
          • servlet-webcontainers
          • sockets
          • ssl-tls-https
      • Basics of java
        • compilation
        • computation
        • Conditonal/Flow control
        • Excuting code
        • Instructions
        • Looping/Iterating
        • memory-types-variables
        • methods
        • Printing to screen/debugging
        • Setup the system
        • Data structures
          • Arrays
          • Arayslist/list
          • Map
      • Effective Java notes
        • Creating and Destroying Objects
        • Methods Common to All Objects
        • best-practice-api
        • Classes and Interfaces
        • Enums and Annotations
        • Generics
      • framework
        • aop
        • bad
        • Dagger
        • Databases
        • Lombok
        • Mapstruct
        • netty
        • resliance4j
        • RxJava
        • Vert.x
        • Spring
          • Spring Data Repositories
          • actuator
          • cloud-native
          • H2 Db in Spring
          • Initializrs
          • JDBC Template
          • Java Persistence API (JPA)
          • kotlin
          • Pitfalls and advice
          • PRoxies
          • Reactive
          • spring security
          • spring-aop
          • Spring Boot
          • spring-jdbc
          • Spring MVC
          • Spring Testing
          • Testing
          • Transaction
          • patterns
            • Component Scan Patterns
            • Concurrency
            • Decorator Pattern in Spring
        • Micronaut
          • DI
        • Quarkus
          • database
          • Links
      • Intermediate level java
        • String Class
        • Assertions
        • Casting
        • Clonable
        • Command line arguments
        • Common Libraries/classes
        • Comparators
        • Where to store them?
        • Shallow and Deep Copy
        • Date and Time
        • Enums
        • Equals and Hashcode
        • Equals and hashcode
        • Exceptions
        • Final
        • Finally
        • Generics
        • incrementors
        • Null
        • packages and imports
        • Random numbers
        • Regex
        • Static
        • toString()
        • OOP
          • Accessors
          • Classes
          • Object Oriented Programming
          • Constructors
          • Fields/state
          • Inheritence
          • Interfaces
          • Methods/behaviour
          • Nested Classes
          • Objects
          • Static VS Instance
          • Whether to use a dependency or static method?
        • Other Collections
          • Other Collections
          • Arraylist vs Linkedlist
          • LinkedHashMap
          • Linked List
          • Priority queue
          • Sequenced Collections
          • Set
          • Shallow vs Deep Copy
          • Time Complexity of Collections
          • What Collection To use?
    • kotlin
      • Domain Specific Language
      • learning
      • Libraries
      • Personal Roadmap
      • Links
    • Nodejs
      • Performance
  • Management & Workflow
    • Agile
    • Take Breaks
    • # Communication
    • Engineering Daybook
    • Estimates
    • Feedback Loops
    • Little's law
    • Managing Others
    • poser.
    • Presentations
    • self-improvement
    • software-teams
    • Task List
    • trade-off
    • Types of devs
    • Type of work
    • Waterfall Methodology
    • coding-process
      • Bugs
      • Code Review
      • Code Reviews
      • Documentation
      • Done
      • Handover
      • Mob Programming
      • Navigate codebase
      • Pair Programming
      • Pull Requests
      • How to do a story
      • Story to code
      • Trunk based development
      • Xtreme Programming (XP)
      • debugging
        • 9 Rules of Thumb of Dubugging
        • Debugging
        • using-debugger
      • Legacy code
        • Legacy crisis
        • Working with legacy code
    • Managing work
      • Theory of constraints
      • Distributed Teams
      • estimations
      • Improving team's output
      • Kanban
      • Kick offs
      • Retrospectives
      • Scrum
      • Sign offs
      • Stand ups
      • Time bombs
      • Project management triangle
    • Notion
    • recruitment
      • In Person Test
      • Interviews
      • Unattended test
  • Networks
    • Content Delivery Network - CDN
    • DNS
    • cache control
    • Cookies and Sessions
    • Docker Networking
    • Duplex
    • Etags
    • HTTP Cache
    • HTTP - Hyper Text Transfer Protocol
    • HTTP/2
    • Http 3
    • Internet & Web
    • iptables
    • Keep alive
    • Leader Election
    • Load balancer
    • long-polling
    • Network Access Control
    • Network Address Translation (NAT)
    • Network Layers
    • Nginx
    • OSI network model
    • Persistent Connection
    • Polling
    • Proxy
    • Quic
    • reverse-proxy
    • servers
    • Server sent events (SSE)
    • SSH
    • Streaming
    • Timeouts
    • Url Encoding
    • Web sockets
    • WebRTC (Web Real-Time Communication)
    • Wireshark
    • tcp/ip
      • Congestion
      • IP - Internet Protocol
      • TCP - Transmission Control Protocol
  • Operating Systems
    • Cloud Computing
    • Distributed File Systems
    • Distributed Shared Memory
    • Input/Output Management
    • Inter-Process Communication
    • Threads and Concurrency
    • Virtualization
    • Searching using CLI
    • Bash and scripting
    • Booting of linux
    • makefile
    • Memory Management
    • Processes and Process Management
    • Scheduling
    • Scripting
    • Links
    • Ubuntu
    • Unix File System
    • User groups
    • Linux
  • Other Topics
    • Finite state machine
    • Floating point
    • Googling
    • Setup
    • Unicode
    • Machine Learning
      • Artificial Intelligence
      • Jupyter Notebook
    • Blockchain
    • Front End
      • Single Page App
      • cqrs
      • css
      • Debounce
      • Dom, Virtual Dom
      • ADP
      • htmx
      • Island Architecture
      • Why use?
      • Java and front end tech
      • mermaidjs
      • Next JS
      • javascript
        • Debounce
        • design
        • Event loop
        • testing
        • Typescript
        • react
          • Design
          • learning
          • performance
          • React JS
          • testing
      • performance
      • Static website
    • jobs
      • Tooling
      • bash text editor - vim
      • VS code
      • scaling
        • AI Assistant
        • Debugging
        • General features and tips and tricks
        • IDE - Intellij
        • Plugins
        • Spring usage
  • persistance
    • ACID - Atomicity, Consistency, Isolation, Durability
    • BASE - Basic Availability, Soft state, Eventual Consistency
    • Buffer
    • Connection pooling
    • service
    • Database Migrations - flywaydb
    • Databases
    • Eventual Consistency
    • GraphQL
    • IDs
    • indexing
    • MongoDB
    • Normalisation
    • ORacle sql
    • Partitioning
    • patterns
    • PL SQL
    • Replication and Sharding
    • Repository pattern
    • Sharding
    • Snapshot
    • Strong Consistency
    • links
    • Files
      • Areas to think of
    • hibernate
      • ORM-hibernate
    • Indexes
      • Elastisearch
    • relationships
      • many-to-many
      • SDP
      • serverless
      • x-to-x-relationships
    • sql
      • Group by
      • indexes
      • Joins
      • Common mistakes
      • operators
      • performance
    • types
      • maven-commands-on-intellij
      • in-memory-database-h2
      • Key value database/store
      • Mongo DB
      • NoSQL Databases
      • Relational Database
      • Relational Vs Document Databases
  • Security
    • OAuth
    • API Keys
    • Certificates and JKS
    • Cluster Secruity
    • Communication Between Two Applications via TLS
    • Cookies & Sessions
    • CORS - Cross-Origin Resource Sharing
    • csrf
    • Encryption and Decryption
    • Endpoint Protection
    • JWT
    • language-specific
    • OpenID
    • OWASP
    • Secrets
    • Secruity
    • Servlet authentication and Authorization
    • vault
  • Testing, Maintainablity & Debugging
    • Service-virtualization and api mocking
    • a-test-bk
    • Build Monitor
    • Builds
    • Code coverage
    • consumer-driven contract testing
    • Fixity
    • Living Documentation
    • Mocks, Stubs & Doubles
    • patterns
    • Quality Engineering
    • Reading and working with legacy code
    • Reading
    • remote-debug-intellij
    • simulator
    • Technical Debt
    • Technical Waste
    • Test cases
    • Test Data Builders
    • Test Pyramids
    • Test Types
    • Testing Good Practice
    • Testing
    • What to prime
    • What to test
    • Debugging
      • Debugging in kubernetes or Docker
    • fixing
      • How to Deal with I/O Expense
      • How to Manage Memory
      • How to Optimize Loops
      • How to Fix Performance Problems
    • Legacy Code
      • Learning
      • Legacy code
      • techniques
    • libraries
      • assertj
      • Data Faker
      • Junit
      • mockito
      • Test Containers
      • Wiremock
      • Yatspec
    • Refactoring
      • Code Smells
      • refactoring-types
      • Refactoring
      • Technical Debt
      • pyramid-of-refactoring
        • Pyramid of Refactoring
    • Test first strategies
      • Acceptance Testing Driven Developement (ATDD)
      • Behaviour Driven Development/Design - BDD
      • Inside out
      • Outside in
      • Test driven development (TDD)
    • testing
      • Acceptance tests
      • How Much Testing is Enough?
      • Approval Testing
      • Bad Testing
      • End to end tests
      • Honeycomb
      • Testing Microservices
      • Mutation testing
      • Property based testing
      • Smoke Testing
      • social-unit-tests
      • solitary-unit-tests
      • Static Analysis Test
      • Unit testing
  • Version Control - Git
    • Branch by Abstraction
    • feature-branching
    • Git patches
    • Trunk Based Development
Powered by GitBook
On this page
  • Development language
  • Scripting language
  • Architecture Style
  • Backend Concerns
  • Testing Concerns
  • Operations Concerns
  • Development Concerns
  • Secruity/Infosec
  • Front end concerns
  • Links

Was this helpful?

  1. General Paradigms
  2. Architecture
  3. checklist

Checklist for new project

PreviouschecklistNextBack end Architecture Checklist

Last updated 2 years ago

Was this helpful?

Development language

  • Language to use

    • java, c-sharp

  • Features of language

    • Does it allow me to meet the technical needs the application should provide

      • embedded systems - c/c++

      • Low memory and fast - c/c++

      • Machine learning - python

      • enterprise/middleware - java/c#

      • etc

    • Maturity

    • Stability

    • Backwards compatibility

    • Community

    • Cross platform

    • Drivers for hardware or databases

    • libraries

      • Specific for usecase of application ie machine learning

      • Stable and Maintained

      • Huge choice

    • Secruity and language patches

    • memory management - manual or automated

    • memory statistics - jmx, jprofile

    • Modularity

    • Concurrency

    • Knowledge of workers, access to workers

    • Can host on equipment

      • Not an issue with docker

Scripting language

  • bash, python

  • make, ansible

Architecture Style

  • Monolithic

    • Might not support a flexible release cycle but doesn’t need potentially fragile distributed communication.

    • Whole funcitionality can be released at once

  • (micro)- services

    • Flexible, only need to deploy ones that changes

    • Smaller, and thus less code to maintain

    • distrubited so communication and infrastructure maintainance an issue

  • Style, organisation

    • Clean, mvc, domain driven design, framwork??

    • Event driven (async) or synchronous??

    • Modularising and package structure??

      • Java9? OGCD? Static analysis tools

    • 12 factor app

Backend Concerns

  • Logic or domain concerns

  • Logging

    • Use SLF4J with either Logback or Log4J2 underneath.

    • How to manage logs

      • files and or console output

      • length of rentention

      • searchable

      • Format and levels (info/error/warn/debug)

      • Which information should be logged when?

  • Exception handling

    • Should app go down?

  • Application Server

    • WAR that works on a separate server like tomcat/wildfly

      • monolith

    • Embedded server (jetty/spring), the application starts up this server and runs access to the app

      • microservices

      • Docker

  • Job Execution

    • What services are needed to be excuted at a regular interval or time

    • ie leaning up a database or batch-importing third-party data

    • quartz for more features

    • spring for basic jobs

  • Database Refactoring

    • how to update the structure of your relational database between two versions of your software

      • migrations

      • zero down time migrations

    • In small projects, manual execution of SQL scripts may be acceptable,

    • in medium-to-large projects you may want to use a database refactoring framework like Flyway or Liquibase

  • Integrations with internal applications

    • Do we need an adaptor?

  • API Technology

    • How will it communicate with other services

    • third party apis

      • is there a choice? What documentation? Can it be changed on their end?

    • Internal services

      • types of communications

        • http rest, Soap, jms, rpc, files/ftp

      • Contract testing

        • pacts

      • Messeging and queues (Asynchronous communcations)

        • streaming data - kafka

        • message brokers - amq

  • API Documentation

    • The internal and external APIs you create must be documented in some form

  • Measuring Metrics

    • Are there any metrics like thoughput that should be measured while the application is running?

    • Dropwizard

    • Prometheus Java Client.

    • Use Grafana to hava dashboards of graphics

    • Custom metrics, related to application

  • Monitoring

    • metrics

    • status pages

    • application readiness

    • tracing

  • Environment configuration

    • dynamic or static properties

    • Secrets

    • puppet

  • Authentication

    • How will users of the application prove that they are who they claim to be? Will users be asked to provide username and password or are there additional credentials to check?

    • With a client-side single page app, you need to issue some kind of token like in OAuth or JWT, OpenID

    • In other web apps, a session id cookie may be enough.

    • Use of tls or mutual tls, checking certificates that are signed by trusted

    • Basic Auth

  • Authorization

    • how will the application check what the user is allowed to do and what is prohibited?

    • On the server side, Spring Security is a framework that supports implementation of different authorization mechanisms.

  • Database Technology

    • Does the application need a structured, schema-based database?

      • Use a relational database.

    • Is it storing document-based structures?

      • Use MongoDB.

    • Key-Value Pairs?

      • Redis.

    • Graphs?

      • Neo4J.

    • Who manages this?

    • Are we stuck on a specific technology

  • Data

    • Migrations during deployment

    • retention policy (how long to hold onto)

      • Secruity

      • GDPR

    • Secruity

      • What to encrypt when writing

      • What to return

        • ie Not customer details but a token

      • Who has access? What are they authorised to do?

    • Reporting and dataware house

      • what needs to be stored for long term use?

      • Does there need to be a transfer of data to another tech for other teams to use? Or just expose read only views?

    • Audits

      • Communication with third parties

      • What to audit?

      • Where to store?

  • What available libraries/frameworks that we can use?

    • Open source? Version?

    • Passed secruity check?

    • Do we create our own custom libraries?

    • How to make sure frameworks/libraries are not taking over the app

      • What can be part of the whole app or business logic

  • Persistence Layer

    • When using a relational database, Hibernate is the de-facto default technology to map your objects into the database.

    • there are alternative database-accessing technologies like iBatis and jOOQ

    • Spring Data JPA also supports many NoSQL databases like Neo4J or MongoDB.

    • Can use custom access, jdbctemplate or pure jdbc with sql

    • Use sql or orm?

  • Caching

    • Cache replacement policies (https://en.wikipedia.org/wiki/Cache_replacement_policies) ??

Testing Concerns

  • Testing pyramid

  • Full end to end integration tests

  • Acceptance Tests

    • in memory db or test db on container

    • stubbed out apis or brokers

      • wiremock, trafficparrot

  • Unit tests

    • social tests (start from use case)

      • using fakes (which are tested)

    • individual tests

      • using mocks

  • Performance tests

    • SLAs

  • Stress tests

  • Contract testing

    • use this instead of full integration tests

  • Smoke tests

    • automated

    • For deployments into new environments, different clusters

  • Production tests

  • Environments for testing

    • What dependencies are stubbed by us

    • What dependnecies have a test version that can be used

      • how to setup data, get resources

  • Local manual testing

    • docker

  • Documentation from tests

    • Yatspec, cucumber

    • What tests to document

  • Test coverage

    • static style - Pitesting

    • line coverage - jacoco

  • app integration tests

  • Tools

    • Junit, mockito, assertj, hamcrest

    • selenium

  • Component testing

    • dockerised app

    • Use of stub app to prime api calls

  • Manual testing in different environments

    • provide ways to prime for different test cases (ie gui)

    • code primings

Operations Concerns

  • Continuous Delivery

    • Are there automatic tasks that deploy your application to a development, staging or production environment?

    • How will these tasks be executed?

    • Will scripts or configuration files be manually created or automated using minimum info the app needs to run

    • Manual gates

      • A break to ensure the deploying to an environment is though out and everything is ready to go

    • Quality gates

      • fails on status page or smoke tests

  • Release process

    • during day or night

    • who needs to be available

      • Expectations

      • Location

      • Equipment

    • Access to servers/db for fixing bugs

    • Rollback strategy

    • Testing strategy

  • Servers

    • Will the application be hosted on real hardware or on virtual machines?
    • Docker is a popular choice for virtualization nowadays.

  • Management of servers and applications

    • Will this be done manually by SAs ?

    • Will be done using kubernetes ?

    • Will it be on the cloud?

  • Service Registry

    • When building a (Micro-)Service Architecture, you may need a central registry for your services so that they find each other

    • Service mesh

      • istio, consul

  • Database Operations

    • What are the requirements towards the database?

    • Does it need to support hot failover and / or load balancing between database instance?

    • Does it need online backup?

    • What is the deletion process?

  • Central Log Server

    • Especially in a distributed architecture with many deployment units, but also in a monolithic application (which also should have at least two instances running), a central log server may make bug hunting easier.

    • The Elastic Stack (Elastic Search, Logstash, Kibana) is popular

  • Monitoring

    • How is the health of the server instances monitored and alarmed (Icinga may be a fitting tool)?

    • Who will be alarmed?

    • Should there be a central dashboard where all kinds of metrics like thoughput etc. are measured (Prometheus + Grafana may be the tools of choice).

    • How will be supporting the releases? Timetabling?

  • Load Balancing

    • How will the load on the application be balanced between multiple instances of the software?

    • Is there a hardware load balancer?

    • Does it have to support sticky sessions?

    • Does the app need a reverse proxy that routes requests to different deployment units of the application (you may want to use Zuul)?

    • Nginix

  • Proxies

  • Network Infrastructure

    • How is the network setup?

    • Are there any communication obstacles between different parts of the application or between the application and third party applications?

  • Secrets

    • Vault

  • Certificates

    • server

    • client

  • Automating environments

    • Terraform

  • Expiry dates

    • certifactes, licenses, secrets

    • When do they occur? Is there a reminder/monitor - alerting system, emails etc?

  • Gitops

    • state of deployments stored in git

    • flux

Development Concerns

  • IDE

    • What’s the policy on using IDE’s? licence costs

    • Is each developer allowed to use his/her IDE of choice?

    • Making a specific IDE mandatory may reduce costs for providing several parallel solutions while letting each developer use his favorite IDE may reduce training costs.

    • plugins

      • custom made, free, paid

      • legal usage

    • Mastery, shorcuts

    • e.g. Intellij, eclipse

  • Build Tool

    • Which tool will do the building?

    • Both Maven and Gradle are popular choices

    • Old school is Ant

    • Or do manual using make files and bash scripts

  • Version Control

    • Where will the source code be hosted?

      • Gitlabs (internal) or github (external)

    • Secruity

      • access to view and upload/push

      • secrets hidden/encrypted

    • Git is quickly becoming the de-facto standard, but Subversion has a better learning curve.

    • What needs to checked in?

      • Passwords or sensitve data (encrypted or reference local env variables)

    • README.md

      • Standardised for devs to run, test and understand code to be productive

  • Coding Conventions

    • How are classes and variables named?

    • Is code and javadoc in english or any other language?

    • choose an existing code formatter and a Checkstyle rule set and include it as a build breaker into the build process

    • Findbugs, PMD for build static analysis tools

    • Sonarcube for hosted analysis tools

  • Code Quality

    • How will you measure code quality?

    • Are the coding conventions enough or will you run additional metrics on the code?

    • How will those metrics be made visible?

    • You may want to setup a central code quality server like SonarQube for all to access.

  • Application fitness

    • Does it meet the goals of key engineering principles

    • Evolutionary architecture by Ford

    • Tests that check fetures, fitness tests

    • service-level agreement (SLA

    • operational-level agreement (OLA)

  • Pairing or/and Code reviews

    • Will you perform code reviews during development?

    • How will thos code reviews be supported by software?

      • github, reviewboard, pairing

    • When will they be performed?

    • How will they be done?

      • conventions set

    • Metrics used

    • Is there a precheck before review is done

      • branch build - runs build, static analysis tests

  • Pair programming

    • When will this be done?

    • How long for?

      • Monitoring equal pairing

    • Switching up?

    • Styles?

    • Equipment?

      • one box two computers Or laptops

      • Monitors

      • keyboards & mice

      • desks

      • chairs

    • Remote pairing

      • software? licenses?

  • Trunk or feature/branch based development

    • use of feature toggles for trunk based

    • How/when to merge?

    • CI setup, so master in good state

      • build monitor to inform about issues with failng builds

    • Architecture so different stories in play wont affect all or minmal amount of same code being changed

  • Continuous Integration

    • How will the build process be executed on a regular basis?

    • There are cloud providers like CircleCI or Travis or you may install a local Jenkins server, teamcity or GoCD.

    • Infrastructure as code for settings for builds

  • Build Monitors

    • A screen which displays any failing builds from CI (red builds)

    • Any metrics from Production

    • Calendars/events or reminders

    • Equipment - monitor and box (pc/raspberry pi)

      • location - visable

  • CI and CD separated/continous

    • binary from CI is not the same as deployed version

    • Each CI build has continous build to deployment

  • Documentation

    • Which parts of the application should be documented how?

    • What information should be documented in a wiki like Confluence?

    • what should be put into Word documents?

    • If there is a chance, use a markup format like Markdown ord AsciiDoc instead of Word.

    • Tests as documents ie acceptance tests

      • Yatspec, cucumber etc

      • Format, wording, diagrams, location, searchable

  • Licensing

  • Stories

    • Use of jira to track and document stories

    • Breaking down when too long?

    • How to handle TODOs in code?

    • Printing

  • Agile

    • kanban or scrum

    • Physical dashboard

      • linked to computer board (jira/trello)

    • retros

    • planning sessions

    • stand ups

  • Communication

    • Location

      • colocated

      • remote

        • how to communicate

    • Meeting rooms

    • Accessories

      • whiteboards (large/small)

      • post its

      • notepads

    • Email

      • secure

    • chat/messaging

      • secure

Secruity/Infosec

  • OWASP

  • Code security

    • who can access, who can change

  • Deployment security

    • who can deploy? who can access the pod?

  • Data security

  • network security

  • Secrets

    • Authentication and authorisation

    • vault

  • Sensitive data

  • certificates

  • secure communications

  • monitoring access

    • who? what did they do? when?

Front end concerns

  • Frontend Technology

    • Is the application required to be hosted centrally as a web application or should it be a fat client?

    • If a web application, will it be a client-side single page app (use Angular) or static web page

    • if a server-side web framework (I would propose using Apache Wicket or Thymeleaf / Spring MVC over frameworks like JSF or Vaadin, unless you have a very good reason).

    • If a fat client, are the requirements in favor of a Swing or JavaFX-based client or something completely different like Electron?

  • Client-side Database

    • Do the clients need to store data?

    • In a web application you can use Local Storage and IndexedDB.

    • In a fat client you can use some small-footprint database like Derby.

  • Peripheral Devices

    • Do the clients need access to some kind of peripheral devices like card readers, authentication dongles or any hardware that does external measurements of some sort?

    • In a fat client you may access those devices directly, in a web application you may have to provide a small client app which accesses the devices and makes their data available via a http server on localhost which can be integrated into the web app within the browser.

  • Design Framework

    • How will the client app be layouted and designed?

    • In a HTML-based client, you may want to use a framework like Bootstrap.

    • For fat clients, the available technologies may differ drastically.

  • Measuring Metrics

    • Are there any events (errors, client version,etc) that the client should report to a central server?

    • How will those events be communicated to the server?

  • Offline Mode

    • Are the clients required to work offline?

    • Which use cases should be available offline and which not?

    • How will client side data be synchronized with the server once the client is online?

  • CDNs

    • Faster access to resources ie images, music, html etc

  • Libraries

    • Secure

    • Maintained with good support

    • Use open source

    • Develop internal libraries

Links

  • http://adriangrigoras.com/blog/architecture-review-checklist/

Checklist for new project
Development language
Scripting language
Architecture Style
Backend Concerns
Testing Concerns
Operations Concerns
Development Concerns
Secruity/Infosec
Front end concerns
Links
Top of Page
Top of Page
Top of Page
Top of Page
Top of Page
Top of Page
Top of Page
Top of Page
Top of Page
Top of Page