As software engineers working directly for companies such as ING, DHL, and bol we've been repeatedly faced with the same type of challenges emerging in complex, distributed systems. The thing is: the programs we write are part of a network and in order to work they need to be able to communicate with other systems. Admittedly the current trend to move from a monolithic to a microservices architecture has solid foundations for some businesses but we realised it comes with major hurdles, too. The first and foremost problem is defining and adhering to specs which govern the communication between the services, which is almost never easy and straightforward. As a consequence, a lot of time and resources are being wasted at the customer’s side. We see it all too often in our daily job and, naturally, we started to think of a cure.
But let’s get more specific: imagine two teams working on modules A and B separately. Both A and B are written in two different programming languages. At the end of the day the two will have to communicate with each other. Consequently, what module A sends to module B and in which way will need to be agreed on between the teams (the so-called “API contract”). And this is exactly where things start to go haywire.
Theoretically, both teams could adhere to an open API specification and structure their information accordingly.
But in practice, open API specs are huge and for that reason difficult to maintain.
As a result both teams only respect the contract more or less (usually less) and it takes dozens of iterations to have the two modules communicate flawlessly. We’ve seen it fail too many times and dreamt of making our lives easier. We figured a simpler, faster and more concise method must be possible. This is how we started Wirespec.
Our goal was to write a new language which would not only specify how the data needs to be structured - but one which would literally force the developer to be compliant with the specs by generating the code.
Wirespec isn’t a programming language but rather a contract specification language, one which describes how data is organised and moved around within a software system.
Furthermore, it helps generate the necessary code to make this data transfer happen in a safe and consistent manner across multiple programming languages. Our ambition is to do away with the huge API specifications defined as a Json schema, cut unnecessary discussions between teams and make communication throughout microservices a piece of cake.
Current status
Currently, Wirespec is in the development stage. Several Flock. engineers are testing it already, we’re collecting feedback, we’re building plug-ins for some IDE’s and build tools. Once the 1.0 version is released, we’ll be looking for collaborators (and guinea pigs!) to help us develop Wirespec, test it and provide feedback. Our goal is to produce a commercially stable version in the months to come.
Do you feel capable and want to join in with the project? Drop us a line at info@flock.community.