Read it online: https://maniebra.github.io/software-engineering-handbook/
Since I am studying software engineering, I encountered many concepts and ideas that every software engineer needs to know. Hence, I decided to compile them all into one repository that my peers and beginners can use.
- Assessments
- Methodologies
- System Design
- Design Patterns
- Creational
- Structural
- Behavioural
- Software Engineering
- Quality Assurance
- Software Architecture
- Principles
- Snippets and Cheatsheets
- System Analysis and Design, Alan Dennis, Barbara Haley Wixom, Roberta M. Roth
- Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software
- Software Engineering: A Practitioner's Approach, Roger S. Pressman
- Manifesto for Agile Software Development, Beck et al., 2001
- Principles behind the Agile Manifesto
- The Scrum Guide, Ken Schwaber and Jeff Sutherland
- Extreme Programming Explained: Embrace Change, Kent Beck
- Test-Driven Development: By Example, Kent Beck
- User Stories Applied, Mike Cohn
- Agile Estimating and Planning, Mike Cohn
- Lean Software Development: An Agile Toolkit, Mary and Tom Poppendieck
- Kanban: Successful Evolutionary Change for Your Technology Business, David J. Anderson
- Actionable Agile Metrics for Predictability, Daniel S. Vacanti
- The DSDM Agile Project Framework, Agile Business Consortium
- Large-Scale Scrum (LeSS), Craig Larman and Bas Vodde
- Scaled Agile Framework (SAFe)
- Shape Up, Ryan Singer, Basecamp
- Agile Software Development: The Cooperative Game, Alistair Cockburn
- Accelerate, Nicole Forsgren, Jez Humble and Gene Kim
- Universal Principles of Design, William Lidwell, Kritina Holden, Jill Butler
- Laws of UX, Jon Yablonski
- 10 Usability Heuristics for User Interface Design, Jakob Nielsen
- Thinking, Fast and Slow, Daniel Kahneman
- Flow: The Psychology of Optimal Experience, Mihaly Csikszentmihalyi
- ISO/IEC 25010, Systems and software quality models, International Organization for Standardization
- ISTQB Certified Tester Foundation Level Syllabus, International Software Testing Qualifications Board
- ISTQB Standard Glossary of Terms Used in Software Testing
- IEEE 829, Standard for Software and System Test Documentation
- The Art of Software Testing, Glenford J. Myers, Corey Sandler and Tom Badgett
- Introduction to Software Testing, Paul Ammann and Jeff Offutt
- Lessons Learned in Software Testing, Cem Kaner, James Bach and Bret Pettichord
- Agile Testing: A Practical Guide for Testers and Agile Teams, Lisa Crispin and Janet Gregory
- More Agile Testing: Learning Journeys for the Whole Team, Janet Gregory and Lisa Crispin
- Exploratory Testing Explained, James Bach
- Session-Based Test Management, Jonathan Bach
- xUnit Test Patterns: Refactoring Test Code, Gerard Meszaros
- Mocks Aren't Stubs, Martin Fowler
- The Practical Test Pyramid, Ham Vocke
- Succeeding with Agile, Mike Cohn, source of the test automation pyramid
- Growing Object-Oriented Software, Guided by Tests, Steve Freeman and Nat Pryce
- Working Effectively with Legacy Code, Michael C. Feathers
- Clean Code, Robert C. Martin, source of the FIRST principles
- Continuous Delivery, Jez Humble and David Farley
- Testing Strategies in a Microservice Architecture, Toby Clemson
- Consumer-Driven Contracts, Ian Robinson
- Pact, contract testing documentation
- Practical Combinatorial Testing, D. Richard Kuhn, Raghu N. Kacker and Yu Lei, NIST SP 800-142
- What is Property Based Testing?, David R. MacIver, Hypothesis
- A Survey on Metamorphic Testing, Sergio Segura et al., IEEE Transactions on Software Engineering, 2016
- An Analysis and Survey of the Development of Mutation Testing, Yue Jia and Mark Harman, IEEE Transactions on Software Engineering, 2011
- OWASP Top 10, Open Worldwide Application Security Project
- OWASP Web Security Testing Guide
- Web Content Accessibility Guidelines (WCAG) 2.2, W3C
- Why You Only Need to Test with 5 Users, Jakob Nielsen
- Site Reliability Engineering, Google
- Chaos Engineering: Principles
- Testing in Production, the Safe Way, Cindy Sridharan
- Eradicating Non-Determinism in Tests, Martin Fowler
Since I created this repository in hopes of becoming one of the most outstanding software engineering guides one day, your contributions will be much appreciated. To contribute to this project, you have to follow these steps:
- Fork the repository.
- Clone the forked repository to your local device.
- Add your contents or modify the contents you see fit to alter.
- Create a pull request.
- Wait until your pull request is reviewed.
- If all is good, your contribution will be merged into this repository!
This project is licensed under the MIT License.
Copyright © 2026 Mani Ebrahimi
You are free to use, copy, modify, merge, publish, distribute, sub-license, and/or sell copies of this software, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
- The software is provided "as is", without warranty of any kind, express or implied, including but not limited to warranties of merchantability, fitness for a particular purpose, and noninfringement.
For more details, refer to the LICENSE file.