Було багато запитань з хорошими відповідями щодо ролі архітектора програмного забезпечення (SA) для StackOverflow та програмістів SE . Я намагаюся задати трохи більш зосереджене питання, ніж ті. Саме визначення SA є широким, тому для цього питання давайте визначимо SA таким чином:
Архітектор програмного забезпечення керує загальним дизайном проекту, бере участь у роботі з кодуваннями, проводить огляд коду та вибирає технології, які будуть використовуватися.
Іншими словами, я не говорю про управлінський відпочинок та жилет на гребеневих (далі подані рифмовані слова) види СА. Якби я переслідував будь-який тип позиції SA, я не хочу відходити від кодування. Я можу пожертвувати деяким часом для взаємодії з клієнтами та бізнес-аналітиками тощо, але я все ще технічно задіяний і не просто усвідомлюю, що відбувається через зустрічі.
Маючи на увазі ці моменти, що повинен додати до столу СА? Чи повинні вони входити з менталітетом "встановлення закону" (так би мовити) та примусового використання певних інструментів, щоб відповідати "їхньому шляху", тобто вказівки щодо кодування, управління джерелами, зразки, документація UML тощо? Або вони повинні вказати початковий напрямок і стратегію, після чого відкласти назад і стрибати в міру необхідності для виправлення напрямку корабля?
Залежно від організації це може не працювати. SA, який покладається на TFS, щоб застосувати все, може боротися за реалізацію свого плану у роботодавця, який використовує лише StarTeam. Аналогічно, SA повинен бути гнучким залежно від стадії проекту. Якщо це новий проект, вони мають більше вибору, тоді як для існуючих проектів їх може бути менше.
Ось кілька оповідань про SA, які я пережив як спосіб обміну деяким досвідом, сподіваючись, що відповіді на мої запитання також можуть пролити трохи світла на ці питання:
Я працював з SA, який перевіряв буквально кожен рядок коду команди. SA зробить це не тільки для нашого проекту, але й для інших проектів в організації (уявіть час, витрачений на це). Спочатку було корисно виконувати певні стандарти, але згодом це стало калікою. FxCop полягав у тому, як SA знайде проблеми. Не зрозумійте мене неправильно, це був хороший спосіб навчити молодших розробників і змусити їх думати про наслідки обраного ними підходу, але для старших розробників він вважався дещо драконічним.
Один конкретний SA був проти використання певної бібліотеки, стверджуючи, що це повільно. Це змусило нас написати тонни коду, щоб досягти речей інакше, тоді як інша бібліотека заощадила б нам багато часу. Швидко вперед до останнього місяця проекту, і клієнти скаржилися на результативність. Єдиним рішенням було змінити певну функціональність для використання спочатку ігнорованого підходу, незважаючи на ранні попередження розробників. До цього моменту багато коду було викинуто і не використовувалось повторно, що призвело до понаднормових робіт та стресу. На жаль, оцінки, використані для проекту, базувалися на старому підході, який мій проект забороняв використовувати, тому він не був відповідним показником для оцінки. Я почув би прем'єр-міністра сказати: "Ми це робили раніше"
SA, який буде застосовувати використання DTO, DO, BO, Сервісних шарів тощо для всіх проектів. Новим розробникам довелося вивчити цю архітектуру та SA, які неминуче застосовували вказівки щодо використання. Винятки з правил використання були зроблені, коли дотримуватися цих принципів було абсолютно важко. SA був обґрунтований у їх підході. Класи для DTO та всіх CRUD-операцій створювались за допомогою CodeSmith, а схеми баз даних - ще одна схожа кулька воску. Однак, використовуючи цю установку скрізь, SA не був відкритий для нових технологій, таких як LINQ до SQL або Entity Framework.
Я не використовую цю посаду як платформу для вентиляції. У моєму досвіді з вищезгаданими розповідями про SA були і позитивні, і негативні моменти. Мої запитання зводяться до:
- Що повинен піднести до столу SA?
- Як вони можуть досягти рівноваги у прийнятті рішень?
- Чи варто підходити до роботи в галузі SA (як було визначено раніше) з урахуванням того, що вони повинні виконувати певні основні правила?
- Ще що слід врахувати?
Спасибі! Я впевнений, що ці робочі завдання легко поширюються на людей, які є старшими розробниками або технічними керівниками, тому сміливо відповідайте і на цій посаді.