This post is aimed towards anyone integrating one of the many flavors of Windward Core Document generation products with their own software.
Windward Core at a high level is made up of two “components” the Template Designer and the Processing Engine. The Template Designer is a Microsoft Office Add-In that allows non-technical users to design their data driven/dynamic documents without the need for IT involvement. The Processing Engine is the logic that knows how to interpret the Template and process it into its final output. The Processing Engine is either purchased as an SDK (.NET or JAVA) or a RESTful Web service (.NET RESTful or JAVA RESTful).
The Microsoft Office + Windward Template Designer combine to form an IDE (Integrated Design Environment) for Dynamic Document development. The Templates in combination with the Engine can be thought of something similar to “nano” service platforms like AWS Lambda or Azure Functions. Each Template holds the entirety of the logic needed to define the resulting document and is completely separate from every other Template.
Just like any software development tool, you can make your Document Templates as simple or as complex as you need. The more complex the Document Template, the more technical expertise you will need to develop it and the more processing time the engine will need to create the final document.
Keep in mind that non-functional requirements (NFRs) are every bit as important as the functional requirements you receive from business stakeholders. NFRs regarding : performance, reliability, availability, scalability, recoverability and security are just a few. The overall design of your solution will need to take these and other NFRs into account for your project’s ultimate success.
Very rarely do we run into a Customer who is integrating Windward Core with a monolithic application. Most software projects these days are some flavor of Service Oriented Architecture (SOA). The reality is that business needs/requirements change quickly and they want the tools they use to keep up with the pace of business. The current solution to this problem is to divide systems into services with one purpose and have specific teams work on a service or closely related set of services.
Taking the above points into account, our #1 recommendation is to have separation between your software and the Windward Core processing engine. Very rarely do you need to fulfill some requirement by directly referencing the Windward Core SDK in your code base.
There are many ways to attain this separation. Nothing new here. This is the (S) in the object oriented principles of SOLID.