и да и нет
функцию надо изменять лишь тогда, когда она неэфективно работает
а если менять логику функции - то либо изначально не надо было делать так функцию, либо менять логику)
Эффективность работы очень расплывчатое понятие без огромного кол-ва уточнений.
Когда функция написана, например, на отдачу массива, а Вам уже нужен, как тут давали пример, json, то люди не заморачиваясь тулят конструкцию проверяющую что нужно отдать. А когда там не только json нужен будет, то все станет еще печальнее. Поэтому, да, приходится проектировать лучше и понимать что за чем идет.
А шаблоны в этом случае лишь дают общее понятие как можно сделать хорошо сразу обойдя свои велосипеды и ошибки, т.к. используют результат решения ошибок других.