The application provides a workflow to submit, evaluate and approve or disapprove an innovation in any real life subjects. The workflow's actors are:
- Innovative people, who want to create and submit for approval some innovation in their subject of interests.
- Experts, who review the innovation, rate it and decide to approve/disapprove for the patent.
- Application administrators, who maintain the innovation form templates as well as their binding to the subjects of interests and locations.
Each actor type can be a group of people. Each member of the group can work on the assigned task.
Along with actors above, the system has administrative actor as well who is responsible for creating and maintaining innovation submission templates specific for each innovation area. The system provides an intuitive UI to manage such templates. Each template can reference a specific business unit and region where such type of innovation takes place.
Each application screen displays the data in the way that is convenient for current type of user. Each screen design is always as simple as possible and as much as informative on the other hand.
The application has two types of deployment: Small Businesses and Enterprises. Enterprises have an option to utilize their own Active Directory that may include company organization structure (employees, business units and regions).
The application has distributed architecture and is optimized for deployment on cloud services such as Microsoft Azure. In addition, the application is a part of the distributed SaaS solution that provides the following services (but not limited to):
- Single Sign On service
- User and Role management
- User profile management
The application consists of the following tiers:
- Front-end (Angular JS)
- Back-end (services exposed by Web API and WCF)
- Front-end is built as a pure SPA (Single Page Application) using Angular JS 1.4. We intended to create smooth user experience. The user does not have to wait for an operation to be completed. They execute operation and can proceed working. The UI notifies them as soon as the operation is completed.
- We built our custom building subsystem using gulp tasks that allows us quickly extend the source code without worrying that we miss any piece of code or resource in the build.
- Contains application specific services (implemented on Web API) as well as SaaS solution services (implemented on WCF).
- We used Domain Driven Design approach to create proper Domain model and separate it from any application infrastructure blocks to provide as maintainable as possible code and, on the other hand, to avoid code duplication.
- In addition, we utilized CQRS pattern to completely separate update commands (which are always asynchronous) and reading queries handling.
- Back-end tier services can be deployed to different physical servers.