willem.com
share this on: Facebook Twitter Pinterest Share

Linking Lemmid Store with kitchens

Integrating with external systems that you don't control

June 12, 2020 -

As part of the food ordering app I am building, I needed to design a reliable way to link the app to external systems. These external systems are beyond my direct control and include different checkout registers, kitchen management systems and ticket printers. Read along for more on designing for the unknown and unreliable.

Food ordering app

The app I am building is Lemmid Store, it is a user friendly app that allows people to place (and pay for) takeaway food orders. You can find all posts on Lemmid Store here.

Lemmid Store - an app to order takeaway food
Lemmid Store - an app to order takeaway food

External systems

The need to connect to external systems is driven by the desire to integrate the food ordering app into the business processes related to the food delivery service. Think of things like:

Printed ticket - through an external connection - including detailed order data like product modifiers (customer's choices per product)
Printed ticket - through an external connection - including detailed order data like product modifiers (customer's choices per product)

Challenges with connecting to external systems

You may not realise it, but connecting to external systems can be tricky. If you think of the ordering app as a kind of "engine" (like in your car), you essentially want to integrate this engine with external parts. As you can imagine, not all parts are equally suitable to fit under the figurative hood. To make matters even more challenging: you do not know for sure how reliable the external parts are. You must design your integration in such a way that different external parts can be connected easily and that performance is independent on the reliability of these external parts.

Integrating external systems into your app is like fitting third-party parts to an engine: you must carefully consider their fit and reliability (image of a combustion engine, public domain)
Integrating external systems into your app is like fitting third-party parts to an engine: you must carefully consider their fit and reliability (image of a combustion engine, public domain)

Like with a combustion engine, you must consider fit and reliability when connecting integrating your software with external systems. You cannot assume that external software:

To design for this rather grim view on external connections, I thought it was a good idea to let the main backend server of my food ordering app offload the responsibility for connecting with external systems to a purpose built 'connector server'. The connector server would then independently connect to the external system. This way the main server only communicates with 'first party' parts and systems, minimising risks of misfits and possible downtimes.

Separating the main backend server from the external systems by introducing a purpose built 'connector server'
Separating the main backend server from the external systems by introducing a purpose built 'connector server'

In practice this means that the 'connector server' is actually a different machine, running its own software stack. There are a few important advantages to this segmentation:

Conclusion

However tempting it is to simply bolt on new and fancy parts to your app, you must carefully consider your setup to make sure it will perform reliable.

Designing backend server software to connect with external API's is challenging. You must hope for the best, but design for the worst!

Did you enjoy this post?

If you found this content useful,
consider showing your appreciation
by buying me a coffee ❤️😋:

Or help me by sharing this post with your friends:

Other stories

all DataDesignLemmid StoreNetworkingProgrammingServerWork