Функции абсолютно необходимы, чтобы оставаться организованным. Вы должны сначала спроектировать проблему, а затем, в зависимости от различных функций, вам нужно разделить их на функции. Некоторый сегмент кода, который используется несколько раз, вероятно, должен быть записан в функции.
Сначала я думаю о том, с какой проблемой вы столкнулись, разбейте компоненты и попробуйте написать функцию для каждого компонента. При написании функции посмотрите, есть ли некоторый сегмент кода, делающий то же самое, затем разбейте его на подфункцию, или если есть подмодуль, то это также кандидат на другую функцию. Но в какой-то момент эта работа должна прекратиться, и это зависит от вас. Как правило, не создавайте слишком много больших и не слишком маленьких функций.
При создании функции, пожалуйста, учитывайте, что конструкция имеет высокую когезию и низкое сцепление.
EDIT1: :
Вы также можете рассмотреть отдельные модули. Например, если вам нужно использовать стек или очередь для какого-либо приложения. Сделайте это отдельными модулями, функции которых можно вызывать из других функций. Таким образом, вы можете сохранить перекодированные часто используемые модули, запрограммировав их как группу функций, хранящихся отдельно.