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
  • what is it?
  • Values of XP
  • Principles
  • Practices
  • Primary Practices
  • Sit together
  • Whole team
  • Informative workspace
  • Energized Work
  • Pair Programming
  • Stories
  • Weekly Cycle
  • Slack
  • Ten-Minute Builds
  • Continuous Integration
  • TDD
  • Incremental Design
  • Corollory Practices
  • Real customer involvement
  • Incremental deployment
  • Team Continuity
  • Shrinking teams
  • Root-cause analysis
  • Shared Code
  • Code and tests
  • Single Code Base
  • Daily Deployment
  • Negotiated Scope Contract
  • Pay-per-use
  • The whole XP team
  • The theory of Constraints
  • Planning: managing scope
  • Testing: early, often, and automated
  • Designing: the value of time
  • User stories
  • Iteration planning
  • Spiking
  • Coding standards
  • Collective ownerships
  • Bugs
  • Practises
  • links

Was this helpful?

  1. Management & Workflow
  2. coding-process

Xtreme Programming (XP)

what is it?

  • methodology for teams that face of vague or rapidly changing requirements.

  • only do what you need to do to create value for the customer.

  • A way to: Stay aware. Adapt. Change.

  • To help in improving the ability to cope with change

  • Distinguished by

    • short development cycles.

    • incremental planning approach.

    • ability to be flexible when the business needs change.

    • reliance on automated tests.

    • reliance on oral communication.

    • reliance on an evolutionary design process.

    • reliance on the close collaboration.

    • reliance on practices that work with both the short-term instincts of the team members and the long-term interests of the project.

Values of XP

  • Communication

    • problems within a tema can be caused by lack of Communication.

      • this should be the first place to look at when problems occurs

    • How can your team now communicate in order to solve the problem and ensure that the same issue doesn't arise?

    • helps your team to bond and is a key component to effective cooperation

  • Simplicity

    • Focus on working on the simplest thing that could possibly work

    • Eliminate unnecessary complexity

  • Feedback

    • Shorten the feedback cycle as best as you can.

    • Too much feedback is counter productive

      • look to find the sweet point

    • Range of forms

      • Getting opinions from colleagues, books, internet

      • Evaluating code produced by yourself, others

      • How did testing feel

      • Did the code pass the tests

      • Does the code work

  • Courage

    • Effective action in the face of fear.

    • Courage may manifest itself

      • in a bias to action

      • to be patient to wait for a problem to reveal itself when you feel one approaching

      • to wait for a problem to reveal itself when you feel one approaching

      • to change a course of action can lend itself to finding simpler solutions.

  • Respect

    • contributions of each person on a team has to be respected

    • Needed for XP to work

Principles

  • Principles guide behaviour

  • Principles give you a better idea of what a practice is intended to accomplish

  • Main principles

    • Humanity

      • Creating software

        • should meet human needs, maslov

        • acknowledge human fallibility

        • leverage human strength

    • Economics

      • everything you do has business value and serves business needs

      • Think about the 'time value of money' and the 'option value of systems and teams'

      • What you're building is more valuable the more it earns money sooner and spends money later

      • How flexible is your software for being used beyondoriginally intended purpose

      • balance enhancing the option value of the software and the team whilst not wasting money investing in speculative flexibility

    • Mutual benefits

      • Every activity should benefit all concerned

    • Self-Similarity

      • Try copying the structure of one solution into a new context, even at different scales

    • Improvement

      • Aim for excellence through constant improvement

    • Diversity

      • need to bring together a variety of skills, attitudes, and perspectives

    • Reflection

      • to expose mistakes and learn from them

      • How is your team working and why are they doing what they are doing?

      • Why did you suceed?

      • Why did you fail?

    • Flow

      • delivering a steady flow of valuable software by engaging in all activities of development simultaneously

    • Opportunity

      • View problems as opportunities to learn, improve, and change

    • Redundancy

      • Keep redundancy where it serves a valid purpose, that is, uncovering defects. You may have many practices that catch the same defects, but the defect problem in general cannot be solved with a single practice

      • Defects corrode trust and trust is the great waste eliminator

    • Failure

      • use it to learn from

      • When you don't know what approach to take, risking failure can be the shortest route to success.

    • Quality

      • Sacrificing quality is not an effective means of control. Aiming for higher quality often results in faster delivery; lowering quality standards results in less predictably delivery later on

    • Baby Steps

      • What's the least you could do that is recognizably in the right direction?

      • ou want to avoid 'wastefully [recoiling] from aborted big changes'.

    • Accepted Responsibility

      • With responsibility comes authority.

Practices

  • Practices need to be underpinned by values, otherwise they become rote.

  • Practices are also situation dependent.

Primary Practices

Sit together

  • sit with client

  • allow to communicate fully

  • physical proximity enhances communication

  • open spaces helps with ease of communication

Whole team

  • The team needs the skills and perspectives necessary for the project to succeed

  • cross functional

  • People need a sense of team

    • belonging, shared purpose, support

  • The team is dynamic, should change members depending on needs

Informative workspace

  • Make workspace about your work

Energized Work

  • Only work for as long as you can be productive

  • prepared, rested, relaxed mind.

Pair Programming

  • PingPong

  • Roles

    • Navigator and driver

    • Experienced or junior dev

    • Experienced or junior domain wise

    • These can be any combination. Need to adjust depending on what you are.

  • It's a dialog between two people simultaneously programming (and analyzing and designing and testing) and trying to program better.

    • Keep each other on task.

    • Brainstorm refinements to the system.

    • Clarify ideas.

    • Take initiative when their partner is stuck, thus lowering frustration.

    • Hold each other accountable to the team's practices.

  • Rotate pairs can be a good idea,

  • tiring but satisfying.

  • Pairing and personal space

    • Different individuals and cultures are comfortable with different amounts of body space.

    • Personal hygiene and health are important issues when pairing.

    • Ideally, emotions at work will be about work.

    • It is important to respect individual differences when pairing.

    • If you aren't comfortable, the team isn't doing as well as it could.

Stories

  • Write stories around the framework of customer-visible functionality

  • As soon as a story is written, try to estimate the development effort necessary to implement it.

Weekly Cycle

  • Plan work a week at a time

  • Have a meeting at the beginning of the week where you review progress to date and have your client prioritise a week's worth of stories

Slack

  • Always leave room for tasks to be dropped if you get behind

  • You can also structure slack, e.g. hack days

Ten-Minute Builds

Continuous Integration

  • Integrate and test changes after no more than a couple of hours

TDD

  • It addresses many problems.

    • Scope creep: if you really want to put that other code in, write another test after you've made this one work.

    • Coupling and cohesion: if it's hard to write a test, it's a signal that you have a design problem, not a testing problem. Loosely coupled, highly cohesive code is easy to test.

    • Trust: writing clean code that works and demonstrating your intentions with automated tests, you give your teammates a reason to trust you.

    • Rhythm: it's clearer what to do next: either write another test or make the broken test work. Code, refactor, test, code, refactor.

Incremental Design

  • Make the design of the system an excellent fit for the needs of the system that day

  • design done close to when it is used is more efficient.

Corollory Practices

  • Primary practices should be done first before attempting this.

Real customer involvement

  • Make people whose lives/businesses are affected by your system be part of the team

  • Aim to reduce wasted effort

  • Increase trust with customer -> increased productivity

Incremental deployment

  • Big deployments have a high risk and high human and economic costs.

  • Find a little piece of functionality or a limited data set you can handle right away. Deploy it.

  • Legacy: Implementing scaffolding between the two systems is the price you pay for insurance against big changes going wrong

Team Continuity

  • Keep effective teams together

  • Ignoring the value of relationships and trust just to simplify the scheduling problem is false economy

Shrinking teams

  • As a team grows in capability, keep its workload constant, but gradually reduce the number of team members

    • Strive to improve efficiency until some of the team members are idle — shrink the team and continue

  • This frees people to form more teams.

  • When the team has too few members, merge it with another too-small team.

Root-cause analysis

  • When a defect is found or a mistake occurs, eliminate its cause such that the team will never make the same mistake again

  • Write an automated system-level test and unit test that demonstrates the defect, including the desired behaviour

  • Fix the system so the unit test works. This should cause the system test to pass also. If not, return to the previous point.

  • Once the defect is resolved, figure out why the defect was created and wasn't caught. Initiate the necessary changes to prevent this kind of defect in the future.

  • Use the technique of the 'Five Whys'

  • The root cause is almost always a people problem

Shared Code

  • Anyone on the team can improve any part of the system at any time

  • Until the team has developed a sense of collective responsibility, no one is responsible and quality will deteriorate.

  • People will make changes without regard for the team-wide consequences.

  • pair programming and continuous integration are interesting to try to avoid selfish conducts.

Code and tests

  • Maintain only the code and the tests as permanent artifacts.

  • Generate other documents from the code and tests

  • Rely on social mechanisms to keep alive important history of the project.

  • The valuable decisions in software development are:

    • What are we going to do?

    • What aren't we going to do?

    • How are we going to do what we do?

Single Code Base

  • Temporary branches should be short lived

  • Multiple code streams are a huge source of waste

  • Rather than add more code bases, fix the underlying design problem that is preventing you from running from a single code base.

Daily Deployment

  • Put new software into production every night

  • If you are out of sync with what is in production you risk making decisions without accurate feedback. It is a risk

  • Prereqs for this:

    • Defect rate is down to a handful per year

    • Build environment is smoothly automated

    • Deployment tools are automated

    • Ability to roll out incrementally and roll back in case of failure

    • Highly developed trust within the team and with customers

Negotiated Scope Contract

  • Write contracts that fix time, costs, and quality, but call of an ongoing negotiation of precise scope of the system

  • Sign a series of short contracts instead of one long one

  • Negotiated scope contracts are a mechanism for aligning the interests of suppliers and customers to encourage communication and feedback

Pay-per-use

  • Money is the ultimate feedback.

  • Connecting money flow directly to software development provides accurate, timely information with which to drive improvement.

  • If you can't implement pay-per-use, you might be able to go to a subscription model. Then the team can focus on retention rates

  • Pay-per-release isn't a good option: the supplier is motivated to keep shipping releases with new functionality, whilst the customer wants fewer releases with more functionality, in order to avoid the pain of upgrades

The whole XP team

  • The roles and responsibilities of different team members

    • Members can have multiple roles

  • The goal is to have everyone contribute the best he has to offer to the team's success

  • Everyone on the team can recommend changes, but they should be prepared to back up their concerns with action.

  • Roles:

    • Testers

      • catching trivial mistakes is accepted by the programmers

      • Test-first programming results in a suite of tests that help keep the project stable.

      • help defining and specifying what will constitute acceptable functioning of the system before the functionality has been implemented.

      • coach programmers on testing techniques

      • Testers amplify communication by looking at 'happy paths' and asking about scenarios where things go wrong

    • Interaction designers

      • choose overall metaphors for the system, write stories, and evaluate usage of the deployed system to find opportunities for new stories.

    • Architects

      • look for and execute large-scale refactorings, write system-level tests that stress the architecture, and implement stories.

      • help choose the most appropriate fracture lines and then follow the system as a whole

      • keep the big picture in mind as the groups focus on their smaller section.

    • Project managers

      • facilitate communication inside the team and coordinate communication with customers, suppliers, and the rest of the organization.

      • keeping plans synchronized with reality.

      • facilitate communication within the team, increasing cohesiveness and confidence.

    • Product managers

      • help the team decide priorities by analyzing the differences between actual and assumed requirements

      • adapt the story and theme to what is really happening now.

      • Stories should be sequenced for business, not technical, reasons.

      • goal is a working system from the first week.

      • encourage communication between customers and programmers, making sure the most important customer concerns are heard and acted on by the team.

    • Executives

      • provide an XP team with courage, confidence, and accountability.

      • articulate and maintain large-scale goals.

      • look for good software coming from the team and continuing improvement as well

      • free to ask for explanations about any aspect that dont makes sense.

      • Two metrics to measure the health of XP teams

        • Number of defects found after development. Each is an opportunity for the team to learn and improve.

        • The time lag between the beginning of investment in an idea and when the idea first generates revenue

    • Technical writers

      • provide early feedback about features and to create closer relationships with users

      • create closer relationships with users.

      • help them learn about the product, listening to their feedback, and addressing confusion with further publications or new stories.

    • Users

      • help write and pick stories and make domain decisions during development.

      • have a good relationships with a large potential user community

      • have knowledge and experience with systems similar to the one being built

    • Programmers

      • estimate stories and tasks, break stories into tasks, write tests, write code to implement features, automate tedious development process, and gradually improve the design of the system.

      • Have good social and relationship skills

    • Human resources

      • reviews

      • Hirings

      • XP teams put much more emphasis on teamwork and social skills.

      • best interviewing technique is to have the candidate work with the team for a day

      • Pair programming provides an excellent test of technical and social skills.

The theory of Constraints

  • The Theory of Constraints says that in any system there is one constraint at a time

  • To improve throughput in a system you need to first identify the constraint

    • then think about how you can increase its capacity,

    • offload some of the work to non-constraints,

    • or eliminate the constraint altogether.

  • How do I identify a constraint? Work piles up in front of one

  • when you eliminate one constraint you create another

  • avoid micro-optimization and look at the whole situation before starting to make changes.

  • Software development is a human process not a factory.

Planning: managing scope

  • starts with putting the current goals, assumptions, and facts on the table

    • With current, explicit information, you can work toward agreement about what's in scope, what's out of scope, and what to do next.

  • Planning is complicated because the estimates of the cost and value of stories are uncertain.

  • There is a limit to how much work can be done in a day

    • More time at the desk does not equal increased productivity for creative work.

  • Planning also involves deciding what to do next out of all of the possibilities. Plans are not predictions of the future. Rather, they provide you with a starting point and help you to coordinate with other teams.

  • Everyone on the team should be involved in planning.

  • Be prepared for the plan not to match reality.

Testing: early, often, and automated

  • Defects destroy the trust required for effective software development.

    • Without trust, people spend much of their time defending themselves against the possibility that someone else may have made a mistake.

  • Defects are expensive when they occur

    • The direct costs of fixing the defects.

    • The indirect costs because of damaged relationships, lost business, and lost development time

  • Acceptable level is to reduce the occurrence of defects to an economically sustainable level.

    • eliminating software defects is also expensive.

    • There will always be defects. The key is to learn from them so there are no repeats.

    • The sooner you find a defect, the cheaper it is to fix it.

  • Software testing is double-checking

  • Beta testing is a symptom of weak testing practices and poor communication with customers.

  • Tests provide a measure of confidence and a measure of progress.

Designing: the value of time

  • If you can generate value without feedback, designing sooner makes more sense

  • If experience creates most of the value, designing just enough today to get going and then designing mostly in the light of experience makes more sense.

  • Design is deferred until it can be made in the light of experience and the decisions can be used immediately

    • Deploy software sooner.

    • Make decisions with certainty.

    • Avoid living with bad decisions.

    • Maintain the pace of development as the original design assumptions are superseded.

  • Design always

  • Once and Only Once: DRY

  • Simplicity

    • Is it appropriate for the intended audience? The people who need to work with it have to understand it.

    • Is it communicative? Every idea that needs to be communicated should be represented in the system.

    • Is it factored? Duplication of logic and structure make code hard to understand and change.

    • Is it minimal? The system should have the fewest elements possible.

User stories

Iteration planning

Spiking

Coding standards

Collective ownerships

  • All commits have both pairs name on it

  • Any issue with this code, either one of the pair is responsibile for any issues

Bugs

  • New tests are writing for this

    • to expose the bug (red)

    • make sure bug is fixed (green)

Practises

https://basusourav.wordpress.com/2015/05/18/12-core-practices-of-xp/

links

  • https://en.wikipedia.org/wiki/Extreme_programming

  • http://www.extremeprogramming.org/

  • https://martinfowler.com/bliki/ExtremeProgramming.html

  • https://ronjeffries.com/xprog/what-is-extreme-programming/

  • http://www.extremeprogramming.org/rules.html

  • https://www.tutorialspoint.com/extreme_programming/extreme_programming_introduction.htm

  • https://www.altexsoft.com/blog/business/extreme-programming-values-principles-and-practices/

PreviousTrunk based developmentNextdebugging

Last updated 3 years ago

Was this helpful?