Software Engineering Workbook
This workbook provides software engineering-specific exercises, templates, and assessment tools for the Judo Engineering Self-Paced Training Program. Each exercise uses real software development scenarios with Go programming examples.
Level 1: Force vs Leverage Recognition
Exercise 1.1: Daily Decision Audit
Time: 5 minutes daily Instructions: At the end of each day, identify one coding decision where you defaulted to a force approach.
Real Example - Go Error Handling:
Date: 2025-01-27
Problem: Need to handle errors from multiple API calls in a Go service
Force Approach: Wrap every API call in try-catch style error handling, creating deeply nested if-else blocks
Leverage Alternative: Use Go's error wrapping and create a custom error type that implements the error interface, then use error handling middleware
Key Learning: Instead of fighting against Go's error handling patterns, work with them using the language's built-in error interfaceTemplate:
Date: ___________
Problem: _________________________________
Force Approach: __________________________
Leverage Alternative: ____________________
Key Learning: ____________________________Exercise 1.2: Leverage Question Practice
Time: 2 minutes before starting any coding task Instructions: Before beginning any new work, ask these questions:
- What’s the smallest change that creates the biggest impact?
- How can I work with existing systems instead of against them?
- What constraints can I use as creative catalysts?
Real Example - Go Concurrency:
Before: "I need to process a large dataset concurrently in Go"
Leverage Questions:
- What's the smallest change? → Use goroutines with a worker pool pattern instead of creating thousands of goroutines
- Work with existing systems? → Leverage Go's built-in sync package and channels
- Use constraints as catalysts? → Limited memory forces me to use bounded concurrency, which is actually better designExercise 1.3: Force vs Leverage Journal
Time: 10 minutes weekly Instructions: Document one example each week of both force and leverage approaches in your coding work.
Real Example - Go Testing:
Week of: 2025-01-20
Force Example:
Problem: Need to test a complex Go function with many dependencies
Approach: Created mock objects for every dependency, wrote extensive test cases covering every branch
Outcome: Took 2 days to write tests, tests were brittle and hard to maintain
Leverage Example:
Problem: Same complex function testing requirement
Approach: Used Go's built-in testing package with table-driven tests, created minimal test doubles only where needed
Outcome: Completed in 4 hours using Go's native testing patterns, tests were maintainable and clear
Key Insight: Instead of fighting against Go's testing philosophy, I worked with its built-in patternsLevel 2: Constraint-Based Problem Solving
Exercise 2.1: Artificial Constraint Challenge
Time: 30-60 minutes per challenge Instructions: Take a real coding problem and solve it with artificial constraints.
Real Example - Go API Design:
Problem: Design a REST API for a microservice in Go
Original Approach: Use a full-featured framework like Gin or Echo, implement all CRUD operations, add comprehensive middleware
Artificial Constraints: Can only use standard library, must work with existing HTTP server, no external dependencies
Constrained Solution:
- Use net/http package with custom routing
- Implement basic CRUD using standard library patterns
- Create simple middleware using function composition
- Use Go's built-in JSON marshaling/unmarshaling
Key Insights: The constraints forced me to understand Go's standard library better, resulting in a more maintainable solutionExercise 2.2: Constraint Reframing Exercise
Time: 5 minutes when encountering coding constraints Instructions: When you hit a limitation, practice reframing it.
Real Example - Go Memory Constraints:
Constraint: "This Go application has strict memory limits and can't use more than 100MB"
Reframing:
- What constraint? → Limited to 100MB memory usage
- How could this help? → Forces me to focus on efficient data structures and avoid memory leaks
- What opportunities? → Creates a clean, efficient application that scales betterExercise 2.3: Minimum Viable Solution
Time: 15-30 minutes per problem Instructions: Solve coding problems with the absolute minimum resources needed.
Real Example - Go Logging:
Problem: Need to implement logging for a Go microservice
Minimum Solution:
- Use Go's built-in log package
- Create simple log levels (INFO, ERROR)
- Write to stdout (let container orchestration handle log collection)
Value Created: Basic logging with zero external dependencies
Where to Add Complexity:
- Structured logging (high impact, medium effort)
- Log rotation (medium impact, high effort)
- Centralized logging (high impact, high effort)
Why: Basic logging provides immediate value, advanced features can be added incrementallyLevel 3: Momentum-Building Strategies
Exercise 3.1: Existing System Audit
Time: 20 minutes weekly Instructions: Identify what’s already working in your codebase and how you can build on it.
Real Example - Go Service Enhancement:
Existing System: Basic Go HTTP service with simple endpoints
What's Working:
- Stable HTTP server with good performance
- Basic error handling
- Simple request/response patterns
How We Can Build On It:
- Add middleware for common functionality (logging, auth)
- Implement graceful shutdown using existing server patterns
- Add health checks using existing HTTP handlers
Next Steps:
- Week 1: Add logging middleware
- Week 2: Implement graceful shutdown
- Week 3: Add health check endpointsExercise 3.2: Momentum Mapping Exercise
Time: 15 minutes when starting new coding projects Instructions: Map existing energy in your development team and identify how to channel it.
Real Example - Go Microservices Architecture:
Project Goal: Migrate from monolithic Go application to microservices
Existing Energy Sources:
- Team already familiar with Go and HTTP services
- Management wants better scalability (microservices can help)
- Developers frustrated with monolithic deployment issues
How to Channel Energy:
- Start with extracting one service from the monolith
- Use existing Go patterns and libraries
- Show how microservices solve specific deployment problems
Potential Resistance:
- "We don't have time to learn new architecture patterns"
- "Current monolith works fine"
Mitigation Strategy:
- Start with non-critical service to prove value
- Use existing Go knowledge and patterns
- Show concrete benefits (independent deployment, scaling)Exercise 3.3: Incremental Improvement Practice
Time: 10 minutes daily Instructions: Identify one small improvement you can make today that will compound over time.
Real Example - Go Code Documentation:
Today's Small Improvement: Add one comment to a complex Go function explaining its purpose
Expected Compound Effect:
- Future developers (including me) understand the code faster
- Reduces time spent debugging complex logic
- Creates culture of self-documenting code
- Makes code reviews more effective
How to Measure Progress:
- Track number of functions with clear comments
- Measure time to understand code during reviews
- Count questions asked about code functionalityLevel 4: Advanced Integration
Exercise 4.1: Judo Engineering Design Review
Time: 10 minutes before starting any new coding work Instructions: Evaluate all new work through the four principles.
Real Example - Go Microservice Design:
Project: Design a new Go microservice for user authentication
Leverage Approach:
- Use existing Go HTTP patterns instead of learning new frameworks
- Extend current authentication logic rather than rebuilding from scratch
- Leverage existing database connection patterns
Constraint Strategy:
- Limited to existing infrastructure and databases
- Must work with current security and compliance requirements
- Can't modify existing services (only new ones)
Momentum Building:
- Build on team's existing Go knowledge
- Use established coding patterns and conventions
- Follow current testing and deployment practices
Precision Focus:
- Focus on core authentication functionality (login, token validation)
- Skip nice-to-have features that don't impact security
- Prioritize reliability over complex featuresExercise 4.2: Leverage Opportunity Hunt
Time: 5 minutes daily Instructions: Actively look for opportunities to apply judo engineering principles in your daily coding work.
Real Example - Go Code Review Process:
Opportunity: Code reviews are taking too long and missing important issues
Judo Principle: Leverage over Force - Use existing tools and processes more effectively
Action Plan:
- Create a simple checklist template for common Go review items
- Use automated tools (gofmt, go vet, golint) to catch basic issues
- Focus human review on business logic and architecture decisions
Expected Impact:
- Faster reviews (less time on formatting/style issues)
- Better quality (automated tools catch more issues)
- More focused human effort on high-value problemsExercise 4.3: Team Judo Moments
Time: 15 minutes weekly team meeting Instructions: Share examples of applying judo engineering principles in software development.
Real Example - Go Performance Optimization:
Team Member: Sarah (Software Engineer)
Judo Moment: Instead of rewriting our entire data processing pipeline, I optimized the existing Go code by using sync.Pool for object reuse and implementing worker pools for concurrent processing
Principle Applied: Momentum over Muscle - Built on existing code instead of starting from scratch
Key Learning: The existing code structure was actually good; I just needed to optimize the performance bottlenecks rather than rebuild everything
Team Discussion:
- "This approach saved us 2 weeks of development time"
- "We should document this optimization pattern for future use"
- "Let's create a performance optimization checklist"Software Engineering Self-Assessment Tools
Code Leverage Ratio
Instructions: Track your coding decisions for one week and calculate the ratio of leverage to force approaches.
Template:
Day 1: Force: ___ Leverage: ___
Day 2: Force: ___ Leverage: ___
Day 3: Force: ___ Leverage: ___
Day 4: Force: ___ Leverage: ___
Day 5: Force: ___ Leverage: ___
Total Force: ___ Total Leverage: ___
Ratio: ___% Leverage
Goal: Increase leverage ratio by 10% each weekCode Constraint Creativity Index
Instructions: Rate your creativity in finding solutions within coding constraints (1-10 scale).
Template:
Week 1: ___/10
Week 2: ___/10
Week 3: ___/10
Week 4: ___/10
Average: ___/10
Trend: ________________Code Momentum Building Score
Instructions: Rate how effectively you’re building on existing code and systems (1-10 scale).
Template:
Week 1: ___/10
Week 2: ___/10
Week 3: ___/10
Week 4: ___/10
Average: ___/10
Trend: ________________Code Precision Focus Meter
Instructions: Track how much time you spend on high-impact vs low-impact coding work.
Template:
High-Impact Work: ___ hours
Low-Impact Work: ___ hours
Ratio: ___% High-Impact
Goal: Increase high-impact ratio by 5% each weekSoftware Engineering Implementation Checklist
Week 1-3: Foundation
- Team commitment session completed
- Software Engineering Judo Champion assigned
- Daily Decision Audit started
- Leverage Question Practice implemented
- Force vs Leverage Journal established
Week 4-6: Constraints
- Artificial Constraint Challenge completed
- Constraint Reframing Exercise practiced
- Minimum Viable Solution approach adopted
- Code Constraint Creativity Index baseline established
Week 7-9: Momentum
- Existing System Audit completed
- Momentum Mapping Exercise practiced
- Incremental Improvement Practice started
- Code Momentum Building Score baseline established
Week 10-12: Integration
- Judo Engineering Design Review implemented
- Leverage Opportunity Hunt active
- Team Judo Moments sharing established
- All assessment tools showing improvement
Success Celebration Template
Software Engineering Judo Achievement Certificate
This certifies that [Team Name] has successfully completed the Software Engineering Judo Engineering Self-Paced Training Program, demonstrating mastery of:
- Leverage over Force thinking in software development
- Constraint-based problem solving in coding
- Momentum-building strategies for codebases
- Precision focus on high-impact software work
Key Achievements:
- Code Leverage Ratio: ___%
- Code Constraint Creativity Index: ___/10
- Code Momentum Building Score: ___/10
- Code Precision Focus: ___% high-impact
Date Completed: ___________ Team Champion: ___________