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 interface

Template:

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 design

Exercise 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 patterns

Level 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 solution

Exercise 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 better

Exercise 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 incrementally

Level 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 endpoints

Exercise 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 functionality

Level 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 features

Exercise 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 problems

Exercise 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 week

Code 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 week

Software 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: ___________

Software engineering is about working with existing code and systems. Focus on extending what works rather than replacing it.
Programming language constraints often exist for good reasons. Work with them to find creative solutions rather than fighting against them.
Small, strategic code changes often create disproportionate impact. Focus on the most critical functionality first.