Every product is unique and needs a tailored architecture. The goal is to identify an architecture which evolves with new requirements constraints. Constraints are new technologies, regulatory changes or improvements in reliability and scalability.
- Identify and automate fitness functions to verify constraints
- Transform the architecture to a more modular solution
- Validate continuously the design against the constraints
- Move from a monolithic to a services architecture
Domain Driven Development
Agile cross-functional teams implement and deliver features to the customers. We have extensive experience defining architectures empowering multiple teams to work on the same product and implement effectively and efficiently new features.
- Implement domain driven development and architecture
- Use event storming to identify domain ubiquitous language
- Establish DDD as architectural approach to micro-services solutions
- Identify bounded contexts to promote parallel development
Clean Code and Refactoring
Successful products outlive their initial development teams and selected technologies. We must implement approaches to insure the source code and architecture provide a sound foundation for long-term support and product support.
- Create a clean code culture and promote software craftsmanship
- Show how static analysis tools are a life saver to improve quality of code
- Detect errors, vulnerabilities and smells
- Use refactoring patterns
- Establish test driven development - TDD -
- Establish acceptance test driven development - ATDD -
Lean approach encourages reducing cycle time. DevOps provides an optimal approach to deliver rapidly and with high quality applications in production.
- You build it, you deploy it, you run it
- Define configuration as code
- Implement Continuous integration, delivery and deployment pipelines
- Establish automatic validation and verification
- Deploy logging and monitoring