BACK

1. Early Failure Experience: University Project
- Task involved implementing a ray tracing algorithm.
- Mistake: Copy-pasted algorithm with mixed-up coordinate dimensions (x, y, z).
- Lack of tests and version control complicated debugging.
- Lessons:
- Importance of testing and version control.
- Avoid rushing and coding when tired.
- Failures are learning opportunities.

2. Success Story: Adoption of Elasticsearch in 2013
- Early adoption of Elasticsearch version 0.90.2 despite it being a non-release version.
- Resulted in better metadata search than prior DB-based solutions.
- Required breaking organizational rules but proved worthwhile.
- Development freeze in 2015, resumed in 2018 with new requirements, causing maintenance challenges due to outdated version.
- Lesson:
- Adopt new technologies thoughtfully.
- Maintain and update software to avoid difficult upgrades.

3. Technical Challenges and Solutions
- Encountered Linux kernel bug affecting RPC communication with .NET clients.
- Created custom PortMapper solution to replace broken Linux RPC component.
- Outcome: Improved performance and long-term stability.
- Lesson:
- Do not hesitate to address fundamental system issues.
- Innovative solutions can outperform existing components.

4. Risk with Production Access and Junior Staff
- Junior engineers given access to production for issue investigation.
- Accidentally caused disk space issues by writing output in wrong directory.
- Monitoring alerts prevented bigger disaster.
- Lesson:
- Ensure proper controls and monitoring when granting production access.

5. Future-Proofing and Refactoring Challenges
- Encountered legacy Java class with 5000+ lines, multithreaded, no tests.
- Business prioritized other features over refactoring.
- Avoid perfectionism; focus on delivering business value.
- Minimum Viable Product (MVP) approach recommended.

6. Programmer Virtues: Laziness, Impatience, Hubris
- Laziness drives automation and efficiency in software development.
- Reference to Larry Wall’s virtues discussed.
- Suggests podcasts on leveraging laziness for productivity.

7. Proper Boundaries for Flexibility and Stability
- Case study: handling client configuration via a simple file.
- Initially planned shared file access across multiple services.
- Proposed an isolated REST API microservice instead.
- Resulted in clear boundaries, easier extensions, flexibility, and faster delivery.

8. Importance of Clean Code and Architecture
- Example: Well-maintained Lehman Brothers code surviving financial crisis.
- Clean, well-structured, and well-documented code leads to longevity and maintainability.
- Another project: Found a 25-year-old undocumented bug due to lack of consistent refactoring.
- Lesson:
- Clean code and good documentation are critical for sustainable software.

9. Migration Strategy Failures
- Migration tool for deployment scripts triggered real migration without staging/testing.
- Caused late Friday night emergency fixes.
- Migration unintentionally ignored Linux open files limits, causing connection drops.
- Lesson:
- Have proper migration strategy, documentation, and controls in place.

10. AI and Software Delivery Future
- AI increasingly used to boost productivity.
- Speaker highlights upcoming talk about agentic AI integration in delivery processes.

11. Conclusions
- Adaptivity, control, and process are keys to handling software unpredictability.
- Failure is part of learning and eventual success.
- Importance of learning from mistakes over time.
- Quoted Martin Fowler: Embrace controlled adaptivity instead of trying for unrealistic predictability.

Actionable Items / Tasks:
- Always implement testing and version control from the start.
- Maintain and update software to avoid technical debt.
- Establish proper production access controls and monitoring.
- Define clear boundaries between components, favor microservices where suitable.
- Prioritize business value and MVP over perfectionism.
- Strive for clean, well-documented code and architecture.
- Prepare and validate migration strategies thoroughly before execution.
- Leverage AI tools to improve productivity in software delivery.
- Foster a culture of adaptability, learning from failure, and continuous improvement.

How to (not) deliver your software

Share:

11:20 - 11:50, 27th of May (Tuesday) 2025 / DEV ARCHITECTURE STAGE

Join Bart as he embarks on a captivating journey through his career, sharing lessons learned from diverse assignments in software development, architecture and delivery.

In this insightful talk, he will delve into both triumphs and setbacks, offering a unique perspective on the factors that drive success and failure. He will try to tackle intriguing questions such as:
    • What does it truly mean to do things right?
    • Can laziness actually lead to better code?
    • How can you future-proof your software?
    • Why might avoiding perfectionism enhance delivery?
And many more thought-provoking topics.

In this session, Bart will also dive into some quirky tales, including:
    • Code that survived the financial crisis
    • A well-hidden 25-year-old bug
    • The necessity of fixing Linux kernel to enable proper API communication
 

LEVEL:
Basic Advanced Expert
TRACK:
Dev Software Software Architecture
TOPICS:
Backend ITarchitecture Java SoftwareEngineering