Я зустрічав розробників із десятьма роками досвіду, які досі мислять як джуни, і хлопців із двома роками, які вже думають як сеньйори. Тому після десяти років у професії моя чесна думка про різницю між senior і junior така: справа майже не в тому, скільки років ти пишеш код. Справа в питанні, яке ти ставиш до того, як напишеш бодай рядок.
Два питання
Питання джуна: «Як мені це закодити?»
Питання сеньйора: «А чи взагалі варто це робити?»
Тільки не подумайте, що я тут ідеалізую сеньйорів, — я сам роками ставив не те питання. Будь-яка задача виглядала як задача «написати код», тому рішенням завжди був... ще код. Нова фіча? Пишемо. Дивний кейс? Обробляємо. Хтось на стендапі згадав модний фреймворк? Чудовий привід переписати те, що й так працювало. Мені здавалося, що це і є інженерія. Насправді — імітація бурхливої діяльності.
Мислення сеньйора вмикається на крок раніше, ще до першого рядка. У чому реальна проблема? Яке найпростіше рішення її закриває? Що зламається, коли це викликатиметься тисячу разів на секунду, а не один раз? Джуни розв'язують задачі про код. Сеньйори розв'язують задачі бізнесу, у яких просто бере участь код.
Історія «два тижні проти двох годин»
Ось момент, коли до мене дійшло. Дійшло так, що пам'ятаю досі.
Прилітає запит: користувачам потрібен експорт даних. Я-з-минулого — чесно — витратив би на це два тижні. Повноцінна система експорту. Кастомні формати. Черга для фонової обробки. Прогрес-бари. Логіка ретраїв. Цілий собор. І ще б пишався результатом.
Сеньйорка з команди натомість поставила одне питання: «А в якому форматі їм реально треба?»
Відповідь — Excel. Усе. Люди просто хотіли відкрити дані в Excel.
Вона додала кнопку «Завантажити CSV». Дві години. Той самий результат — і, мабуть, навіть кращий, бо підтримувати не було чого. Мій прекрасний двотижневий план тихо поїхав у кошик, а я сидів і почувався трохи по-дурному.
У цьому вся суть. Той самий результат, у десять разів простіше, і різниця була не у швидкості друку. Різниця — в одному питанні, поставленому в потрібний момент.
І так щоразу
Варто побачити цей патерн — і помічаєш його всюди.
- Джун тиждень пише власну систему моніторингу. Сеньйор питає: «Ти перевірив, може, Azure Monitor це вже вміє?» — і так, вміє, з коробки.
- Джун повідомляє: «Білд впав». Сеньйор повідомляє: «Білд впав через X, ось фікс, а ось як зробити, щоб це не повторювалося».
- Джун хоче додати ще один сервіс. Сеньйор хоче спершу зрозуміти, чому гальмує попередній, а не ховати проблему за другим.
Ті самі помилки, ті самі тікети — абсолютно різна реакція. Ти стаєш сеньйором тієї миті, коли перестаєш закривати тікети і починаєш лагодити системи, які ці тікети плодять.
Як цей зсув реально відбувається
Жодного клацання тумблера не буде. Але якщо стиснути до речей, які можна почати практикувати хоч завтра:
- Питай «навіщо» перед «як». Перш ніж проєктувати рішення, переконайся, що зрозумів проблему. У половині випадків те, про що просять, — не те, що людям насправді потрібно.
- Обирай просте, а не розумне. Розумний код — це той код, який ти дебажитимеш напівсонний у неділю. Лагодити його майже завжди доведеться тобі ж за півроку, без жодного спогаду, навіщо ти так написав. Пиши для цієї людини.
- Перевіряй, що вже є. Твій клауд-провайдер, твій фреймворк, стандартна бібліотека — найпевніше, це вже хтось розв'язав. Найкращий код — той, який ти не написав.
- Оптимізуй під команду, а не під «гарно виглядати на рев'ю». Витончений однорядковик не запам'ятає ніхто. А ось падіння прода через нього — усі.
То хто ж ти?
Усе це — не про рядки в резюме. Це про те, яке питання вилітає в тебе першим, коли на стіл падає задача: «як» чи «навіщо».
Я досі ловлю себе на тому, що тягнуся до «двотижневої» версії. Різниця в тому, що тепер я чую в голові те саме питання сеньйора ще до того, як відкрию редактор: а що їм реально треба? І відповідь зазвичай менша, простіша і вже лежить у стандартній бібліотеці.
Якщо ти на початку шляху — тобі не потрібні ще десять років. Тобі треба почати ставити друге питання вже сьогодні. А якщо ти в професії давно, але все ще ставиш лише перше, — ось чесний розрив, який варто закрити.
Яке питання ти ставиш першим?