The power of integrations

“Do not reinvent the wheel” is a piece of advice I’ve heard many times and have even mentioned on occasion. Although rewriting something in your own words (code) is sometimes vital for the learning process, it is usually not efficient to implement things that people have already created and often made a business out of.

I will start the article with a small story. A few years ago, I was involved in a startup that was about to revolutionise the sporting industry. We were creating a social app that allowed sports organisation owners to connect with users by building teams and events. It was clear that we needed a messaging functionality to enable people to announce events and discuss teams, training sessions, and other activities. We considered using some out-of-the-box solutions, such as PubNub, but in the end, we ended up writing it ourselves. Seemed simple. We had message channels that had members and messages associated with them. It worked fine on a small scale, but when we needed extra functionality — industry standards like emojis, push notifications, and encryption — we had to implement it ourselves. It was a great success, but we never reached the scale to feel the real pain of maintaining it, so we were happy with the solution.

It sounds like we got what we wanted without spending a lot of time on it. We avoided a dependency on a third-party project, and we had complete control over it. We didn’t have to pay for the solution… In reality, we did pay a lot for that. We paid with our work. It involved a lot of planning to develop and thinking about the corner cases. Also, when we allow people to write messages in the app, we need to securely store them, ensure they have the correct metadata, and maintain them. This is a considerable cost, and although we haven’t felt it yet, it would impact us once we reach a particular scale. I believe we didn’t spend enough time exploring existing solutions that could offer what we wanted with minimal effort. From my experience, I can say that we often think that our solution is so special that no out-of-the-box product can give us what we need. In reality, the extra functionalities we believe will be crucial often prove not to be what we need. If a well-known solution does not solve this problem, not many people likely have this problem, making it probably not a problem worth solving. Unless our core functionality is what differentiates us from competitors, we can assume we are not particularly special in this area. For example, in our sport-oriented app, messaging was just an addition to the core that was connecting people interested in the same sport, offering training and events. We’ve made messaging a core part of our business when it should be an added value that supports our core operations.

Having Domain-Driven Design in mind, I firmly believe that starting with crystallising the core domain is the key to success. This is the area where we should focus most of our effort and resources. Things that do not provide a market advantage but merely fill a gap to avoid being worse should be implemented with minimal effort, likely by utilising an existing solution that is already available.

In the case of messaging in our small startup idea, I believe we didn’t have to write any code at all. We might have even used WhatsApp to create groups and link them to the right places in the app. This would allow us to test hypotheses and iterate quickly. I am convinced that we wasted a lot of resources trying to reinvent the wheel, something we could have either bought or ignored. I think we got lost in the nice-to-have zone, losing sight of our core business.