I am a software designer focussing on the kickstart, architecture and tech-lead of Java EE and mobile systems. I produce well-designed maintainable software.
I have learned to value the following practices that succesful projects have in common:
- Apply Domain Driven Design.
- Smart software architecture is a good alternative for expensive hardware. Design for responsive, highly available and scalable systems using the eventual consistency.
- Design for testability. Decouple and use intention revealing interfaces. A system that is easy to test is easy to maintain.
- Well-organized project setup. That means developing an appropriate version control strategy, using CI and CD, automate everything, this goes also for mobile projects
- Cloud-ready technology choices
- Automated quality monitoring. Gather technical project metrics and trends. Detect changes over time
- Iterative development process. Release, deploy and gather feedback often, apply scrum with an empowered devops team
- Focus on improving team efficiency. Always detecting waste, eliminating manual repetitive actions, automate everything
- Team coherence. The project team represents stakeholders from enterprise architecture to operations and all are committed to the project goal
- Reward failure. Try to find the best solution by allowing team members to make mistakes, and have the team learn from it.
These are some of the subjects that currently have my attention:
- DCI: The way we apply Object Orientation has always bothered me. DCI addresses this itch by suggesting a dynamic style of real OO as an alternative for procedural logic in current systems.
- Mobile architectures: Modern systems with mobile clients and scalability outdate the traditional synchronous architectures. We will have to focus on designing CQRS and event driven style system.
- Recent read: Vaughn Vernon – Implementing Domain-Driven Design: This book shows how to leverage the strategic design patterns to apply DDD in modern achitectures.