No easy answer.
If there’s something I like is to write code. I haven’t done so in years, but it still is my passion. A year or two ago, I’ve done a small coding project for something I needed. After a whole day of coding it dawned on me that I haven’t checked my email, social networks or notifications the whole time – and didn’t even miss it. The only thing these days that can focus me on a single task at a time is programming.
When I did develop, and manage developers, there was always that tension of NIH in the air – the Not Invented Here syndrome that we developers are so good at. We want to develop stuff on our own and not “outsource” it to others. Hell – if I wrote a piece of code a year ago it was crap the next year and had to be rewritten.
I had the chance to listen in to Apigee’s recent webcast on Build vs Buy API Management. See it here:
This webcast goes over a lot of reasoning I see going on in any development project when the decision needs to be building build and buy.
The funny thing is that I don’t hear this kind of a discussion enough when it comes to messaging. Somehow, people think it is trivial.
I took a few of the concepts in this webcast, and “translated” them into the realm of build vs but for messaging.
Limited view of the scope
When a project starts, it seems that adding messaging isn’t that hard. You have a bunch of people. Maybe some presence indication. Run around a few Websocket messages for the text involved in the conversation and you’re done.
But is it really true, or is there more to messaging? It is far from trivial. Even simple things like delivering messages while disconnected or handling push notifications are notoriously hard to get right – even for those who should be the experts in it.
When you define what it is you need to build for your messaging, most often than not, you’ll be doing it with the following “mistakes”:
- You will have a narrow scope of what is really needed
- You will focus on the functional part of messaging, but probably a lot less of the other requirements (such as a good backend to understand what your system is doing and how people end up using it)
With limited scope comes the challenge of not comparing the right things when deciding between build or buy.
Every development project is risky. Purchasing an off the shelf solution usually mitigates the risk by having it done by someone else where the payment and deliverables are known in advance.
Developers tend to ignore risk – especially if the project is interesting enough to build. And yes. A distributed, low latency, high efficiency, large scale messaging backend written in Lua or Go is highly interesting.
You are not WhatsApp. Or Netflix
Building your own messaging system is hard. It takes a lot of effort. WhatsApp seems so easy, but getting there is hard.
This shift towards in-app messaging that is occurring means that in most cases, messaging is becoming part of an IT project and not exactly an R&D project. As a company, this means the focus is elsewhere and that messaging is considered a commodity or a non-core technology.
In such cases, there is no real funding for ongoing development, support and maintenance of an in-house DIY messaging framework.
Can open source help?
Sure, but is it at the right level of maturity?
There are a few dozen open source messaging frameworks out there. They probably do the work, but barely.
And the main challenge is that messaging is rapidly changing, which means that whatever is out there today is probably somewhat obsoleted or out of sync with what you need anyway – and getting it to where you need it means more investment on your end. Probably.
To top it all, with most of these open source initiatives, what you’ll find out that they have one main contributor behind them. That contributor is most probably a vendor who is offering support and proprietary modules to take care of commercializing the open source offering. Things like reporting, scaling, maintenance, etc. – all these will fall in the domain of proprietary and payment.
So if the idea from the start was to use open source to refrain from having to negotiate and work with a vendor, where does that lead you down the road? Isn’t it better to acknowledge the fact from the onset and find a suitable solution out of a larger set of available vendors?
Time To Market
I know. I know.
If you write your own messaging system, it will take you the better part of a weekend. Adding a bit of code and stability around it clocks it at a month. Nothing can beat that.
But what is it you are comparing here? Are you concerned about your prototype implementation or is that like production grade we’re talking about?
Getting something to production requires a lot more time.
Why are you even going DIY?
Is it because it will be cheaper?
Because you’ll have more control over your future and destiny?
DIY is going to cost you in time and effort which you don’t necessarily have.
If and when this project of yours going to succeed, you’ll find out that with it more requirements and maintenance work is necessary. But what you’ll also find out is that the budget might not be there for you to handle that extra load in development. You promised the organization a working messaging system, and now that it is working – why are you asking for more funding exactly?
Easy? Hard? Core? Commodity?
I guess in most cases, deciding to develop your own messaging system requires a very good reason.
At testRTC we had that same need, though slightly different. We needed a way to communicate with the browser machines we’re running. It was all fine and well when the number of machines was rather small and their locations were simple. It became a real headache when we grew bigger and when customers started connecting machines in locations with flaky internet connections. We ended up using integrating one of the realtime messaging players for that purpose – and haven’t looked back at it since.
Messaging might seem easy, but it is pretty hard once you get to the details.
So why not outsource it and be done with it?