We want to design a solution for generation and validation of OTP(One Time Password) process. We decided to create OTP process as a separate micro service. Since OTP need to be communicated to users we felt a need to create a separate micro service for communication (SMS, mails etc.).

While designing we came up to a problem of which service should have responsibility for the message template binding. We came with below approaches to solve it:

  1. The OTP service will have responsibility of creating and binding message templates, based on the service that is calling, and pass the message to SMS service.
  2. A separate template micro service need to be created and the OTP service will call the template service which will return the message to OTP service and then it will be passed to SMS service.

  3. Create a separate template micro service, but the let SMS service communicate with it. Here the calling service will initiate OTP with identifier and this identifier will be passed on to the SMS service which will fetch appropriate message from template service.

The first approach gives additional responsibility to the OTP service. The second and third approach separate out the template responsibility to a separate service, but we could not came to a consensus whether the OTP service or SMS service should call the template service.

We need to know which of the above approaches seems relevant and why?

Additional Info:

  1. SMS service will not be limited to only OTP messages. We will extend it to also send other communication.
  2. OTP service already has the responsibility of creating and verifying OTP.
  3. If we create a separate template micro service we will use it for other communications as well

1 Answer 1


To be honest, for the immediate need, all of those approaches will work.

The only criticism I might add is that your template output format really depends on the type of message being sent. SMS formats are going to be a lot more simple than HTML email formats. For that reason, I would make your templating service more closely coupled with your messaging services. Your 3rd option does just that, and it makes it more flexible as you potentially add new messaging types.

Essentially you need to know 2 things to template a message properly:

  • The output format
  • The type of message

Using those two criteria, you can select the correct template and apply it to the raw message.

  • I get your point, but there is one more argument that the OTP service will approach the template service once to get template identifier to pass on to the communication service. Why not pass the whole binded message then?
    – nak
    Commented Feb 26, 2018 at 12:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.