 Hello everyone. As she has given an introduction to what my talk is on. So usually whenever we want to solve a problem or when we are trying to code some application, we would try to look into what frameworks are available for us. The first thing that we actually do is list out what are the things that we want to address in our application and then find for a framework. But at times what happens is we kind of miss out on few things and then we try to jump into a conclusion that this framework would be best for us. So something like that that we've recently encountered in one of our applications is we actually wanted to read data from one database and then put that data onto Kafka. So the best solution for us was to use Spring Cloud Streams. So we went ahead with that. So we had an integration flow where in which an integration flow would essentially have like a from which would take data from a source and then you would have like a transform stage where in which you would like to transform the data and then do a send. So we were happy that we got results and then one day while we were doing performance testing is when we really came to know that what we wanted to actually achieve. As soon as we get in a data from the database we wanted that to be on Kafka but that is not what we had achieved. What we had done is we were able to pull for certain number of records and let us say we were able to pull like thousand records in a time. Let us say we were able to pull. Yeah something like that happened in the project as well. So we were able to pull like thousand records at a time but all those records were put into Kafka only after all of the thousand were transformed. But we wanted to put them onto Kafka after one each and every record was transformed. So because of this we had to tweak in the framework and the stage in where in which we were getting and transforming the data and publishing to data were done in one stage. So we did not leverage the framework properly. So that is where we found out that the framework was not suitable for us and then off late we encountered another situation saying that because we had tweaked into such a way that we were not able to actually find out where the exception was sorry when the message was not sent onto Kafka we wanted to raise an exception and notify saying that we were not successfully able to do it because we've tweaked into such a great level we were not able to do it. So now we went back to our basics and we thought okay fine let's not use frameworks in such a way that it would cause so much disaster to us and at the same time keeps us things in mind. Another use case of using the same framework was few talks earlier there was one of my friend talking about increasing the performance of a publisher which would consume records from Kafka. So one of the way that we went ahead with increasing the performance was to use batching and reading from Kafka but Spring Cloud Stream encourages only streaming records from Kafka. So if you want to read like a batch of records we didn't have proper support for that. So for that we again had to go and leverage another framework called Spring Kafka and then had two frameworks in our application which ideally I don't think we would want to do it because following the code would be difficult for us. So we would like to have certain norms while coding right like we wouldn't ideally be doing like the same thing in two different ways when we want to do the same functionality. So what I would like to say is think about all the use cases in your project be it functional or non-functional and then choose wisely and then just apart from the basic functionalities we should even take care of how well the error handling functionality is given by the framework as well. Thank you.