Some principles and techniques I use in my teams at the moment. I hope these could be helpful for Technical Leads or Product Owners.
Software engineers enjoy solving problems with code. They value understanding why the thing they are working on is important.
For almost all non-trivial tasks, the full scope of dependencies, technical limitations and edge cases only reveal themselves during the development process. For this reason, I try to make the initial planning light touch and focus on the problem to solve. Accepting that we will start the development process before knowing everything can make estimating difficult. Forcing engineers to commit to specific estimates makes them feel that they cannot modify their approach if they learn something through the process of doing. Here are some reasons engineers can struggle with estimating and what can be done to help.