Как принимать сложные продуктовые решения вместе
Разбираем формат коллегии: как собирать экспертов за одним столом, чтобы решения были и быстрыми, и взвешенными.
+--------------------------------------------------------------------------------------+ | LOADING | +--------------------------------------------------------------------------------------+
Dev Collegium работает в формате коллегии: над любым сложным решением думают несколько человек с разным опытом.
Это снижает риск критических ошибок и помогает быстрее находить нестандартные варианты. Мы не заменяем личную ответственность, но делаем так, чтобы инженер никогда не оставался один на один с тяжёлым выбором.
Принципы, которые мы не нарушаем
- Каждое значимое решение проходит через несколько точек зрения.
- Мы явно фиксируем допущения и ограничение задачи.
- Код всегда привязан к бизнес‑контексту, а не к абстрактным «best practices».
Небольшой пример
Допустим, у нас есть сервис, который рассылает задания участникам программы. Наивная реализация может выглядеть так:
async function sendTasks(users: User[], tasks: Task[]) {
for (const user of users) {
for (const task of tasks) {
await api.sendTask(user.id, task.id);
}
}
}С точки зрения продакшена это решение слабое: блокирующие запросы, отсутствие трейсинга и контроля за повторными отправками.
Более реалистичный подход использует очередь и идемпотентность:
async function enqueueTasks(
queue: JobsQueue,
users: User[],
tasks: Task[],
) {
for (const user of users) {
for (const task of tasks) {
const jobId = `${user.id}::${task.id}`;
await queue.enqueue({ jobId, userId: user.id, taskId: task.id });
}
}
}Хорошее инженерное решение почти всегда чуть сложнее первой идеи, но делает будущие изменения дешевле.