This study path is released under the CC BY-SA 4.0 license
Welcome to this Study Path on Software Development: a curated, open, and ever-evolving learning path focused on practices of software development, principles of software design, and software architecture.
Whether you are interested in Clean Code, Test-Driven Development, Refactoring, Clean Architecture, Legacy Code, Domain-Driven Design, Microservices, or other essential topics, I hope you will find structured, high-quality resources here to guide with your growth.
The study path is organized into themed sections. There is no strict order to follow, you are free to:
- Browse through all the sessions
- Dive into topics that interest you most
- Follow the entire path from start to finish
How you use it is entirely up to you.
This project started years ago when I mentored an intern in Agile Software Development. At that time I wanted to offer a clear, practical roadmap for learning foundational concepts, like clean code and TDD. Over time, with the support of other people, this study path has grown - and continues to grow - into a broader resource for developers at all levels.
I am committed keeping this path up to date and valuable. If you have suggestions or resources to contribute, your input is more than welcome!
Enjoy the journey, and happy learning!
Kick off your journey by learning how to stay focused, work iteratively, and embrace the mindset of continuous improvement through Agile values and time management techniques.
- Get familiar with the Pomodoro Technique (read the paper)
- Read TODO List: One thing at a time!
- Read the Manifesto for Agile Software Development
- Read the Principles behind the Agile Manifesto
- Read the Manifesto for Software Craftsmanship
Discover the core design principles that help you write code that is easy to understand, change, and grow: the building blocks of sustainable software
- Watch Core Design Principles for Software Developers
- Read the SOLID principles
- Exercise: Look at the Racing Car Katas
- Try to find where the SOLID principles are violated
- Read the Clean Code: A Handbook of Agile Software Craftsmanship
- Chapter 1: Clean Code
- Chapter 2: Meaningful Names
- Chapter 3: Functions
- Chapter 6: Objects and Data Structures
- Chapter 7: Error Handling
- Chapter 10: Classes
- Read The Pragmatic Programmer: From Journeyman to Master
- Chapter 2: A Pragmatic Approach
- Chapter 5: Bend or Break
- Chapter 6: While You Are Coding
- Read The Art of Enbugging: Tell, don't ask / Law of Demeter
- Read YAGNI
- Watch SOLID for functional programming (a case study of SOLID principles applied in Elixir)
Learn how tests can help to drive the design of your code, how tests can lead to a better feedback loop, and less code! A key skill in modern development workflows.
- Read Test-Driven Development: By Example
- Study the
Part I: The Money Example
- Exercise: Try to repeat it with a programming language at your choice.
- Study the
- Read Growing Object-Oriented Software, Guided by Tests
- Chapter 1: What is the point of Test-Driven Development?
- Chapter 2: Test-Driven Development with Objects
- Chapter 4: Kick-Starting the Test-Driven Cycle
- Chapter 5: Maintaining the Test-Driven Cycle
- Unit Tests
- Read Chapter 9: Unit Tests of Clean Code
- Watch The Clean Code Talks - Unit Testing
- Read Effective Unit Testing
- Part 1: Foundations
- Part 2: Catalog
- Read desirable properties of tests
- Watch the video playlist
- Read Working Effectively with Unit Tests
Sharpen your ability to improve the design of your code without changing its behavior. Recognize code smells, apply refactoring techniques, and keep your systems clean over time.
- Watch Workflows of Refactoring
- Read Refactoring: Improving the design of existing code
- Chapter 1: Refactoring, a First Example
- Try to repeat the example code
- Chapter 2: Principles in Refactoring
- Chapter 3: Bad Smells in Code
- Chapter 1: Refactoring, a First Example
- Exercise: Try to find and refactor the code smells in these Code Katas:
- Tennis Refactoring Kata
- Gilded Rose Kata
- What Code Smells you have found?
- What steps you followed to remove them?
- What difficulties you have faced?
- Try the Refactoring Golf: Explore your IDE to see what's really possible using shortcuts and automation.
Master strategies and techniques to safely work in large, untested, or unfamiliar codebases. One of the most valuable real-world development skills for people who are dealing with legacy code at daily basis.
- Read Working Effectively with Legacy Code
- Chapter 1: Changing Software
- Chapter 2: Working with Feedback
- Chapter 4: The Seam Model
- Chapter 8: How Do I Add a Feature ?
- Chapter 13: I Need to Make Changes, but I Don't Know What Tests to Write
- Chapter 25: Dependency-Breaking Techniques
- Read Working Effectively with Legacy Tests
- Exercise: Try the Gilded Rose Kata
- Add code coverage
- Add the new feature
- Refactor the code
- Watch how other tackled the Gilded Rose Kata:
- Watch All the Little Things
- Watch "Writing test cases using Approval Tests" (Part I, Part II, Part III)
- Watch Testing and Refactoring Legacy Code
- Exercise: Try to repeat the Code Kata
- Watch the alternative version Testing and Refactoring Legacy Code - The Trip Service Kata - Part I
- And Testing and Refactoring Legacy Code - The Trip Service Kata - Part II: on OCP, Seam Model, and DIP.
- Read more about Approval Testing and some examples:
- Characterization Testing
- Mutation Testing
- Golden Master and Sampling
- Exercise: Try to test and refactor the Ugly trivia game
- Which is the approach you prefer to apply? Why?
- Watch Surviving a legacy codebase: tactics and tools
- Read the Slides of the talk
- Have access to the example code for further practice
Explore the deeper relationship between testing and good design. Learn how testability often leads to better architecture, modularity, and clarity.
- Watch The deep synergy between testability and good design
- Watch How to Write Clean, Testable Code
- Watch TDD and Software Design
- Read Good Design is Easily-Learned
- Exercise: Try to learn and repeat these Code Kata autonomously
- Watch Unit Testing
- Read Growing Object-Oriented Software, Guided by Tests
- Chapter 6: Object-Oriented Style
- Chapter 7: Achieving Object-Oriented Design
- Chapter 8: Building on Third-Party Code
- Read the Clean Code: A Handbook of Agile Software Craftsmanship
- Chapter 8: Boundaries
- Watch The Magic Tricks of Testing
- Read Mocks Aren't Stubs
- Exercises:
- Try the String Calculator Kata
- With interactions
- Try the Game Of Life Kata
- Try the Tic Tac Toe Kata
- Try the String Calculator Kata
Apply your design and testing skills in a fresh language to reinforce your understanding and build true language-agnostic thinking.
Principles and Practices are not dependent on any particular programming language, rather they act as support or enabler to learn and get comfortable with programming languages and tools we never used before.
Now that you have learned something about the good principles and practices of software development, try to grab a new programming language which you never used before and try to repeat some of the Code Katas you already have done previously:
- Fizz Buzz Kata
- The Bowling Game Kata
- String Calculator Kata
- The Roman Numerals Kata
- Game Of Life Kata
- Tic Tac Toe Kata
- Opening Hours Kata
- Racing Car Katas
- Repeat the Money Example of TDD by Example
- Gilded Rose Kata
If you are looking for more Code Katas to learn and practice with your new programming language, try to give a look at Kata-Log.
Explore architectural choices that emphasize independence from frameworks, user interface, and databases, enabling a long-term flexibility and testability.
- Read Hexagonal Architecture
- Read The Onion Architecture
- Read The Clean Architecture
- Watch Clean Architecture and Design
- Watch Lean Agile Scotland "Crafted Design"
- Watch Jax London 2014 "Crafted Design"
- Watch Spring I/O 2019 Clean Architecture
- Exercises:
- Try the Social Networking Kata
- Try the Greeting Service Kata
- Once you have done one of the previous Code Kata, try to build and deploy your application
- Read The Twelve-Factor App
- Publish the code on a
GitHub
repository - Setup a CI environment (e.g. Travis/CircleCI/CodeShip)
- Deploy your application automatically (e.g. Heroku)
- Write a suite of tests to check the deployed application is working as expected
- Take a look at this reference implementation on Clean Architecture
Dive into modeling complex business domains with more clarity. Learn how to make your code to speak the language of the business and build software that truly reflects it.
- Watch Tackling Complexity in the Heart of Software
- Read Domain-Driven Design Quickly
- Chapter 1: What Is Domain-Driven Design
- Chapter 2: The Ubiquitous Language
- Chapter 3: Model-Driven Design
- Chapter 4: Refactoring Toward Deeper Insight
- Chapter 5: Preserving Model Integrity
- Read DDD: Putting the Model to Work
- Read How to write a Repository
- Watch DDD and Microservices: At last, some boundaries!
- Recommended readings:
- Domain-Driven Design Starter Modelling Process
- A step-by-step guide for learning and practically applying each aspect of Domain-Driven Design (DDD) - from orienting around an organisation's business model to coding a domain model.
Understand how to better split systems into independently deployable services. Learn the benefits, trade-offs, and patterns that enables distributed architecture that better reflects business domains and support autonomous teams.
- Read Microservices: A Definition of This New Architectural Term
- Watch Microservices
- Watch Principles Of Microservices
- Read Microservice Trade-Offs
- Read Microservice Architecture: Aligning Principles, Practices, and Culture
- Chapter 1: The Microservices Way
- Chapter 2: The Microservices Value Proposition
- Chapter 3: Designing Microservice Systems
- Chapter 4: Establishing a Foundation
- Chapter 5: Service Design
- Read Building Microservices: Designing Fine-Grained Systems
- Chapter 1: Microservices
- Chapter 2: The Evolutionary Architect
- Chapter 3: How to Model Services
- Chapter 4: Integration
- Chapter 5: Splitting the Monolith
- Chapter 6: Deployment
- Chapter 7: Testing
- Chapter 8: Monitoring
- Chapter 11: Microservices at Scale
- Watch the Book Reading Club (part I - part II - part III)
- Watch Practical Considerations For Microservice Architecture
- Watch Microservices Antipatterns
- Read Seven Microservices Anti-patterns
- Transactions and consistency in distributed systems
- Access to more examples and resources
- The other way around: Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith
Explore advanced techniques and design philosophies, from Event Sourcing to Simple Design, and more.
- Simple Design
- Read Beck Design Rules
- Read Emergent Design
- Read The Four Elements of Simple Design
- Read Putting An Age-Old Battle To Rest
- Read Chapter 12 of Clean Code: Emergence
- Read Understanding the Four Rules of Simple Design
- Watch Outside-in TDD (part I - part II - part III)
- Read Test-Driven Development: By Example
- Patterns for Test-Driven Development
- CQRS and Event Sourcing:
- Watch CQRS and Event Sourcing
- Watch CQRS with Erlang
- Watch A Decade of DDD, CQRS, Event Sourcing
- Read CQRS Journey
- Exercises:
- Try the Salary Slip Kata
- Try the Bank Account Kata
- Try to implement a variant using a CQRS/ES approach
- Watch The Many Meanings of Event-Driven Architecture β’ Martin Fowler β’ GOTO 2017
- Read Growing systems towards DDD, Event-Sourcing and Event-Driven architecture
This section provides a list of recommended books readings that have not been mentioned directly in this study path, but of significant importance.
- The Nature of Software Development
- Extreme Programming Explained: Embrace Change (2nd Edition)
- The Agile Samurai: How Agile Masters Deliver Great Software
- Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
- Release It!: Design and Deploy Production-Ready Software
- Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software
- The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win