We pride ourselves in helping our clients tackle even their most complex software development challenges. We want to deliver solutions that solve business problems and create value for our client. For years we have been using many excellent software practices in our projects, such as SCRUM, Test Driven Development (TDD), Behavior Driven Development (BDD) and Continuous Integration (CI). Choosing the right development methods have a noted impact on the project success and we always stress the importance of quality and efficiency.
That still leaves us with the challenges that come from the complexity of the applications and the business logic itself. One constantly relevant model to address this is "Domain Driven Design". First introduced by Eric Evens, it is "about placing our attention at the heart of the application, focusing on the complexity that is intrinsic to the business domain".
In this blog post we introduce one of our projects and how we applied the principles to deliver a solution that satisfied not only the IT department but also the end users of the system. Our client is a world leader in innovative workforce solutions. Their core business is to connect the right job seekers with the positions required by their client companies. Services include staffing, talent management and development and workforce outsourcing. To run this business effectively our client relies heavily on their enterprise portal and management system.
The management system was what we'd call a legacy system; built several years ago and not really meeting the demands of the current business model. It was highly coupled so making one change in the system required updates in several parts of the application code. In practise this meant that updating one feature required the whole system to be taken down for maintenance, resulting in great disruption for the business.
We re-built the system and upgraded to new architecture design. The system now consists of 6 key modules; authentication, job management, external job management, CV management and Web Portal and Search functionality. New business requirements can be implemented easily, as each module is updated independently and it doesn't affect the other subsystems. The subsystems communicate with each other through a message queue application, which also improves the performance. The old system could not handle so many concurrent users but now all the user requests from front-end can be queued for back-end processing without interrupting the process.
In this project we used the SCRUM framework and Domain Driven Design approach. DDD is great for complex projects like this because it puts emphasis on the core domain and the business logic, and thus aims to build the technical design around the business specific functions, supported by the more generic sub-domains. Traditionally development is focused mostly on the technical features. In DDD the business domain experts work closely with the development team and instead of using purely technical language the purpose is to create a common language that allows both sides to understand the requirements and technical work more clearly.
The project team included 5 senior developers and a scrum master from Shinetech, a project owner and architect from the client and 4 developers from the client and their consulting partner. The team widely adopted agile development methodology, which supported the development efficiency and communications. Each team member had a clear understanding about the project and tasks he/she would take on, and everyone actively participated in each discussion to maintain a good knowledge of the whole project status as well as the current tasks. The project was successfully delivered and is in use in several countries.