artshelom: приходит только с опытом. Спустя 10 000 часов и миллионы строк кода набитые шишки будут подсказывать, как делать правильно. Ну, и желательно много читать профильной литературы.
artshelom: callback не нужен.
Можно функциональность таймаута вплести в код метода, если метод выполняет цикл с длительными итерациями, на каждой итерации можно проверять сколько прошло времени от начала работы метода и выбрасывать исключение при превышении установленного лимита. Но архитектурно это не лучшее решение. И можно использовать какую-либо реализацию AOP для внедрения той же функциональности без "загрязнения" основной логики метода.