Align the changeability of the code to the business needs.
Software Design is nothing more than structuring the code so that:
- it does what it’s supposed to do
- it is optimized for desired business characteristics. For example: fast change, good performance, less bugs etc.
Software Design has a long history (more than 40 years) and contains many different principles, practices and laws. Choosing the right ones to apply for a specific project, understanding them in depth and teaching them to the developers in the team can be overwhelming.
Fortunately, our mentors have taken the time to learn it and to find ways of presenting it in a way that’s easier to understand.
Why improve design
Good software design allows your team to deliver new features fast and with very few bugs especially when combined with a good team organization.
Many teams face however a very different situation: large code bases that are hard to understand, hard to change and where adding new features involves a high risk of introducing bugs. This is where knowing good design practices and applying them constantly makes a huge difference in terms of investment and results.
Mozaic Works mentors are proficient in software design topics such as:
- Design Patterns: Gang of Four patterns, Enterprise Integration Patterns, Synchronization patterns etc.
- SOLID Principles
- The 4 Elements of Simple Design
- Incremental Design using Test Driven Development
- Design by Contract
- Designing with Aspects
- Design laws: Demeter’s Law, Conway’s Law etc.
- Core design concepts such as: coupling, cohesion etc.
- Measuring useful design quality indicators
You can benefit from their practical experience by applying one or more of the above on your production code.
Approach / Way of work
Mentoring is a combination of a few activities:
- Short training sessions, where one or more concepts are presented, discussed and practiced in a safe learning environment
- Practice sessions such as coding dojo or writing code on a projector
- Pair programming with team members on specific tasks related to creating or improving designs
- Refactoring sessions
- Free discussions
Each client organization has an unique culture, team members with diverse experience and skills, and business goals. Depending on your specific needs, a mentorship program can be created for key developers in the team in order to improve their software design skills.