Този пост е вдъхновен от Joes Spolsky и неговата презентация "Industry Overview" по време на конференцията "Out for Undergraduate Technology Conference", както и от Кирил Марков, който ми сподели презентацията.

Когато избираме в коя софтуерна фирма (част 1) да започнем работа, е много важно да я проучим добре. Типът компания, дейността ѝ, размерът и историята ѝ са само част от нещата, които трябва да проучим предварителноСледващите няколко въпроса могат да насочат вниманието ви към някои от важните детайли за една софтуерна компания и така да направите по-добър избор.

За какво ще се ползва кодът ни?

Отговорът на този въпрос до голяма степен може да предопредели бъдещето ни в дадена фирма. Ето и някои от възможностите:

  1. Продукт. Кодът ни ще допринася за развитието на продукт на фирмата. Това е добро начало. Има добър шанс нашият код да изкарва пари за фирмата и за нас. Мениджмънтът да ни обича. Да израстваме и да се развиваме заедно с фирмата. Ако пък компанията е стартираща (startup) и разработва свой продукт – още по-добре. Можем да станем основна част от нещо голямо.
  2. Продукт за вътрешно ползване. Не е най-доброто начало. Кодът ни струва скъпо на фирмата, защото не изкарва пари (или поне не пряко). Мениджмънтът вижда в нас един голям разход. Това не би било такъв проблем, ако мениджърите разбират от софтуер и неговата значимост. За съжаление, когато аз работех в такава компания и разработвах продукти за вътрешно ползване, те не разбираха.
  3. Единични (One-off) проекти и Outsourcing. Лошо начало. Докато има проекти и изкарваме пари, мениджмънтът ни обича. Но тази любов може бързо да приключи. Ниският марж на печалбата и стремежът за минимизиране на разходите определено не са в наша полза. Както един приятел казва: “Ние сме просто една евтина работна ръка”.

Имаме ли бъдеще в тази фирма?

Доста сериозен въпрос, който не е лошо да си задаваме не само когато си търсим нова работа.

  • В дългосрочен план какво може да ни даде тази фирма?
  • Какво ще стане ако работим там 5 години? А ако работим 10 години? Ще имаме ли някога дял от компанията, дори и минимален?
  • Имаме ли шанс да се развиваме, да израстваме професионално?

Една добра заплата като цяло не е лошо нещо. И така до пенсия…Но едва ли някой мечтае точно за това.

Мениджмънтът на компанията разбира ли от софтуер?

А от програмиране дали разбира? Аз напуснах една фирма, защото CEO-то не разбираше от програмиране и софтуер като цяло. Много е трудно да се работи така. В крайна сметка не може да ръководиш хора, когато не разбираш какво правят. За съжаление, това не е прецедент. Има доста такива фирми. От друга страна, ако мениджърът ни разбира от софтуер (и програмиране), бихме могли да научим много от него. Да си спестим много проблеми, главоболия и като цяло работата да върви по-гладко.

Каква е работната обстановка?

Като програмисти, ние по цял ден стоим на един стол, пред един компютър, в една стая. Важно е тези три прости компонента да са в наша полза. Затова е хубаво да изясним няколко въпроса преди да подпишем договор:

  • Ще имаме ли хубава, светла и тиха стая? На шум трудно се работи. На тъмно пък може да си развалим очите (още повече). А ако атмосферата в офиса не е приятна и комфортна, няма да работим пълноценно.
  • Компютърът ни дали ще е достатъчно бърз, за да не ни дразни? Може ли да ползваме 2 монитора и всякаква техника, която ни трябва?
  • Столът ни дали ще е удобен? Звучи малко смешно, но аз бях “потресен”, когато една приятелка ми разказа за своите премеждия с “гаден” стол на работното място. Все пак здравето ни е по-важно от всичко друго.

Отговорът на тези въпроси може да ви даде отговор и на въпроса “Какво е отношението на компанията към нейния най-ценен ресурс – хората?“. Аз не бих работил в компания, която не цени хората си.

Офисът на Google в Мексико
Офисът на Google в Мексико

Как се създава даден продукт?

Програмистите са всестранно развити “същества”, които могат да “изкодят” един продукт за нула време. Спор няма. Можем. Но тези продукти обикновено не струват. :) Ако искаме да сме професионалисти и да създаваме сериозен продукт, е важно и фирмата, в която ще работим, да е професионална. Затова е важно да разберем как се създава един продукт в съответната компания.

  • Прави ли се дизайн предварително?
  • Изготвя ли се спецификация?
  • Пише ли се документация, помощни и други материали?
  • Времето планира ли се?

Професионална софтуерна компания ли е?

Отново, ако искаме да сме професионалисти, е важно и фирмата, в която ще работим, да е професионална софтуерна компания. А някои неща са наистина задължителни за една такава компания. Като например:

  1. Практикуване на Continuous integration и съответните правила. Санитарният минимум е използването на source code репозитори и автоматизирани билдове.
  2. Използване на Project management система. Планирането и следенето на времето е хубаво да става чрез специализиран софтуер.
  3. Използване на Bug tracking система. Устни уговорки, хвърчащи листчета и тетрадки не се броят. :)
  4. Използване на Extreme ProgrammingAgile (Scrum, Kanban) или някаква друга модерна методология за разработка на софтуер. Няма нужда да откриваме топлата вода.
  5. И други добри практики…

За финал ще цитирам Joel Spolsky и неговите 3 основни правила при избор на софтуерна компания:

  1. Startups and small companies are great places to work.
  2. Stick to product companies.
  3. Never take a job with a dress code.

Не забравяйте да прегледате и цялата му презентация. Все пак, ако има някой, който разбира в дълбочина софтуерната индустрия, то това е основателят на stackoverflow – Joel Spolsky.