Як зберегти послідовність у всій архітектурі додатків під час зростання команди?


48

Як єдиний розробник у стартапі, я мав розкіш можливість приймати багато рішень в архітектурі та структурах нашого додатку.

Швидкий перемотка вперед 4 роки, а згодом придбання, я маю команду в 5 і багато разів відчуває, що дикий захід. Люди, які приймають будь-яке дизайнерське рішення, їм подобаються: цілі числа та перерахунки для типів БД в одному місці та рядки в інше, ця рамка для проблеми, а потім інша рамка для тієї ж проблеми в іншому місці тощо.

Як я можу дотримуватися послідовності? Для мене це важливо, але, здається, члени моєї команди підписалися на методологію "якщо це працює, то працює".

Я думаю, велика частина мого питання полягає в тому, чи нереально я очікувати таких стандартів? Я борюся з ідеєю зустрітись як диктатор, який заважає творчості, але робити все, що вони хочуть, здається, не є масштабним.


8
Чи можете ви розповісти нам скільки завгодно про існуючий процес SDLC? Ви водоспад, Agile тощо? Чи використовуєте ви TFS або управління завданнями? Ви проводите огляд коду чи використовуєте FxCop або інші форми перевірки коду? Ви виготовляєте проектну документацію? Чи є у вас призначена роль архітектора?
Джон Ву


1
@gnat: Не чудовий дублікат, якщо відповіді є будь-якими ознаками.
Роберт Харві

2
Якщо чесно, ці стандарти повинні були бути встановлені дуже рано і ґрунтуватися на деякому загальноприйнятому документі "найкращих практик", щоб ніхто не міг скаржитися на фаворитизм чи елітаризм. Якщо ви отримуєте важкий відсіч від окремої людини, вам доведеться розглянути питання про те, чи варто одному ковбою здорового середовища для решти команди та замінити його, вони все одно залишатимуться раніше, як завжди. Тоді я думаю, що всі поради, наведені нижче, використовувати суворий перегляд коду перед реєстрацією та додати компонент архітектури, будуть творити чудеса.
Патрік Хьюз

1
Це святий грааль інженерії програмного забезпечення (окрім іншого святого грааля, що є точною вимогою).
pmf

Відповіді:


55

Що робить тебе таким особливим?

Мій процесор каже, що це працює, і я хочу йти додому. Чому ти мене турбуєш?

Ви можете боротися з таким ставленням, змушуючи всіх надсилати запити на тягнення. Але зараз терміни наступають. Поганий код тисне на ворота вашого незайманого замку, і ви нарешті піддаєтеся тиску. Або ви виграєте лише для того, щоб знайти всіх, хто залишає, і ніхто не використовує ваш незайманий замок.

Існує безліч інструментів, які допомагають у цьому питанні. Контроль над джерелами, огляди коду, стандарти кодування тощо, але серце та душа проблеми - це ваші суб'єктивні думки щодо того, що найкраще повинно розглядатися як відповідне. Для цього ви повинні заробляти і підтримувати їх повагу. Зробити це, і це набагато простіше. Якщо цього не зробити, жоден інструмент чи практика не врятують вас.

Найкращий спосіб зробити це - спілкуватися рано. Не кажіть мені, що "ми не використовуємо рядки для наших типів БД в цьому магазині" через 6 місяців після того, як я вирішив цю ідею. Сказання мені, що воно було поховано в документації протягом 2 років, не є виправданням для того, щоб дозволити мені це робити.

З будь-якої причини у вас є речі, які вас цікавлять. Якщо ви дбаєте про них та маєте сенс, чітко повідомте про ці речі до, під час та одразу після кодування кожного модуля.

Переслідування коду - чудова практика. Вкладайте кошти в будь-які необхідні інструменти та практики, щоб ви могли переглянути код протягом декількох хвилин після його написання. Програма пари та інструмент - це просто крісло для гостей.

Чому? Кожна секунда, яка проходить після того, як я напишу код, експоненціально збільшує витрати на його зміну. Це тому, що моя пам'ять коду має період напіввиведення. Я починаю його забувати в той момент, коли міхур вимагає перерви.

Зменшіть речі, які вас цікавлять, до їх основних принципів. Замість того, щоб ударити мене зі списком із 101 правила, якого слід дотримуватися, дайте мені 10 принципів, які вони порушують, щоб я міг зрозуміти, яким правилом 102 повинен бути сам.

Надайте мені можливість нав’язати своє бачення, допомагаючи мені бачити своє, і ми будемо чудово ладити.

мені нереально очікувати таких стандартів? Я борюся з ідеєю зустрітись як диктатор, який заважає творчості, але робити все, що вони хочуть, здається, не є масштабним.

Тоді не диктуйте! Зробіть це позитивним досвідом. Це не якась новітня хіпі дурниця. Це основна психологія. Ви намагаєтесь змінити поведінку людини. Випадковість і позитив є найбільш підкріплюючим (просто запитайте Лас-Вегас). Якщо ви ставитесь негативно, ви повинні відповідати своєму підкріпленню. Це непомітний біль. Будьте позитивні, коли ви поширюєте мудрість і можете бути випадковими в цьому.

Я знаю, звідки ти родом, бо я там був. Ви мали контроль і тепер його вже немає. Ти хочеш його повернути. Ну переборюй. Тепер у вас є команда. Їх не потрібно контролювати. Що їм потрібно - це лідерство. Те, що вам потрібно, - це не контроль. Це вплив. Це працює краще і набагато менше роботи. Освоїти це і відпочити. Це має бути весело.

Зробіть це правильно, і ви зможете поїхати у відпустку, і це все одно спрацює. Як? Не просто бути лідером, але і тим, щоб інші були також лідерами. Після того, як ви вселили своє бачення в команду, вони можуть працювати, поки ви не підете, просто наслідуючи те, що ви робите. Навчайте новачків та заохочуйте їх також активізувати та впливати на інших.

Я знаю, що це важко. Ми не займалися цією професією, тому що нам добре поводитися з людьми. Ми найкраще спілкуємося з кодом. Це добре. Просто робіть це швидко і часто. Покажіть мені, чому ваше краще. Слухай, якщо я скажу, що це не так. Зробіть це, поки я ще думаю про це. Я люблю кодувати. На планеті мало людей, з якими я можу з цим поговорити. Будь одним із них.


4
Досить очевидно, що ви маєте на увазі під "заслінкою коду" ... Але Google не дає мені нічого, крім закону про злочинність з усього світу.
Джеремі

3
додати до списку "стандарти кодування"
BЈович

5
Оскільки я, здається, вводить цей термін, я дам етимологію "переслідування коду". Я перевірив якийсь код, який використовував абстрактний завод, щоб отримати його часові позначки. Програма розробника намагалася об'єднатись (зареєструвати код) і прокручувала зміни коду з моменту її виїзду. Вона помітила мою фабрику і подумала, що це цікаво. Вона не була впевнена, чому я це роблю. Тож вона підійшла і запитала мене. Коли я розгублено виглядала, вона сказала: "О, я просто переслідував вас код". Facebook змінює наш словниковий запас.
candied_orange

1
Правда! " Наділіть мене нав'язувати своє бачення, допомагаючи мені бачити своє, і ми будемо чудово ладити ". Мені подобається, коли поезія, код і філософія змішуються!
Педро Лобіто

@candied_orange: Я трохи збентежений цілою річчю "кодування". Ви її просто карали? У контексті вашої відповіді, схоже, вона б зависла вам код.
Роберт Харві

23

По-перше, змусьте людей підтримувати речі, про які вони не писали. Розробнику дуже легко ввійти в звички використовувати рамки та методи, до яких вони звикли. Перемикатися між рамками та методологіями потрібно. Якщо хтось змушений переїжджати за межі власного кутового коду і відчувати це часто, це підкаже деякі скарги та, сподіваємось, певну продуктивну дискусію, яка може призвести до того, що люди хочуть щось стандартизувати.

Далі, витягніть запити та огляди коду. Ніколи не дозволяйте спочатку об'єднувати код у ваші основні гілки без попереднього перегляду коду. Будь-хто може це зробити. Знову ж таки, коли хтось бачить щось інше, ніж те, що вони зробили, це може спонукати до дискусії та роботи в команді, щоб прийти до кращого рішення. Це також робить кожного доглядачем за кодовою базою, яка (сподіваємось) змушує людей піклуватися про неї та стан коду, що надходить у неї.

Нарешті, проведіть дизайнерські дискусії. Вони можуть бути формальними чи неофіційними, але мати їх. Нехай ті, хто хоче брати участь, роблять це. Обговоріть, які рамки ви хочете використовувати, плюси і мінуси перерахунків проти інт. І т.д. Тоді вам є на що вказати, коли виникають проблеми. Крім того, не бійтеся переглянути рішення про стандарти. Технологія змінюється (швидко) і тому може ваші потреби як в команді, так і в компанії.

Допоможіть людям побачити те, що ви бачите, і відчуйте, що вони мають частку в якості коду. Потім обережно проводите дискусії щодо пошуку стандарту, коли виникають розбіжності в думках.


Приємно в цьому методі, що менеджер не просто нав'язує свої уподобання, він дає команді шанс прийняти рішення і надає їм повноваження виконувати це.
Робін Беннетт

6

Проводьте перевірку коду кожного разу, коли хтось захоче об'єднати код у основну гілку / магістраль та дотримувати людей до цих стандартів під час перегляду коду.

І я не маю на увазі, що лише ви повинні виконувати огляди коду. Кожен повинен переглянути код інших. Це поширює знання про систему по всій команді, але також створює ситуацію, коли Керрол переглядає код Боба і каже: "Я бачу, ви там використовували ціле число. Я завжди використовую перерахунок". Вони виявляють розбіжності, які ви бачили, і, вважаючи, що вони піклуються, зрозуміють, що всі повинні потрапити на одну і ту ж сторінку.

З'являться прийняті, узгоджені стандарти, коли ви документуєте їх і переконайтеся, що люди дотримуються їх. Це може включати такі речі, як "перерахунки в БД для ..." тощо. Ви також можете включити документування, які рамки використовувати тощо.


Я думаю, велика частина мого питання - це нереально від мене очікувати таких стандартів. Я борюся з ідеєю зустріти диктатора, який стримує творчість, але робити все, що вони хочуть, здається не масштабним
Deekor

3
@Matthew, хоча я, як правило, згоден з вами, я б робив це у зворотному порядку. Спочатку огляди дизайну, а вказівки виходять із / під час оглядів дизайну. Якщо ви покладете тягар написання всього вперед на архітектора / ведучого, це перекладає тягар на інтервента .
Нік Алексєєв

@Deekor: Ви повинні вибрати свої битви. З’ясуйте, що вам потрібно опустити на ногу, і документуйте це. Вам не доведеться все
Роберт Харві

2
@Deekor, ви можете застосовувати стандарти та звичні практики кодування без "задушливої ​​творчості". Це все одно хибний аргумент. Поширені стандарти кодування призводять до простого обслуговування. Безкоштовне кодування призводить до кошмарів.
Матвій

1
@ Нік Алексєєв, я згоден; буде редагувати.
Матвій

1

Там, де це можливо, ви можете написати інструменти / сценарії для автоматичного аналізу своїх проектів та визначити, які стандарти, інструменти та підходи використовує проект. Це можна зробити, запустивши користувальницький інструмент як частину збірки CI.

Запропонуйте висновок із інструментів, записаних у документі "показник показників", наприклад, на листі google з рядком на одиницю (наприклад, за "заявкою", проектом або api чи будь-яким іншим), зі стовпцями для різних показників / стандартів. Це дасть людям наочність щодо того, які існують стандарти, наскільки добре вони прийняті тощо і забезпечить певний порядок хаосу.

Ви також можете оновлювати стовпці вручну, але вдало їх оновлювати: D


0

На додаток до наданих відповідей, я кажу, що ви повинні навчити свою команду того, чого ви очікуєте від них як професіоналів з розробки програмного забезпечення, починаючи з моменту, коли вони проводять співбесіду, щоб приєднатися до компанії.

1 - Створіть і дотримуйтесь конвенцій бази даних

Це один з найбільш основних, але вигідних заходів, які ви можете вжити для покращення якості коду. В результаті дотримання конвенцій вихідний код буде однаковим у всій кодовій базі, зменшуючи пізнавальні зусилля для пошуку та читання файлів коду.

2 - Впровадити чіткі архітектури програмного забезпечення

Кодова база програмного проекту, яка не відповідає чіткому архітектурному стилю, як би там не було, поступово погіршується, оскільки до нього додається новий, неструктурований код, стає складніше змінювати. Звідси важливість введення годин на розробку та збереження адекватної архітектури програмного забезпечення.

3 - Краще менше: мови, рамки та інструменти

З кожною додатковою мовою, рамкою та інструментом, який ви впроваджуєте у свою систему, виникає додаткова вартість розробки та експлуатації. Ви завжди повинні оцінювати довгострокові витрати на технологічне рішення, перш ніж приймати його для вирішення короткострокової проблеми. Уникайте зайвих технологій і використовуйте більшу частину поточного пакету.

4 - Залучайте свою команду до системних рішень

Найефективніший спосіб побудови спільного середовища знань - залучення команди до всіх системних рішень системи. Переваг багато:

  • Люди відчувають себе цінністю та частиною команди
  • Важливі рішення оскаржуються всією командою перед прийняттям
  • Сильні та слабкі сторони дизайну системи чіткіше розуміють усі
  • Створює відчуття колективної відповідальності та довіри

5 - Правило All-in

Я вважаю, що зусилля, спрямовані на відновлення проектування системи, повинні доводитися до завершення (все-в-ін), а не частково завершуватися. Існує великий ризик розмити ваш дизайн системи, якщо розробники сміливо застосовувати різні стилі кодування та архітектурні шаблони на місцях, коли вони вважають за потрібне.

До цього моменту, якщо ви успішно реалізували попередні пропозиції, ваша команда, скоріш за все, оцінить цю поведінку шахраїв як непрофесійну та безвідповідальну.


Нещодавно я писав щоденник у цій темі, детальну інформацію про ці теми ви можете знайти там: https://thomasvilhena.com/2019/11/system-design-coherence

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.