Moving towards workflow oriented development

I am a programming language nerd. I love the mathematical purity of Haskell, the pure simplicity of Go and the elegance of new hybrid languages like F# and Swift. The core Haskell language, for all its complexity, can be expressed in a few lines of code. The reason for this simplicity is that in Haskell the base of everything is a function. Functions take a single value and return a single value. All other language constructs are just an extension of this.

Warewolf on the other hand leverages the concept of services. A service could be a .Net function call, a Web service call, a Database call or a workflow. Each service is a separate first class construct that exposes its own set of idiosyncrasies. The model is illustrated below:

workflow execution
 The problem with this model, is that each type of service must understand how to map to every other type of service. As we move towards integration with more systems, this becomes an unsustainable model. Mixing and matching between service models would require a lot of code with even more points of failure. If we were in the Haskell world this would be equivalent of re-defining the function type each time we added a new point of integration.

integration with more systems

How do we fix this?

The answer to this problem is quite simple. What any programming paradigm needs is a single abstraction mechanism that all other constructs can derive from. In the same way that Haskell has functions and Smalltalk has objects; Warewolf has workflows. Workflows provide a single abstraction mechanism for all other programming construct. The concept of a Service falls away completely and all we have are workflows and tools. The much simpler, workflow oriented architecture is shown below.

workflow oriented development

The benefits of workflow oriented development

Existing service types become tools instead. If you need to make a call to a stored procedure, you drop a Stored Procedure Tool onto a workflow, rather than creating a database service and then dropping that service onto a workflow.

The simplicity of this model allows us to create new integration tools at an ever increasing rate. It gives our users a simpler and more concise way of expressing microservices and a far simpler way of reasoning about their systems.

The next major release of Warewolf will migrate all existing services into tools and provide what we think is a far easier way to develop a system. From that point forward expect far more tools at a much faster rate. Contact us if you’d like to be the first to know about our next release.


Leave A Comment?