Този пост е вдъхновен от Joes Spolsky и неговата презентация "Industry Overview" по време на конференцията "Out for Undergraduate Technology Conference", както и от Кирил Марков, който ми сподели презентацията.
Когато избираме в коя софтуерна фирма (част 1) да започнем работа, е много важно да я проучим добре. Типът компания, дейността ѝ, размерът и историята ѝ са само част от нещата, които трябва да проучим предварително. Следващите няколко въпроса могат да насочат вниманието ви към някои от важните детайли за една софтуерна компания и така да направите по-добър избор.
За какво ще се ползва кодът ни?
Отговорът на този въпрос до голяма степен може да предопредели бъдещето ни в дадена фирма. Ето и някои от възможностите:
- Продукт. Кодът ни ще допринася за развитието на продукт на фирмата. Това е добро начало. Има добър шанс нашият код да изкарва пари за фирмата и за нас. Мениджмънтът да ни обича. Да израстваме и да се развиваме заедно с фирмата. Ако пък компанията е стартираща (startup) и разработва свой продукт – още по-добре. Можем да станем основна част от нещо голямо.
- Продукт за вътрешно ползване. Не е най-доброто начало. Кодът ни струва скъпо на фирмата, защото не изкарва пари (или поне не пряко). Мениджмънтът вижда в нас един голям разход. Това не би било такъв проблем, ако мениджърите разбират от софтуер и неговата значимост. За съжаление, когато аз работех в такава компания и разработвах продукти за вътрешно ползване, те не разбираха.
- Единични (One-off) проекти и Outsourcing. Лошо начало. Докато има проекти и изкарваме пари, мениджмънтът ни обича. Но тази любов може бързо да приключи. Ниският марж на печалбата и стремежът за минимизиране на разходите определено не са в наша полза. Както един приятел казва: “Ние сме просто една евтина работна ръка”.
Имаме ли бъдеще в тази фирма?
Доста сериозен въпрос, който не е лошо да си задаваме не само когато си търсим нова работа.
- В дългосрочен план какво може да ни даде тази фирма?
- Какво ще стане ако работим там 5 години? А ако работим 10 години? Ще имаме ли някога дял от компанията, дори и минимален?
- Имаме ли шанс да се развиваме, да израстваме професионално?
Една добра заплата като цяло не е лошо нещо. И така до пенсия…Но едва ли някой мечтае точно за това.
Мениджмънтът на компанията разбира ли от софтуер?
А от програмиране дали разбира? Аз напуснах една фирма, защото CEO-то не разбираше от програмиране и софтуер като цяло. Много е трудно да се работи така. В крайна сметка не може да ръководиш хора, когато не разбираш какво правят. За съжаление, това не е прецедент. Има доста такива фирми. От друга страна, ако мениджърът ни разбира от софтуер (и програмиране), бихме могли да научим много от него. Да си спестим много проблеми, главоболия и като цяло работата да върви по-гладко.
Каква е работната обстановка?
Като програмисти, ние по цял ден стоим на един стол, пред един компютър, в една стая. Важно е тези три прости компонента да са в наша полза. Затова е хубаво да изясним няколко въпроса преди да подпишем договор:
- Ще имаме ли хубава, светла и тиха стая? На шум трудно се работи. На тъмно пък може да си развалим очите (още повече). А ако атмосферата в офиса не е приятна и комфортна, няма да работим пълноценно.
- Компютърът ни дали ще е достатъчно бърз, за да не ни дразни? Може ли да ползваме 2 монитора и всякаква техника, която ни трябва?
- Столът ни дали ще е удобен? Звучи малко смешно, но аз бях “потресен”, когато една приятелка ми разказа за своите премеждия с “гаден” стол на работното място. Все пак здравето ни е по-важно от всичко друго.
Отговорът на тези въпроси може да ви даде отговор и на въпроса “Какво е отношението на компанията към нейния най-ценен ресурс – хората?“. Аз не бих работил в компания, която не цени хората си.

Как се създава даден продукт?
Програмистите са всестранно развити “същества”, които могат да “изкодят” един продукт за нула време. Спор няма. Можем. Но тези продукти обикновено не струват. :) Ако искаме да сме професионалисти и да създаваме сериозен продукт, е важно и фирмата, в която ще работим, да е професионална. Затова е важно да разберем как се създава един продукт в съответната компания.
- Прави ли се дизайн предварително?
- Изготвя ли се спецификация?
- Пише ли се документация, помощни и други материали?
- Времето планира ли се?
Професионална софтуерна компания ли е?
Отново, ако искаме да сме професионалисти, е важно и фирмата, в която ще работим, да е професионална софтуерна компания. А някои неща са наистина задължителни за една такава компания. Като например:
- Практикуване на Continuous integration и съответните правила. Санитарният минимум е използването на source code репозитори и автоматизирани билдове.
- Използване на Project management система. Планирането и следенето на времето е хубаво да става чрез специализиран софтуер.
- Използване на Bug tracking система. Устни уговорки, хвърчащи листчета и тетрадки не се броят. :)
- Използване на Extreme Programming, Agile (Scrum, Kanban) или някаква друга модерна методология за разработка на софтуер. Няма нужда да откриваме топлата вода.
- И други добри практики…
За финал ще цитирам Joel Spolsky и неговите 3 основни правила при избор на софтуерна компания:
- Startups and small companies are great places to work.
- Stick to product companies.
- Never take a job with a dress code.
Не забравяйте да прегледате и цялата му презентация. Все пак, ако има някой, който разбира в дълбочина софтуерната индустрия, то това е основателят на stackoverflow – Joel Spolsky.