За разлика от производството, светът на софтуерното инженерство далеч не е съвършен

Мнозинството от мениджърите (и някои служители) мечтаят да имат добре установена софтуерна фабрика.

Дълъг (виртуален) конвейер, където идват нуждите на клиента, тези изисквания се разглобяват, анализират.

Екипите от инженери забиват, набиват и щракват битове на места и в края на конвейера имате напълно функционален, перфектен продукт.

Няма ли да е хубаво?

И въпросът кой вид се крие зад това желание е, къде е перфектната методология, която ще ни позволи да постигнем това ниво на прецизност на производството.

Очевидният отговор – няма такава методология и никога няма да има. Месечен цикъл.

Отговорът е супер прост. По-сложното е Защо?. Мисля, че има два или три основни проблема, които правят невъзможно да се измисли нещо толкова повторяемо.

Уникалността на всеки продукт

През по-голямата част от живота си работих върху продукти за сигурност. В резултат на това тонове и тонове неща ми звучат много познато, докато преминавам от една компания в друга – управление на потребителите, политики, събития, потребителски интерфейс за контрол на всичко това, внедряване и т.н. Всичко ми се струва познато, но винаги е различно.

Изборът на технологии е различен (езици, рамки, библиотеки). Начинът, по който са събрани е различен. Крайните кутии са различни. Характеристиките са различни. И така нататък.

За да направим сравнение с физическата работа: можете ли да си представите, ако ръчно сглобявате кола всеки път от много различен набор от части за кола, докато дизайнът на колата се измисля в движение?

Докато работите върху тази кола, някои части се сменят от други членове на екипа. И всички прилагат тиксо и WD-40 много щедро, само за да се уверят, че тече и няма да се разпадне.

Току-що описах антитеза на производствения процес (където всички части са строго контролирани и дизайнът не се променя в движение).

Инженерите не са взаимозаменяеми

И така, първото нещо, от което се нуждае един производствен процес, са повтарящи се автомобилни части. Друго нещо, от което има нужда, са повтарящи се хора.

Можете да имате фабрика, ако можете лесно да замените работник с друг работник (може би с минимално обучение на работното място).

Но ако всички ваши работници имат невероятно различен набор от умения и много различна производителност, управлението на фабрика би било адски трудно.

И това, което описах, е точно как е за софтуерните инженери. Един човек е гуру на backend и супер опитен в .NET, а друг е прекарал целия си живот в бърникане с вграден софтуер и мечти в асемблиране, а третият едва може да напише Hello World. В резултат на това е невъзможно произволно да смените това, което правят, и да очаквате предвидими резултати.

BTW. Това, което казвам, е приложимо и за QA. Един човек е невероятен, когато мисли за всички крайни случаи. Друг страхотен с автоматизация, а третият едва може да изпълнява тестове, записани от някой друг. Същото нещо, те не са лесно взаимозаменяеми.

Отговорност за една операция

Производството изисква значително по-дълбока специализация и разделение на труда. Може буквално да имате човек, отговорен за някакъв тривиален вид задача.

И отново, в софтуера имаме почти обратното. Първо, няма ясно разделение на всички задачи, които трябва да бъдат изпълнени. Някои от задачите не се разделят лесно на по-прости. И хората притежават голямо разнообразие от задачи, за да изпълнят голяма част от производствения процес.

Светът е несъвършен

И последното нещо. Когато преминете към по-висок клас на производство (например процесори или космически телескопи), ще откриете, че те се произвеждат в условия, възможно най-близки до идеалните. Например, чистата стая, където се произвеждат процесорите, има 1000 по-малко частици във въздуха, отколкото една стерилна болнична операционна зала.

Какво ще кажете за софтуерното инженерство? Хм... Не предлагам да поставим инженери в чиста стая (или вакуумни камери). Казвам, че инженерите (най-критичният инструмент в процеса на производство на софтуер) работят в невероятно (и по своята същност) объркана среда.

BTW. Не говоря за физическата среда. Все пак бих искал да кажа няколко думи с човек, на когото е хрумнала идеята за отворени офиси. Говоря по-скоро за обърканата среда на отношенията между хората, променящи се посоки, политика, шум и т.н.

Резюме

Мисля, че голяма част от блога ми засяга точно тази тема: Как да работим по добър начин в един несъвършен свят?

Не пиша за нещо бляскаво, провокативно или вирусно. Това е по-скоро нещо като хляб и масло.

Много статии могат да бъдат обобщени като Ето как хората смятаха, че ще работи в един перфектен свят. Ето как всъщност работи в един несъвършен свят. И ето как да го направите малко по-разумно.

А ето няколко статии точно за такива неща. Как един несъвършен свят се различава от мечтите на хората от кулите от слонова кост?

  • „Тъмната страна на многофункционален екип.“
  • „Оценките винаги се провалят (#NoEstimates)“
  • „Има ли самоорганизиращи се екипи?“
  • „Разделяне на зърното от плявата на TDD.“
  • „Управлението на софтуерното инженерство е много повече изкуство, отколкото искаме да признаем“