Станьте спритним
Я б запропонував таке:
Редагування тих же файлів
Спочатку скористайтеся Git (або подібною одночасною системою версій). Поки ви редагуєте різні частини одних і тих же файлів, у вас не виникають конфлікти. Якщо у вас виникнуть конфлікти, вони будуть чітко позначені як такі.
Намагатися керувати проектом для багатьох розробників без Git - це ніби намагатися зробити пудинг без чаші для пудингу. Це можливо, але це стане досить безладним досить швидко.
Як було зазначено в коментарях, Git не є панацеєю, але в поєднанні з автоматизованим тестуванням це, безумовно, дуже допомагає.
Перерахуйте всі функції
По-друге, розбийте проект на видимі для користувача функції. Наприклад, "коли користувач підписується, він повинен отримати електронний лист" або "Користувач може додати елемент". Залучайте сюди всіх зацікавлених сторін. Введіть усіх у кімнату, і всі викрикуйте їхні риси.
Це повинні бути видимі користувачеві функції, про стратегію впровадження можна поговорити пізніше.
Запишіть усі пропозиції на індексні картки, навіть німі. Швидко раціоналізуйте список, щоб видалити дублікати, і розкладіть всі картки на великому столі або навіть підлозі.
Додайте будь-які додаткові картки, які потрібні. Скажіть, що ваша програма надсилатиме SMS-повідомлення. Ви можете не знати, як це зробити, тому у вас є питання. Напишіть «Досліджуйте SMS-портали» на картці. Так само і для будь-яких інших великих невідомих. Їх вам доведеться розпакувати пізніше. Ці функції, ймовірно, не перейдуть у ваш перший спринт.
Тепер сортуйте ваші картки по групах, перетасуйте їх, відчуйте їх. Це ваш проект.
Планування покеру
Займіться плануванням покеру. Ще разом з усіма разом дайте всім розробникам картки, на яких написано "1 бал", "2 бали" тощо, до "4 балів". Також картка "більше". Точка приблизно еквівалентна годині.
Перегляньте список функцій по одному. Під час читання функції кожен повинен грати в карту. Якщо одна людина грає 1, а інша грає 4, там є проблема спілкування. Одна людина розуміє особливість, що означає щось відмінне від іншої людини. Проведіть дискусію та опрацюйте, що насправді малося на увазі, та відзначте це на картці.
Якщо ви погоджуєтесь, що функція "більше", ця функція занадто велика. Ви повинні зламати цю функцію. Робіть це так само, як і раніше.
Як ви домовились, запишіть цифри на картках різною кольоровою ручкою.
Бали кращі за години
Використання окулярів замість годин віднімає мачо "Подивіться, як швидко я можу кодувати", чим ми часто займаємось розробники. Це тонка різниця, але я виявив, що це працює досить добре.
Тепер складіть спринт
Спринт - це швидкий вибух до мети. Визначтеся із довжиною спринту, можливо, 5 або 10 днів. Помножте кількість днів на кількість розробників на кількість балів на день.
Припустимо, що спочатку 6 балів на день на розробника. Це досяжна кількість. Якщо у вас 5 осіб, це 5 * 5 * 6 = 150 балів. Спільно з усіма розробниками та керівництвом виберіть функції зі списку, до 150 балів. Це ваш спринт.
Ніколи не спокушайтеся стискати більше, ніж підходить. Занадто багатообіцяючий завдає шкоди всім у довгостроковій перспективі, включаючи вас.
Тут вам потрібно буде врахувати залежності. Наприклад, налаштування навколишнього середовища, очевидно, має бути включено в перший спринт. Це насправді порівняно легко зробити, коли всі присутні. У вас 6 мізків у приміщенні, всі говорять "це залежить від цього" і т. Д. Потім можна перемішувати карти навколо, щоб продемонструвати залежності.
Після того, як у вас є спринт, до нього нічого не можна додати, він заблокований на 5 днів. Повзання функцій підкреслить команду, пошкодить моральний стан і сповільнить усіх. Врешті-решт повзання зупинить проект. Як керівник команди, ви повинні захистити свою команду від повзучості. Якщо надходить новий запит на функцію, його потрібно додати до наступного спринту. ЯКЩО наступний спринт вже заповнений, щось інше треба вивезти.
Ніколи не піддавайся спокусі забивати зайві. Занадто багатообіцяюча ситуація дає вам щасливий клієнт близько 1 дня, а потім 4 дні напруженості в команді, і, врешті-решт, декілька нещасних клієнтів, коли команда не може доставити вчасно.
Тепер переходьте до цього.
Роздайте картки, запитайте, хто хоче чим займатися. Ви маєте повну видимість того, що робиться, і ви можете порахувати бали, що позначаються до нуля. Майте штаб-квартиру на початку кожного дня, щоб усі знали, хто над чим працює, і що було зроблено.
5 або 6 пристойних мотивованих розробників, які працюють разом, як підрозділ над чітко визначеними керованими цілями, можуть досягти неабиякої кучерявої кількості речей за 5-денний спринт.
Підтримуйте видимість
Переконайтесь, що кожен може бачити, який статус проекту. Bluetack всі карти до стіни. Зліва - картки, над якими ще не працює. Праворуч зроблені картки.
Коли розробник працює над карткою, вони знімають її зі стіни і ставлять на свій стіл. Це підтримує видимість і не дає людям занадто сильно наступати на пальці.
Існують технологічні альтернативи індексованим карткам, але нічого не обійдеш, коли на стіні є масивний паперовий дисплей статусу проекту.
По можливості, будьте всі в одній кімнаті протягом тривалості проекту. Запропонуйте зацікавленим сторонам якомога більше, в ідеалі кожен день.
Випалювати
Ви можете графік балів, які просуваються до нуля, на діаграмі перезарядки. Якщо ваша лінія найкращого пристосування перетинає нуль, перш ніж вдатися до обмеження часу, ви, швидше за все, на шляху. Якщо ні, то, можливо, вам доведеться повідомити свого клієнта зараз, перш ніж ви наблизитеся до граничного терміну.
Якщо ви збираєтеся невдачі, невдачі рано.
Можна зробити спалювання за допомогою програмного забезпечення, але я віддаю перевагу просто великий папір на стіні. Намалюйте та напишіть по всьому.
Автоматизоване тестування
Коли у вас є декілька розробників, які працюють над одними і тими самими матеріалами одночасно, вони, ймовірно, час від часу будуть порушувати код один одного. Комунікація та наочність допомагають у цьому, але ви, мабуть, захочете впровадити певну технологію, яка допоможе знайти проблеми.
Тестування одиниць - це процес написання тестів для кожної окремої частини кодової бази (в ідеалі кожного методу). Ваші одиничні тести слід виконувати часто, з можливістю кожного збереження. Існує багато інструментів, які можуть допомогти у цьому, наприклад, Karma або Rspec.
Тестування в кінці до кінця включає тестування вашого проекту в цілому, трактування внутрішніх справ як чорного поля. Базуйте ці тести на своїх бізнес-вимогах високого рівня, наприклад: "Користувач може зареєструватися" або "Користувач може переглянути список елементів". Транспортер є хорошим прикладом тестування рамок до кінця.
Існують цілі книги, написані на тестуванні, але наявність принаймні декількох тестів на прийняття може допомогти вам не порушити нічого, коли ви працюєте над своїм проектом.
Уникнення технічної заборгованості та завершення роботи
Технічна заборгованість - це концепція, яка описує речі, які доведеться прибрати пізніше. Поширеним джерелом боргу є риси, які були позначені як зроблені, але які ніколи не були "зроблені-зроблені". Зроблена функція зареєстрована в Git, затверджена зацікавленою стороною та має тест.
Не перевіряйте свої функції, поки вони не будуть готові. Ніколи не масажуйте графік. Знову ж таки, це шкодить усім у довгостроковій перспективі, включаючи вас.
Це одна з причин, чому ми спочатку за день розробляємо лише 6 балів на розробника. Готово вимагає додаткової роботи, але чудово почуває себе та дає команду поштовх.