Глава 18: Правки, правки, и еще раз правки: Танцы с бубном вокруг пикселей
Знаете, что общего между разработкой сайта и игрой в русскую рулетку? В обоих случаях ты никогда не знаешь, когда прогремит выстрел. Только в случае с сайтом «выстрелом» будет очередная просьба заказчика «немного подвинуть кнопочку влево». И так раз двадцать.
Помню, как однажды осенним вечером я сидел перед монитором, глаза уже слезились от усталости. На часах было далеко за полночь, а я всё ещё пытался закончить внесение правок в сайт для очередного клиента.
— Ещё чуть-чуть, — бормотал я себе под нос, — последняя правка, и можно спать.
В этот момент телефон разразился оповещением электронной почты. Я с опаской покосился на экран. Так и есть — новое письмо от клиента.
«Максим, извини за позднее сообщение, но нам СРОЧНО нужно изменить цвет кнопки! Синий сливается с фоном. Давай сделаем ее красной? И заодно можно сделать ее немного больше? И передвинуть на 15 пикселей влево? И добавить тень?»
Я застонал, ударившись лбом о клавиатуру. Некстати вспомнилось, что этот же клиент уже трижды менял цвет этой несчастной кнопки за последнюю неделю.
Но давайте по порядку. После всех моих приключений в мире криптовалют и открытия IT-компании я думал, что уже ничто не сможет меня удивить. Ха! Как же я ошибался.
Когда мы только начинали, я был полон энтузиазма. Моя команда состояла из трех человек: меня, программиста Димы и дизайнера Насти. Мы работали из маленького офиса, больше похожего на кладовку, но нас это не смущало. В глазах горел огонь, души переполняли мечты о великих проектах.
— Ребята, это наш первый серьезный клиент! — торжественно объявил я, возвращаясь с встречи с потенциальным заказчиком. — Алексей Петрович владеет сетью автомастерских, и ему нужен крутой сайт с онлайн-записью на техобслуживание!
— Круто! — Дима оторвался от монитора, на котором мерцал разноцветный код. — Техническое задание есть?
Я замялся.
— Ну, не совсем… Он сказал, чтобы мы сделали «современный сайт, как у Тесла, только лучше».
Настя подняла бровь:
— И всё? Никаких конкретных требований? Цветовая схема, стиль, референсы?
— Он показал мне сайт конкурента и сказал: «Вот, только чтобы не так убого», — я пожал плечами.
Дима с Настей переглянулись. Я уже тогда должен был заподозрить, что что-то не так, но энтузиазм застилал глаза.
— Он хотя бы бюджет назвал? — практично уточнила Настя.
— Да! — я просиял. — Тридцать тысяч рублей!
— За весь проект?! — Дима чуть не подавился кофе. — Ты шутишь? За такие деньги можно только шаблонный лендинг на WordPress сделать, и то без особых наворотов.
— Ну, — я неловко потер шею, — я сказал ему, что это маловато, а он ответил, что его племянник предлагал сделать за двадцать, но он хочет «профессиональную работу»…
Вот так начинались наши первые проекты. С размытыми требованиями, нереалистичными ожиданиями и смехотворными бюджетами. Но мы брались за них, потому что нужно было с чего-то начинать, набивать портфолио и зарабатывать репутацию.
Первое, с чем мы столкнулись — это нескончаемые правки. Правки сайта, правки проектов, постановка каких-то критериев и добавление всего и вся. Когда мы заключаем контракт, особенно если это мелкий контракт или проект на фрилансе, мы часто не задумываемся, насколько это будет интересно (считай: сложно). А если мы еще и новички в этом деле, готовые работать за кружку чая и сухарик, то точно не понимаем, во что ввязываемся.
— Максим, а можно на главной странице добавить бегущую строку с акциями? — звонит клиент в понедельник.
— Конечно, — отвечаю я, делаю пометку и передаю задачу Диме.
— А еще нужно, чтобы при наведении на кнопку играла музыка! — новый звонок во вторник.
— Хм, это необычно… — я пытаюсь подобрать слова. — Может быть, просто сделаем плавную анимацию?
— Нет-нет, именно музыка! У моего конкурента такого точно нет!
— Ладно, — вздыхаю я и снова передаю задачу Диме, который смотрит на меня, как на предателя.
— А давайте добавим видео-фон на всех страницах! — среда начинается с нового звонка.
— Алексей Петрович, — я пытаюсь говорить спокойно, — это сильно утяжелит сайт. Пользователям с медленным интернетом будет неудобно…
— Ничего, у всех нормальных людей хороший интернет! — отрезает клиент.
И так каждый день. К концу недели от первоначального дизайна не остается камня на камне, а сайт превращается в аляповатую мешанину из всех мыслимых и немыслимых элементов.
— Я больше не могу, — Настя чуть не плачет, глядя на очередной набросок, который мы делаем по требованию клиента. — Это просто издевательство над принципами дизайна!
— Держись, — я пытаюсь ее подбодрить. — Мы просто делаем то, за что нам платят.
— За что нам НЕ платят, — поправляет она. — Мы уже в два раза превысили объем работ, указанный в договоре.
И вот тут, друзья мои, позвольте открыть вам страшную тайну мира веб-разработки. В 90% случаев (да-да, я не преувеличиваю) происходит недооценка бюджета и сложности проекта. Почему? А потому что техническое задание, которое пишется для проекта, обычно такое же глубокое, как лужа после летнего дождика.
Представьте себе: клиент приходит и говорит: «Хочу сайт. Красивый. И чтобы кнопочки были.» А ты такой сидишь и думаешь: «Ага, кнопочки. А какие? Круглые? Квадратные? Может, в форме звездочек?» Но вслух, конечно, говоришь: «Конечно, сделаем самые лучшие кнопочки!»
А потом начинаешь пытаться формализовать требования, уточнить детали, и тут-то и начинается самое интересное:
— А вы можете примерно описать, каким вы видите дизайн сайта? — спрашиваю я у клиента на очередной встрече.
— Ну, современный, стильный, — он делает неопределенный жест рукой. — Чтобы сразу цеплял!
— Может быть, вы покажете примеры сайтов, которые вам нравятся? — я пытаюсь докопаться до конкретики.
— Да нет, ничего на ум не приходит, — клиент смотрит в потолок. — Вы же профессионалы, вот и сделайте профессионально!
И вот с такими размытыми ориентирами мы начинаем работу. Делаем первый вариант дизайна, показываем клиенту, и…
— Нет, не то, — качает головой клиент. — Я представлял это по-другому.
— А как именно? — я чувствую, как начинает дергаться глаз.
— Ну… более современно, — он снова делает тот же неопределенный жест. — И цвета другие.
— Какие цвета вы предпочитаете? — Настя достает цветовую палитру.
— Не знаю… Что-нибудь цепляющее!
И так мы можем ходить по кругу неделями, делая вариант за вариантом, пока клиент наконец не увидит что-то, что ему понравится. А потом, когда дизайн утвержден, и мы начинаем программировать, снова начинаются «маленькие изменения».
И вот, когда ты уже готов праздновать завершение проекта, клиент вдруг вспоминает, что ему нужна еще одна «маленькая фишечка». И еще одна. И еще… И вот ты уже не разработчик, а фокусник, пытающийся достать из шляпы не кролика, а целый зоопарк.
А еще есть такая забавная штука, как адаптивность. Знаете, когда сайт должен хорошо выглядеть и на огромном мониторе, и на крошечном экране смартфона? Вот тут-то и начинается настоящее веселье.
— Максим, почему на моем телефоне всё выглядит не так, как на компьютере? — новый звонок от клиента в пятницу вечером, когда мы уже собирались отпраздновать завершение проекта.
— Так и должно быть, Алексей Петрович, — терпеливо объясняю я. — Это адаптивный дизайн. На разных устройствах сайт выглядит по-разному, чтобы пользователям было удобно.
— Мне не нравится! Я хочу, чтобы на телефоне было точно так же, как на компьютере!
— Но это технически нецелесообразно… — я пытаюсь объяснить основы веб-дизайна.
— Меня не интересуют ваши технические нюансы! — голос клиента повышается. — Я плачу деньги, и хочу, чтобы было так, как я сказал!
Ты делаешь сайт, все красиво, кнопочки на месте. А потом открываешь его на телефоне, и… Упс! Кнопка «Купить» уехала куда-то в Нарнию, а форма заказа растянулась на три экрана.
И знаете что? Клиенту это не нравится. Он хочет, чтобы было «как на макете». А то, что на макете все было статично и идеально, а в реальности у каждого пользователя свой уникальный зоопарк из устройств — это уже твои проблемы, дорогой разработчик.
Но самое интересное начинается, когда клиент приходит с «гениальной идеей» и мизерным бюджетом. Вот представьте: приходит человек и говорит: «Хочу сайт как у Amazon, только лучше. И чтобы стоил 50 тысяч рублей.» И ты такой сидишь, улыбаешься (сквозь слезы) и думаешь: «А может, мне стоило пойти в продавцы мороженого?»
— Я хочу, чтобы на моем сайте можно было оплачивать услуги онлайн, бронировать время, оставлять отзывы, общаться с мастером, видеть историю своих визитов, и еще было бы здорово добавить 3D-модель автомобиля, где клиент может отметить проблемные зоны! — Алексей Петрович сыпал идеями как из рога изобилия.
— Это… амбициозно, — я осторожно подбирал слова. — Но на реализацию такого функционала потребуется гораздо больший бюджет.
— А сколько? — он насторожился.
— Ну, навскидку… — я быстро прикинул в уме, — от трехсот тысяч. И это минимум.
— Что?! — Алексей Петрович чуть не подавился кофе. — Да за такие деньги можно машину купить!
— Подержанную, — заметил я. — И она не будет работать 24/7, обслуживая сотни клиентов одновременно.
— Нет-нет, это слишком дорого, — он отмахнулся. — Давайте пока сделаем по минимуму, а потом посмотрим.
И когда мы наконец, преодолев все трудности, сдаем проект, начинается самое интересное — продвижение. И тут клиент сталкивается с новой реальностью: ты можешь сделать самый крутой сайт в мире, но если о нем никто не знает — это все равно что построить замок в пустыне.
— Максим, почему на мой сайт никто не заходит? — звонит Алексей Петрович через неделю после запуска.
— А вы рекламу запустили? SEO-оптимизацию сделали? — интересуюсь я.
— Нет, а это еще зачем? — искренне удивляется он. — Я думал, люди сами найдут, раз сайт хороший!
И вот тут-то мы сталкиваемся с еще одной забавной ситуацией. Клиент, который едва наскреб деньги на сайт, вдруг узнает, что на продвижение нужно в 5-10 раз больше. И начинается: «А почему так дорого? А нельзя ли подешевле? А давайте я сам посижу в интернете, почитаю про SEO?»
— Понимаете, Алексей Петрович, — я пытаюсь объяснить азы интернет-маркетинга, — создание сайта — это только начало. Чтобы люди на него приходили, нужно либо платить за рекламу, либо заниматься SEO-оптимизацией, либо продвигаться в социальных сетях… И все это стоит денег.
— Но у меня больше нет бюджета, — разводит руками клиент. — Я уже потратил на сайт все, что мог!
— Тогда вам придется заниматься продвижением самостоятельно, — я пожимаю плечами.
— Но я ничего в этом не понимаю! — возмущается он. — Я думал, вы всё сделаете!
И вот так клиент оказывается с красивым сайтом, на который никто не заходит. И в итоге он остается недоволен, а мы получаем репутацию компании, которая делает сайты, «не приносящие денег».
Но мы не сдаемся! О нет, мы же профессионалы. У нас есть наши секретные приемы. Например, «черные ходы» — готовые скрипты и системы, которые позволяют сделать 60-70% работы, не написав ни строчки кода. Хотя, честно говоря, сейчас уже 90-95% кода не пишется с нуля. Мы используем готовые «примерки» (или, как мы их называем, «пакеты упаковки»), которые разворачиваем под клиента и потом «допиливаем».
— Дим, ты не поверишь, что я нашел! — влетаю я в офис с горящими глазами. — Есть готовое решение для записи в автосервис, нам нужно только кастомизировать его под Алексея Петровича!
— И сколько это стоит? — практично уточняет Дима.
— Двадцать тысяч за лицензию, — я немного сдуваюсь. — Но зато мы сэкономим недели работы!
— А клиент готов доплатить за это? — Дима поднимает бровь.
— Э-э-э… — я замялся. — Не совсем. Я думал, может, мы из нашего бюджета…
— Макс, — Дима смотрит на меня как на душевнобольного, — мы и так работаем практически за еду. Если еще и вкладывать свои деньги в проекты клиентов, то скоро будем спать на улице.
Он прав, конечно. Но как объяснить клиенту, что за его мизерный бюджет мы не можем сделать сайт его мечты?
А, это словечко — «допиливаем»! Оно заслуживает отдельной главы. Потому что «допиливание» — это как ремонт: кажется, что вот-вот закончишь, а на деле это бесконечный процесс.
— Максим, а можно сделать так, чтобы при нажатии на кнопку «Записаться» появлялся не просто календарь, а еще и миниатюрки фотографий мастеров, чтобы клиент сразу видел, кто его будет обслуживать? — звонит Алексей Петрович в субботу утром.
— Можно, — вздыхаю я, понимая, что мой выходной накрылся медным тазом. — Но это потребует дополнительной работы.
— Ну, я же совсем немного прошу! — искренне удивляется клиент. — Это же буквально добавить пару картинок!
И вот я сижу в субботу, пытаясь «добавить пару картинок», что на деле означает переписывание половины функционала модуля записи, потому что готовое решение, которое мы использовали, не предусматривало таких «мелочей».
— Настя, помоги! — пишу я в мессенджер нашему дизайнеру. — Нужно срочно подготовить миниатюры фотографий всех мастеров!
— Максим, — отвечает она через несколько минут, — сегодня суббота. Я на даче. У меня даже ноутбука с собой нет.
— Я понимаю, — пишу я, чувствуя себя последней сволочью, — но клиент просит. Обещаю, я все компенсирую! Двойная оплата за выходной!
— Ты это на прошлой неделе тоже обещал, — напоминает она. — И где деньги?
— Будут! — я почти не лгу. — Вот Алексей Петрович заплатит за дополнительные работы…
Настя присылает смеющийся смайлик, и я понимаю, что она ни на секунду не верит в то, что клиент заплатит за эти «малюсенькие изменения».
И она права, конечно. Потому что когда мы наконец делаем все, о чем просил клиент, и присылаем счет за дополнительные работы…
— Какие еще дополнительные работы? — искренне возмущается Алексей Петрович. — Это же были мелкие исправления! В рамках основного проекта!
— Но мы потратили на эти «мелкие исправления» еще 40 часов работы, — пытаюсь объяснить я. — Это равноценно созданию еще одного небольшого сайта.
— Это ваши проблемы, — отрезает клиент. — Я за это платить не буду.
И вот тут мы сталкиваемся с главным парадоксом мира веб-разработки: хороший сайт требует времени, денег и четких требований. А клиенты обычно хотят всё быстро, дешево и «чтобы было красиво». И когда ты пытаешься объяснить, что из этой троицы можно выбрать только два пункта…
— Что значит «выберите два из трех»? — хмурится Алексей Петрович при нашей первой встрече. — Я хочу все три!
— Это невозможно, — пытаюсь объяснить я. — Если вы хотите быстро и дешево, то качество будет страдать. Если быстро и хорошо — будет дорого. А если дешево и хорошо — придется подождать.
— Глупости, — отмахивается клиент. — Вы просто хотите содрать с меня больше денег!
И вот так начинается наш танец с клиентом, где мы пытаемся удержать баланс между его ожиданиями, нашими возможностями и реальностью рынка.
Но знаете что? Несмотря на все эти сложности и парадоксы, я люблю свою работу. Особенно мне нравились проекты для госкомпаний. Они приходят, дают четкие требования, ты делаешь сайт — и все довольны. Никаких миллионов правок, никаких капризов. Просто работа.
Однажды нам довелось делать сайт для местного муниципалитета. Вот где был порядок! Техническое задание на 50 страниц, с четким описанием каждой функции, каждой кнопки, каждого поля формы. Бюджет адекватный, сроки реалистичные.
— Это просто праздник какой-то, — сказал Дима, листая ТЗ. — Никаких «сделайте красиво» или «чтобы цепляло». Все конкретно и по делу.
— Не могу поверить, что такое бывает, — Настя выглядела по-настоящему счастливой. — Даже цветовая схема указана в точных HEX-кодах!
— Наслаждайтесь, ребята, — улыбнулся я. — Такие проекты — редкость.
На таких проектах я набил руку. Мы делали корпоративные сайты, интернет-магазины мебели, системы приема заказов для стоматологических клиник, даже информационные киоски. Это был бесценный опыт.
Но самое главное, чему я научился — это важность тестирования. Потому что можно сколько угодно двигать кнопочки и менять шрифты, но если сайт не работает как надо — все это бесполезно.
Помню, мы сделали один сайт, который выглядел просто потрясающе. Дизайн от Насти — шедевр, код от Димы — произведение искусства. Мы были так горды, что даже устроили небольшую вечеринку в офисе, отмечая завершение проекта.
— За нас! — поднял я бокал с шампанским. — За самый крутой сайт, который мы когда-либо создавали!
— За нас! — подхватили Дима и Настя.
А на следующий день начались звонки от клиентов:
— Я не могу зарегистрироваться на сайте! Ввожу все данные, нажимаю кнопку, и ничего не происходит!
— Я оформил заказ, но мне не пришло подтверждение на почту!
— Я пытаюсь загрузить фотографию, но сайт вылетает!
Оказалось, что в нашей погоне за красотой мы упустили из виду юзабилити и функциональность. Сайт выглядел потрясающе, но работал из рук вон плохо.
— Как такое могло произойти? — я схватился за голову, глядя на список багов, который рос с каждым часом.
— Мы не тестировали, — просто ответил Дима. — Точнее, тестировали, но только на наших устройствах и в идеальных условиях.
— И что теперь делать? — Настя выглядела расстроенной.
— Срочно исправлять, — я вздохнул. — И на будущее — всегда тестировать на разных устройствах, в разных браузерах, с разными сценариями использования.
Этот урок стоил нам недели бессонных ночей, когда мы героически исправляли все найденные баги. Но он же стал одним из самых ценных в нашей практике.
Поэтому теперь, когда я берусь за новый проект, я сразу закладываю время и деньги на все эти бесконечные правки, на работу дизайнера, на тестирование. Потому что только так можно быть уверенным, что в конце концов получится что-то стоящее.
А теперь, дорогие мои читатели, приготовьтесь. Я собираюсь раскрыть вам страшную тайну IT-индустрии. Тссс… Не говорите никому, что это я вам рассказал!
Знаете, как работает большинство IT-компаний? Нет, не так, как в красивых рекламных буклетах или на сайтах для соискателей. Реальность куда… интереснее.
Однажды мне довелось побывать на корпоративе одной крупной IT-компании. Я пришел туда с другом, который там работал, и разговорился с одним из старожилов, назовем его Виктор.
— На чем вы сейчас сидите? — спросил я, имея в виду технологии.
Виктор печально улыбнулся и отхлебнул виски:
— На пороховой бочке, дружище. На пороховой бочке.
Он рассказал мне, что за красивым фасадом успешной компании скрывается настоящий хаос. Представьте снежный ком. Маленький, безобидный шарик снега, который катится с горы. Сначала все хорошо, он растет, набирает скорость. А потом… Бум! Лавина.
— У нас текучка кадров такая, что двери не закрываются — одни уходят, другие приходят, — говорил Виктор, понизив голос. — Проекты постоянно срываются, клиенты недовольны, но мы продолжаем брать новые заказы, потому что деньги нужны, чтобы платить зарплату.
— И как вы с этим справляетесь? — удивился я.
— Никак, — пожал плечами Виктор. — Компания берет проект. Потом еще один. И еще. Некоторые в плюс, некоторые в минус, но в среднем «температура по больнице» нормальная.
— Но ведь это не может продолжаться вечно? — я был шокирован таким откровением.
— Конечно, нет, — Виктор горько усмехнулся. — Рано или поздно что-то сломается. Компании начинают жонглировать деньгами. С одного проекта на другой, потом обратно. Заставляют программистов работать сверхурочно, перебрасывают их с задачи на задачу. И вот этот снежный ком растет и растет. А в какой-то момент… Бах! Компания становится банкротом.
Я был поражен. Это как «Валандемор». Все о нем знают, все его боятся, но никто не смеет произнести его имя вслух. Но он есть, и он реальный.
А теперь немного о программистах. О, эти загадочные существа! Они проходят собеседование (иногда не одно, а три-восемь-десять, в зависимости от «крутости» компании). И знаете что? Чем больше собеседований, тем больше шансов, что компания… не очень. Парадокс, да?
— У нас в компании шесть этапов собеседования, — хвастался мне знакомый HR-менеджер.
— И многие доходят до конца? — поинтересовался я.
— Процентов пять, не больше, — с гордостью ответил он.
— А из тех, кого вы все-таки берете, многие остаются работать больше года?
HR-менеджер поджал губы:
— Это несущественный показатель.
Я понял, что попал в точку. Компании тратят огромные ресурсы на поиск «идеальных» кандидатов, а потом не могут создать условия, в которых эти кандидаты хотели бы остаться.
Они приходят в компанию, берутся за проект и… начинается веселье. Задачи копятся как грязная посуда в раковине холостяка. Что-то откладывается на потом, что-то прячется под ковер, где-то ставится заглушка.
А зарплата капает, дни идут, а толку… Ну, вы поняли. И в один прекрасный день наш герой-программист просто исчезает. Растворяется как сахар в кофе. А после него остается проект с кучей невыполненных задач.
И знаете что? Этот цикл повторяется снова и снова. Программисты приходят и уходят, а проекты остаются. Мы называем их «черными призраками» — они бродят по периметру IT-компаний, собирая свой урожай зарплат и оставляя после себя недоделанную работу.
Конечно, не все компании работают так. Есть и те, кто действительно заботится о качестве, о сотрудниках, о клиентах. Но их, к сожалению, меньшинство.
И вот так, друзья мои, выглядит изнанка IT-индустрии. Не такая гламурная и блестящая, как может показаться снаружи. Но зато честная и настоящая.
А теперь извините, мне нужно идти. Кажется, Алексей Петрович снова звонит с очередной «маленькой правкой». Интересно, что на этот раз? Может, он решил заменить весь сайт на мобильное приложение? Или добавить искусственный интеллект, который будет угадывать, какую услугу хочет заказать клиент, просто по стуку его сердца? С Алексеем Петровичем все возможно!

