As programmers, we are often too perfectionists. From time to time, we face with a difficult moment where we have to finish a task in a specific time and we have to decide on
-Move forward with an ugly solution which requires little time
-Choose for a more elegant solution (or beautiful) but which can puts us in the doubt of whether actually finish on time
This is what is known as an uncomfortable moment. And I don’t mean technical debt , or leave something that then is someone is detected as a code smell. This is more important, your health is which is at stake. A portion of bad code typed today, is an angry developer tomorrow. An angry developer tomorrow, especially with you, is never a good idea.
For example, suppose that we have to migrate an app that works with Kinect SDK V1.5 and it has to use Kinect SDK V2. It is almost certain that, in addition to the changes of code of the syntax of the new sensor (skeleton by body for example), we can use some time to refactor, to improve some other things and after many lessons learned to discard some code and make an important part of this app from scratch.
All this is fine (and is what will surely end up doing), but if we apply the maximum of only doing the work defined in the Sprint, should only migrate the SDK. We should not apply any change or improvement.
Consider different scenarios
-What happens if just migrate to version 2.0 SDK?. The work is completed, Sprint can close successfully.
-What happens if the refactoring process is much more complex than originally assumed and may result in having to ask for help to someone from the team?
If we believe in providing value to our customers, it is very likely that level code the first choice is most correct.The final functionality of the app will not change even though inside is all done an ode to the spaghetti.The second option calls us also to the premise of adding value with our team, finally to do quality work.
The topic has many edges and there is a simple solution that can be applied. That’s why Scrum is not for amateurs.If someone asks me to me, I surely you would opt for the second option. That alone, first migrating the SDK, and then taking advantage of to create a specific branch to apply improvements. It is very likely that the 2nd work enters a next Sprint, but if I do not give the best of myself to do things well, I maybe not sleep 😀
Greetings @ Madrid