ДИСЦИПЛИНА 5
Функция
Разрезать | Разместить | Функция | Соединить
Разрезать
Чистая часть — это часть, функция которой умещается в одну фразу
Разместить
Место части вытекает из того результата, который ей нужен, и того, который она даёт
Функция
Каждая часть производит один проверяемый результат и отвечает за него
Соединить
Результаты частей в сумме дают ровно результат целого
Часть, чисто разрезанная и правильно размещённая, всё ещё должна что-то делать. Её функция — это её работа внутри целого: то, ради чего она там стоит. И то, как эта работа выражена, решает многое, потому что одну и ту же часть можно описать двумя способами: через то, что она делает, или через то, что она производит, и только один из них говорит тебе, работает ли часть.
Функция части — это результат, который она производит, а не действия, которые она выполняет. Описанная через действия (принять данные платежа, запросить списание, повторить при неудаче), часть не имеет финишной черты. Список может расти без конца, каждое новое действие кажется частью работы, и никто не может сказать, когда часть закончила и сделала ли она то, ради чего существует. Описанная через результат, та же часть имеет ясный конец: состояние, которое наступает, когда часть закончила, и которого не было раньше. Действия — это то, как часть туда приходит; результат — это то, куда она идёт. Определи часть через то, куда она идёт, и действия становятся её собственным делом: они могут меняться, пока результат приходит.
Поэтому проверка функции любой части сводится к двум вопросам. Что будет достигнуто, когда эта часть закончит работу? И можно ли это проверить? Если ты можешь назвать конечное состояние и кто-то мог бы проверить его, не спрашивая людей внутри части, функция выражена хорошо. Если всё, что ты можешь назвать, — это действия или конечное состояние, которое никто не смог бы проверить («платёж обработан», «с учётной записью разобрались»), функция остаётся расплывчатой, а за расплывчатую функцию ни с кого нельзя спросить. Функция, выраженная как проверяемый результат, даёт части финишную черту, а всем остальным — то, на что можно положиться.
Наивысший возможный стандарт — выражать функцию каждой части как один результат, а не как список действий: конечное состояние, которое наступает, когда часть закончила, и которое мог бы проверить любой, чтобы у части была ясная финишная черта и всё вокруг неё точно знало, что она поставляет.
Ключевой вывод: Функция части — это результат, который она производит, а не действия, которые она выполняет. Описанная через действия, часть не имеет финишной черты: список растёт, и никто не может сказать, когда она закончила и сработала ли. Описанная через результат, она имеет ясный конец: состояние, которое наступает, когда она закончила. Проверка — два вопроса: что будет достигнуто, когда эта часть закончит работу, и можно ли это проверить? Если ты можешь назвать только действия или конечное состояние, которое никто не смог бы проверить, функция остаётся расплывчатой, а за расплывчатую функцию ни с кого нельзя спросить.
Выражай функцию каждой части как один проверяемый результат: что будет достигнуто, когда она закончит, а не что она делает по пути.
MarvinPro · PROCESS · Вот Как Строить · Проектирование · Суб · Дисциплина 5: Функция · Раздел: Одна работа, выраженная как результат
MarvinPro | Октябрь 2026
marvinpro.com
Функция части не существует сама по себе. Каждая часть находится внутри чего-то большего, и её функция существует, чтобы служить результату этой более крупной части. Поэтому функции частей — не набор отдельных работ, которые просто оказались рядом; это куски одного большего результата, и они должны в него складываться. Функция части правильна не только тогда, когда она ясна, но и тогда, когда она — тот кусок, который нужен целому.
Сложенные вместе, функции частей должны давать ровно результат более крупной части: ничего не пропущено, ничего не сделано дважды, ничего лишнего. У каждого из этих случаев своя ошибка. Пробел — это кусок результата, который не входит ни в одну функцию. Он проваливается между частями и либо не происходит вовсе, либо происходит лишь случайно, когда кто-то замечает и вмешивается. Перекрытие — это кусок результата, на который претендуют сразу две части. Его делают дважды или, хуже того, каждая часть считает, что его сделала другая, и его не делает никто. А рудимент — это часть, функция которой ничему не служит в результате: она работает, стоит денег, кто-то её поддерживает, а целому без неё не было бы хуже; часто это проверка или шаг, у которых когда-то была причина, но которые эту причину пережили.
Поэтому проверка — сложить части. Запиши результат каждой части, поставь их рядом и спроси себя, дают ли они вместе ровно результат более крупной части. Где что-то из большего результата не появляется ни в одной функции, там пробел: отдай это одной части. Где что-то появляется в двух, там перекрытие: оставь это одной и забери у другой. Где результат какой-то части не появляется нигде в большем результате, там рудимент: выясни, для чего он был нужен, и если ни для чего, убери его. Каждый кусок результата должен принадлежать ровно одной функции.
Наивысший возможный стандарт — подгонять функцию каждой части под результат той более крупной части, которой она служит, чтобы результаты частей вместе давали ровно этот результат и каждый кусок принадлежал ровно одной части: без пробелов, проваливающихся между ними, без перекрытий, заявленных дважды, и без рудиментов, которые ничему не служат.
Ключевой вывод: Функция каждой части служит результату той более крупной части, внутри которой она находится, и вместе функции частей должны давать ровно этот результат. Три ошибки: пробел (кусок результата, который не входит ни в одну часть, поэтому он проваливается между ними и происходит лишь случайно), перекрытие (кусок, на который претендуют сразу две части, поэтому его делают дважды или никто) и рудимент (часть, функция которой ничему не служит в результате, часто шаг, переживший свою причину). Проверка — сложить результаты частей и сравнить их с результатом целого: каждый пробел отдай одной части, каждое перекрытие оставь только одной, каждый рудимент убери.
Складывай функции частей так, чтобы они давали ровно результат целого: без пробелов, без перекрытий, без рудиментов.
MarvinPro · PROCESS · Вот Как Строить · Проектирование · Суб · Дисциплина 5: Функция · Раздел: На службе у целого
MarvinPro | Октябрь 2026
marvinpro.com
Функция, выраженная как результат, делает ещё одно: она говорит, за что отвечает часть. Часть и тот, кто ею владеет, отвечают за её результат. Не за выполнение набора действий, а за то, чтобы каждый раз поставлять конечное состояние. Если результат пришёл, часть сделала свою работу, каким бы путём она к нему ни пришла. Если результат не пришёл, часть свою работу не сделала, как бы занята она ни была.
Именно это разделение даёт части свободу. Поскольку часть отвечает за результат, а не за действия, то, что происходит внутри, — её собственное дело. Она может изменить способ работы, добавить шаг, убрать шаг, заменить инструмент, полностью перестроить своё устройство, и ничему вокруг не нужно об этом знать, пока результат продолжает приходить. Части вокруг полагаются на результат, а не на устройство. Именно это делает часть тем, чем можно владеть отдельно и что можно менять обособленно, — обещание, которое подпроцесс дал во второй дисциплине этого тома. Это обещание выполняет функция: часть с ясным результатом можно передать одному владельцу и свободно менять, потому что все знают, что должно сохраняться, что бы внутри ни меняли.
Размой функцию, и вместе с ней размоется ответственность. С части без ясного результата нечего спросить, поэтому, когда что-то идёт не так, никто не может сказать, подвела ли именно она. Часть, определённая через действия, привязывает всё вокруг к своему внутреннему устройству, поэтому каждое изменение внутри становится изменением для всех. А там, где функции перекрываются, за одно и то же отвечают две части, что на практике означает, что не отвечает ни одна. Ясная функция — это то, что позволяет доверять части снаружи и не трогать её изнутри.
Наивысший возможный стандарт — чтобы каждая часть отвечала за свой результат: отвечала за то, чтобы каждый раз поставлять конечное состояние, и могла свободно менять путь к нему, пока результат сохраняется, чтобы части вокруг полагались только на её результат, а ею можно было владеть отдельно и менять её обособленно.
Ключевой вывод: Функция, выраженная как результат, говорит, за что отвечает часть: часть и её владелец отвечают за то, чтобы каждый раз поставлять конечное состояние, а не за выполнение действий. Это и даёт части свободу: она может менять внутри что угодно, пока результат продолжает приходить, потому что части вокруг полагаются на результат, а не на устройство. Так выполняется обещание второй дисциплины: часть, которой можно владеть отдельно и которую можно менять обособленно. Размой функцию, и ответственность размоется: никто не может сказать, подвела ли часть, каждое изменение внутри становится изменением для всех, а там, где функции перекрываются, ни одна часть по-настоящему не отвечает.
Каждая часть отвечает за свой результат и может свободно менять всё внутри, пока этот результат сохраняется.
MarvinPro · PROCESS · Вот Как Строить · Проектирование · Суб · Дисциплина 5: Функция · Раздел: Отвечать за функцию
MarvinPro | Октябрь 2026
marvinpro.com
Вернись к активации и вырази функции её частей как результаты. «Провести платёж» — это название; функция этой части — её конечное состояние: платёж проведён или окончательно отклонён. Если выразить её так, видно то, что скрывало название. Отказ — это не хвост и не исключение, которое кто-то потом уберёт; это один из двух результатов, которые эта часть должна чисто произвести. У открытия учётной записи свой результат: учётная запись этого клиента открыта. У записи права свой: право закреплено за этой учётной записью. Каждое из этих состояний любой мог бы проверить, не спрашивая, как часть к нему пришла.
Теперь сложи их. Результат активации — клиент, который заплатил, с открытой учётной записью и правом на то, что он купил. Три функции вместе должны давать ровно это. Но допустим, что, когда платёж отклонён, клиенту никто не сообщает. Проведение платежа фиксирует отказ и останавливается; учётная запись так и не открывается, поэтому ничего из того, что идёт дальше, не запускается. Сообщение клиенту проваливается в пробел между частями и происходит лишь тогда, когда клиент сам пишет, чтобы узнать, что пошло не так. Исправление — отдать это одной функции: результатом проведения платежа становится «платёж проведён или отклонён, и клиенту сообщено». Допустим также, что и проведение платежа, и открытие учётной записи отправляют клиенту подтверждение, так что каждый новый клиент получает два. Это перекрытие: один и тот же кусок результата заявлен дважды. Исправление — отдать подтверждение одной части, открытию учётной записи, и забрать его у другой.
И посмотри, что даёт ясная функция. Человек, который исправляет логику повторных попыток внутри проведения платежа, может менять, сколько раз повторять, в каком порядке и с каким сообщением платёжного провайдера, никого не предупреждая, потому что части вокруг полагаются только на одно: на её результат, «платёж проведён или отклонён, и клиенту сообщено». Пока этот результат сохраняется, всё внутри проведения платежа может свободно меняться. Функция — это то, за что отвечает часть; устройство внутри — её собственное.
Каждая часть активации производит один проверяемый результат, и вместе они дают ровно результат активации: пробел закрыт тем, что сообщение об отказе отдано проведению платежа, а перекрытие убрано тем, что подтверждение оставлено только открытию учётной записи.
MarvinPro · PROCESS · Вот Как Строить · Проектирование · Суб · Дисциплина 5: Функция · Реальный пример
MarvinPro | Октябрь 2026
marvinpro.com
Часть, чисто разрезанная и правильно размещённая, всё ещё должна что-то делать, и её функция — это результат, который она производит, а не действия, которые она выполняет. Описанная через действия, часть не имеет финишной черты: список растёт, и никто не может сказать, когда она закончила и сработала ли. Описанная через результат, она имеет ясный конец. Спроси себя о каждой части, что будет достигнуто, когда она закончит работу, и мог бы ли кто-то это проверить; если ты можешь назвать только действия или конечное состояние, которое никто не смог бы проверить, функция остаётся слишком расплывчатой, чтобы с кого-то за неё спросить.
Функция каждой части служит результату той более крупной части, внутри которой она находится, и вместе функции частей должны давать ровно этот результат. Пробел — это кусок результата, который не входит ни в одну часть, поэтому он проваливается между ними; перекрытие — это кусок, на который претендуют сразу две части, поэтому его делают дважды или никто; рудимент — это часть, функция которой ничему не служит в результате. Сложи результаты частей, сравни их с результатом целого и отдай каждый кусок результата ровно одной функции.
А функция, выраженная как результат, говорит, за что отвечает часть. Часть и её владелец отвечают за то, чтобы каждый раз поставлять конечное состояние, и могут свободно менять внутри что угодно, пока результат продолжает приходить, потому что части вокруг полагаются на результат, а не на устройство. Именно это позволяет владеть частью отдельно и менять её обособленно. Размой функцию, и вместе с ней размоется ответственность.
Итак, дисциплина такова: дай каждой части один проверяемый результат, сложи результаты так, чтобы они давали ровно результат целого без пробелов, перекрытий и рудиментов, и пусть каждая часть отвечает за свой результат, а её устройство остаётся за ней. Если сделать так, размещённые части становятся работающими частями: каждую знают по тому, что она поставляет, ей доверяют снаружи, и она свободна внутри. Остаётся понять, как эти результаты переходят от одной части к следующей, а это работа внутренних швов.
Дай каждой части один проверяемый результат, сложи результаты так, чтобы они давали ровно результат целого, и пусть каждая часть отвечает за свой результат, а её устройство остаётся её собственным.
MarvinPro · PROCESS · Вот Как Строить · Проектирование · Суб · Дисциплина 5: Функция · Результат Главы
MarvinPro | Октябрь 2026
marvinpro.com
Думай Просто.