Table of contents
Volume 1: Software craft
This volume explains the different skills that you’ll need to acquire and improve over the course of your career to become a software crafter. There are no secrets and no magic to become one. It’s mostly a question of work, dedication, passion, and fun.
This volume is much less about technology than about personality traits and psychology. Even if we all start with our own background, strengths and weaknesses, there are things to know, tips and tricks that will guide you on the path towards becoming a software crafter.
In this volume:
- Introduction
- What is software development
- What is software engineering
- What is a software developer/engineer/coder/programmer
- Evolution
- What is a software crafter
- Quality vs user satisfaction
- Important skills and practical advice
- Enjoy solving problems
- Improve your analytical skills
- Be creative and open-minded
- Be organized
- Always Be Curious (ABC)
- Improve continuously
- Build habits
- Learn your craft
- Understand client needs
- Go above and beyond
- Learn to deal with hard problems
- Learn to deal with failure
- Focus on quality
- Focus on security
- Be reliable
- Be pragmatic
- Be super productive
- Work in a structured manner
- Have fun
- Be a good communicator
- Be a true team member
- Be an Innovator and Influence others
- Be a great decision maker
- Manage your career
- Preserve yourself
Volume 2: What clients need
All software development endeavors have one thing in common: they aim to solve real-world problems.
This volume focuses on how to understand what clients truly need. It covers concepts such as functional & non-functional requirements, techniques that you can use to understand business problems and end user goals. It also covers what specifications are and why they matter.
These ideas are important because, no matter how good a software developer you are, it doesn’t matter at all if you end up building something that solves the wrong problems.
In this volume:
- Introduction
- What do clients need?
- Requirements
- Functional requirements and jobs to be done
- Non-functional requirements
- Software Requirements Specification (SRS)
- Actors, use cases and user stories
- Business domain and Ubiquitous language
- Requirements discovery
- Requirements always change
- Event storming
- Discovery tools and techniques
- Clarify and refine gradually
- User Centered Design (UCD)
- User Research
- Jobs to be done
- Design Thinking
- User Experience Design (UX)
- What UX designers focus on
- UX Concepts overview
- UX User Research
- User personas
- User path, scenario, journey, and journey mapping
- Human-Computer Interaction (HCI)
- Interaction Design (IxD)
- Usability and ergonomics
- Accessibility
- Information architecture & content strategy
- UX/UI Design Patterns
- A/B testing
- UX Workflow
- Tools
- Design Sprints
- The Lean Startup and Minimum Lovable Products
- Specifications
- Conclusion
Volume 3: Architecture
Once you have accumulated enough understanding about the requirements, you need to create IT solutions that efficiently solve the problems.
Before diving into design and code, you need to get in the shoes of an architect and devise solutions. Software crafters are not necessarily architects, but they should at least understand what architects do and should be able to provide useful input to them.
Sometimes, you’ll also have to play the role of the architect (e.g., in small startups) and when that happens, you need to know what needs to be done to avoid disasters. Here, we'll explore some key ideas about IT architecture in general and software architecture in particular.
In this volume:
- IT Architecture Overview
- Enterprise Applications
- The Hype Cycle
- Enterprise Architecture (EA)
- Solution architecture
- Software architecture
- The role of a software architect
- Overview
- A basic example
- Agile and Minimum Viable Architecture
- Patterns
- Modular and multi-tier architectures
- Layered
- Monoliths
- Microservices architecture & bounded contexts
- Cloud-native applications
- Serverless & Functions as a Service (FaaS)
- Command Query Responsibility Segregation (CQRS)
- Event-Driven Architecture (EDA)
- Event Sourcing (ES)
- Communications (protocols, HTTP, WebSockets, Message Queues, REST, GraphQL, SOAP, etc)
- Architecture and scalability
- Technical stack selection
- Information/Data architecture
- Data modeling
- Data storage
- Data integration
- Extract Transform Load (ETL)
- Change Data Capture (CDC)
- Web Services / SOA
- Data governance
- Big Data
- Data analytics
- Data Mining
- Business Intelligence (BI)
- Artificial Intelligence (AI)
- Infrastructure architecture
- Security architecture
Volume 4: Software design
Software design is where the real action begins. Previous volumes covered much higher level concepts. Solving the wrong problem means game over, a bad architecture means tons of waste, and bad software design means costly maintenance. Here, we explore software design, explain why it is critical for mental health (seriously!) and key concepts that you’ll use on a daily basis during your software crafter’s career.
In this volume:
- Technical design
- Data
- Data models
- Data structures
- State machines (FSM)
- Business rules
- Database design
- Algorithms
- Complexity and the Big-O notation
- Workflows
- Code design principles
- Problem partitioning
- Design strategies
- Abstraction
- Modularity
- Encapsulation
- Law of Demeter (LoD)
- Separation of concerns
- SOLID principles
- Don't Repeat Yourself (DRY)
- Don't reinvent the wheel
- You aren't gonna need it (YAGNI)
- Pareto principle
- Convention over configuration
- API design
- Refactoring/Refinement
- Design patterns
- Naming
- Choosing frameworks and libraries
- Documentation
- Diagrams / Notations
- Data
- Domain Driven Design (DDD)
Volume 5: Computer architecture and OS basics
This volume is dedicated to real beginners who first want to understand computers and operating systems. We all need to start somewhere, and this is an excellent introduction to basic principles underlying everything that we do as software crafters. Whether our code runs locally on our computer or somewhere in the cloud, it is always executed by a CPU (physical or virtual), accesses memory, reads/writes files, etc.
If you want to learn about CPUs, memory, file systems, files, processes, scheduling and whatnot, then this volume is for you.
In this volume:
- Introduction
- Computer architecture basics
- Central Processing Unit (CPU)
- Memory (RAM)
- Graphical Processing Unit (GPU)
- Binary
- Hexadecimal
- Operating system basics
- Major components
- Programs
- Processes and process management
- Memory management
- I/O management
- File systems and files
- Users and groups
- Inter-Process Communication (IPC)
- Ports
- POSIX
- Built-in programs
- Shells
- Environment variables
- Services/Daemons
- Scheduled tasks
- Virtualization
- Containerization
Volume 6: Coding basics
This volume is dedicated to real beginners who’d like to learn how to C-O-D-E. We will only scratch the surface but this volume is a great and practical introduction to coding concepts that all software crafters must know and use literally all the time.
In this volume:
- Introduction
- Programming concepts
- Pseudocode
- Variables
- Constants
- References
- Special values
- Operators
- Statements
- Expressions
- Keywords
- Data types
- Mutability
- Conditional structures
- Functions
- Loops
- Errors/Exceptions
- Generics
- Decorators/annotations
- Regular expressions (Regex)
- Recursion
- Serialization
- Modules/Packages
- Concurrency
- Streams
- Libraries
- Frameworks
- Bugs
- Debugging
- Programming paradigms
- Imperative
- Procedural
- Object-Oriented Programming (OOP)
- Declarative
- Functional Programming (FP)
- Functional Reactive Programming (FRP)
- Aspect Oriented Programming (AOP)
- Imperative
- Programming languages & platforms
- Generations
- Families
- Characteristics
- Examples
- How to choose
- Development tools
- Integrated Development Environment (IDE)
- Source Control Management client
- Build tools
- Development environment setup
- Free and Open Source Software (FOSS)
- Databases
- Database transactions
- Relational Database Management Systems (RDBMS)
- NoSQL
- Character encoding
- Internet
- How does it work?
- Hypertext Transfer Protocol (HTTP)
- Server/Clients
- Requests/Responses
- URLs
- Verbs
- Headers
- Status codes
- Protocol versions
- Tools
- Full Text Search (FTS)
Volume 7: Best practices
This volume is dedicated to elements that must be taken care of everywhere; whether you’re doing back-end or front-end software development. Note that I also consider those necessary for infrastructure scripting (but it’s always hard to make IT operations personnel realize that they are also software developers ;-)
This is a critical volume for true software crafters because many of these points are unfortunately often overlooked for various reasons (mostly bad ones). If you want to become a true software crafter, then you’ll make sure to always pay attention to those and to convince everyone else to do the same; even if it means going against some pointy-haired manager ;-)
In this volume:
- Error handling
- Code quality & Quality Assurance (QA)
- Broken windows theory
- Technical debt
- Code quality checks
- Static Code Analysis (SCA)
- Metrics
- Tools
- Static Code Analysis (SCA)
- Testing
- Clean code advice
- General
- Code duplication
- Coding conventions
- Defensive programming
- Dead code elimination
- Code quality checklist
- Code comments
- Variables
- Functions
- Conditionals
- Error handling
- Testing
- Performance
- General
- Continuous Integration (CI)
- Code review process
- Issue/Bug tracking
- Logging
- Performance/resource usage
- Internationalization (i18n) and localization (l10n)
- Encoding
- Caching
- Concepts
- Types
- Patterns
- Feature flagging
- How to fix bugs
- Version management
- Source Control Management (SCM)
- Workflows
- Monorepos
- Practical advice
- Continuous Delivery/Deployment
- Operational Maturity (OM)
- Business Continuity Management (BCM)
- IT Service Management (ITSM)
- Backup/restore
- Disaster Recovery (DR)
- Security
Volume 8: Back-end development
This volume is all about back-end software, where most of the action occurs under the hood… without anyone knowing. Back-end developers have to focus on very different aspects of IT systems, compared to front-end developers. Software crafters need to understand those differences.
In this volume:
- What back-end developers focus on and why
- Data
- Models
- Persistence / Retrieval / Search
- Exposure through APIs
- Batch processing
- Usual layers and responsibilities
- Domain
- Repository
- Business
- Web services
- Integration
- Batch
- Shared
- Cross-cutting
- Security
- Performance
- Scalability
- APIs
- Types
- RESTful
- GraphQL
- SOAP
- GRPC
- Comparison
- Tools
- Types
- Frameworks and major libraries
- Going full-stack
Volume 9: Front-end development
This volume is all about front-end systems, which are the tip of the iceberg; the one concrete part that end users see and can feel. Given the visual nature of front-end applications, front-end developers have to focus on very different aspects, compared to back-end developers. Software crafters must not necessarily be artists, but they still have to pay attention to the aesthetics… among many other things.
In this volume:
- What front-end developers focus on and why
- Usual layers and responsibilities
- Component architecture
- Smart components
- Dumb components
- Component libraries
- User Interface Design (UI)
- Principles
- Elements
- Design systems
- Mockups/prototypes & fidelity
- Web Design
- Technologies
- Progressive enhancement
- Graceful degradation
- Responsive Web Design (RWD)
- Cross-browser testing
- Accessibility (a11y)
- Standards
- Tools
- Performance
- Testing/Scoring
- Tools
- The Web Platform
- Main technologies of the Web
- How Web browsers work
- Web standards
- HTML basics
- CSS basics
- Metadata on the Web
- Data entry
- HTML forms
- Captcha & security
- Approaches to create Web applications
- Old school
- Single Page Applications (SPAs)
- Server-Side Rendering (SSR)
- Static sites
- Micro front-ends
- Progressive Web Apps (PWAs)
- UI state management
- Types
- Redux
- Architecture
- Libraries
- Scalable Vector Graphics (SVG)
- Web fonts
- Desktop/Mobile apps
- Frameworks and major libraries
Volume 10: IT Infrastructure
Back-end software is conceptually below the front-end in terms of visibility, but IT infrastructure goes way further down, from services, servers and networks down to cable and electrical signals; phew! ;-)
Having a good understanding of where our applications are hosted, how the environment is configured/secured/monitored, etc is super valuable and makes the difference between someone who “just” writes code and someone who contributes to developing end-to-end solutions. This volume explains some important concepts about IT infrastructure. All DevSecOps engineers (and thus software crafters) should be aware of at least a part of those ideas.
In this volume:
- What IT infrastructure focuses on and why
- Networking concepts
- OSI Model
- Networks
- Routing
- Network Address Translation (NAT)
- Ports
- Port Address Translation (PAT)
- Network zones
- Cloud networks
- DHCP
- DNS
- Network domains
- Availability & performance
- High Availability (HA)
- Clustering
- Load Balancing (LB)
- Systems maintenance
- Systems management
- Databases
- Configuration management
- Compliance management
- Naming conventions
- Data
- Storage
- Backup/restore
- File services
- Enterprise Content Management (ECM)
- Databases
- Cloud computing
- Infrastructure as a Service (IaaS)
- Software as a Service (SaaS)
- Platform as a Service (PaaS
- Cloud types
- Workload portability
- Hosting
- Applications
- Services
- Functions
- Deployments
- Environments
- Security
- Automation
- Scripting
- Infrastructure as code
- GitOps
- ChatOps
- Tools
- API integration
Volume 11: Security
Once you understand what your clients need (or at least, what they need right now), you can think about the “product”. Product management is a specific job, but as a software crafter, it is important to at least understand what it is and what it entails because, sometimes, you might have to take the lead for some parts of product management.
How are products and their features defined, prioritized, and organized? Dive into this volume to learn about technical product management, product backlogs, product roadmaps as well as how to create, structure, and maintain those.
Explore software development approaches, methodologies, and discover modern project management.
Learn how to become a great team leader and help your team succeed.
In this volume:
- Attackers
- Key concepts
- Attack vectors
- Attack surface
- Physical security
- Confidentiality, Integrity, Availability (CIA)
- Non-repudiation
- Defense-in-depth
- Identification
- Authentication, Authorization, Auditing (AAA)
- Principle of least privilege
- Allow lists and deny lists
- Privilege escalation
- Need to know
- Segregation of duties
- Responsibility Assignment Matrix (RACI)
- Security by obscurity
- Personally Identifiable Information (PII)
- Risk management
- Operational Risk Management (ORM)
- Risk assessment
- Risk mitigation
- Security controls
- Common controls
- OWASP
- Cryptography
- Encryption
- Hashing
- Digital Signatures
- Pseudo-Random Number Generators (PRNG)
- Keys
- Secure communications
- Secure protocols
- Why HTTPS matters
- Transport Layer Security (TLS)
- Perfect Forward Secrecy
- Public Key Infrastructure (PKI)
- Firewalls
- Network segregation
- Proxies
- NAC, IDS, IPS
- Secure protocols
- Configuration hardening
- Accounts security
- Hosts security
- Web servers security
- Domain security
- Cloud security
- Configuration drift
- Secret management
- Password management
- Privileged Access Management (PAM)
- Hardware Security Modules (HSM)
- Vulnerability tracking
- Vulnerability databases
- How to track vulnerabilities
- Security testing
- Security verification
- Penetration testing
- Bug bounty programs
- Web platform security
- Same Origin Policy (SOP)
- Mixed content
- Browser sandbox
- Content Security Policy (CSP)
- Cross-Origin Resource Sharing (CORS)
- Cookies security
- Privacy sandbox
- Secure coding
- OWASP top vulnerabilities
- Integrating security in the SDLC
- General advice
- Input validation
- Output encoding
- Authentication
- Session management
- Authorization
- Error handling
- Logging and auditing
- Data security
- ... and more!
- Incident response
- Security monitoring
- Security automation
- Administrative measures
- Laws and regulations
Volume 12: Project management and development approaches
Once you understand what your clients need (or at least, what they need right now), you can think about the “product”. Product management is a specific job, but as a software crafter, it is important to at least understand what it is and what it entails because, sometimes, you might have to take the lead for some parts of product management.
How are products and their features defined, prioritized and organized? Dive into this volume to learn about technical product management, product backlogs, product roadmaps as well as how to create, structure and maintain those.
In this volume:
- Project roles
- Product management
- Product manager's role
- Product roadmap
- Phases/Milestones
- User Story Map
- Backlog management
- Advice
- Tools
- Software development process
- Cowboy coding
- Software/System Development Life Cycle (SDLC)
- Software development approaches
- Waterfall
- Rational Unified Process (RUP)
- Agile
- Scrum
- Kanban
- Scrumban
- Disciplined Agile Delivery (DAD)
- Agile Unified Process (AUP)
- Lean
- Lean thinking
- Lean Product Development (LPD)
- Extreme Programming (XP)
- Feature-driven Development (FDD)
- DevOps and DevSecOps
- Project management basics
- Important definitions for teams
- Definition of Ready to implement
- Definition of Done
- Release management