Switching to Erlang, Part 3
In my previous posts about VHT’s transition to Erlang, I discussed the history of Erlang and the industry trends. Now let’s talk about how VHT is going to move forward.
It is essential that we leverage the power of Erlang immediately as we transition our product form its current state to our goal state. To that end, we are building a plan to set an incremental path to our goal. The plan is as follows:
- Continue to stabilize our current product (empty the water in the boat as we plug leaks in the boat). We have made significant progress in this area, and this has enabled us to spend more resources on new features instead of fighting fires.
- Define a target architecture and build a plan to move to the target architecture leveraging what we have learned via the Mikado method.
- Start with a single team focused on building new features in Erlang. As we build our skills and knowledge of the new tools, we will then begin to bring additional developers over the next year to Erlang.
- Continue to add new functionality as we transition. We cannot stop the train as we make deep and fundamental improvements to our engine.
- As our product plays an ever-increasingly important role to our customers, it is essential that our application deliver in reliability, performance and features. It has to be the best in the industry. Transitioning to Erlang will help us accomplish all three.
The work before us is a challenge; however, we have what we need to succeed. We have the unique opportunity to grow our product, our company and our customer base through the engineering task before us. The market is excited about the Conversation Bridge, which is fundamentally changing the way companies interact with their customers. Our message has excited our existing customers and is bringing us new customers. The wheels are in motion.
What are the risks? Historically, creating a parallel project in a new language (i.e., ground-up rewrite) seldom results in a functionally equivalent product. Typically you end up with two versions of the same product. On the other hand, changing an existing product a piece at a time can result in an old architecture implemented with a new language. Is it possible to leverage the advantages of a new language with such an approach?
We do not plan to take either approach but a hybrid. We are defining a target architecture that leverages the power of Erlang. Then we are building a roadmap that enables us to move from what we have to our goal. C++ and Erlang co-exist very well. Taking such an approach will enable us to maintain functional equivalence plus gain the advantages that Erlang brings such as high fault tolerance, distributed processing, scalability across cores, processors, servers and even locations.
If you have experience with transitioning languages, especially from C++ to Erlang, let me know in the comments!