Previous Entry Share Next Entry
Неудачные проекты — копилка опыта
rawgift
Судя по всему, вся заметка будет изложением очевидных истин. Будучи прочувствованными на собственной шкуре, они представляются мне неписанными правилами. Впредь будет мне наука.

Публично приношу извинения Сергею и Зое, которые стали жертвой моего непрофессионализма и местами некорректного поведения.


Отношения с клиентом

Самые просветляющие выводы тут.

Я оказался в плену собственного опыта, который подсказал мне: делаем сайт. Я долго работал над клёвым тянущимся шаблоном, полировал и проверял технологии (например, History API из HTML5, позволяющий переключать аяксом страницы и красиво менять URL в строке браузера, без хэшей), раскладывал независимые блоки по отдельным каталогам и рефакторил джаваскрипт. Это оказалось ошибкой, потому что нужен был не сайт, а интерактивная презентация. Логично было бы сделать её на флеше, но он не работает на айпадах и айфонах. Вывод: надо внимательно слушать клиента и переспрашивать его по 30 раз. В идеале стоит добиться сформулированной в 2—3 предложениях задачи с расставленными приоритетами.

Более того, мелочей в работе не существует. Изначально неправильно расставив приоритеты, я решил, что анимации тут вторичны и относятся скорее к мелочам. В итоге, за 8—10 часов до ожидаемого окончания проекта мы с клиентом неприятно расстались, т.к. наши взгляды на то, что важно, а что нет, разошлись. Я не получил оставшиеся деньги, а клиенты — ожидаемый результат.

Идея о том, что кто-то ценит ваше время и платит за него, особенно на фрилансе, необычайно обманчива. Это стало понятно после того, как я предложил заплатить за окончание работы в том виде, в котором она есть. Вся соль в том, что результат незначительно, но всё-таки отличается от того, что нужно. Разлчиие вроде бы и небольшое, но «клиент утвердил эту анимацию» — и хоть трава не расти. Вполне справедливо, надо сказать, особенно глядя на ситуацию глазами клиента. Вывод: клиенту наплевать, работаете ли вы 3 часа в день или 23, — платят за результат. Предполагаю, что то же самое актуально и для наёмного труда на постоянной работе — сидишь хоть и на окладе, но если результата не будет, то и уволят тебя быстро.

Чем меньше денег, тем больше геморроя. Это одно из немногих правил, которое по непонятной мне причине работает всегда. Возможно, дело в отношении клиента как к непрофессионалу, возможно ещё в чём-то, но правило работает. Профессионалы стоят дорого. Под давлением низкой цены и сжатых сроков даже ниндзя-разработчик может стать ламером, допускающим простейшие ошибки, — вывод субъективный, но разумный, на мой взгляд. Дело ещё и в психологии, и в ожиданиях клиента и самого разработчика от сотрудничества, в спущенных сверху сжатых сроках, на которые никак нельзя повлиять. Всё это раздражает и нервирует, не позволяя принимать верные решения.

Нужно держать отчётливую дистанцию в общении с клиентом. Вплоть до нарочитого «выканья». Я позволял себе упрекать своего заказчика в необъективности и неадекватности. Само собой, так делать нельзя, и это наверное наибольшая моя ошибка в этом проекте. Вывод: приятельские отношения с клиентом мешают работе, саботируя проект.

В кои-то веки я оказался не в той же реальности, в которой существует клиент. Раньше я и сам по большей части склонялся к мысли о том, что важен результат, а не процесс, что технология вторична, и что «посетителю сайта наплевать на код, т.к. он видит только картинку». Как-то так совпало, что именно этого от меня и ждали мои прошлые клиенты, особенно если учесть, что ни один проект по моей вине не провалился до сих пор. Сейчас я хорошо понимаю, что код не менее важен, чем результат его работы. Нельзя написать дерьмовый код, но сделать хороший сайт. Это губительно для мозгов программиста, губительно для проекта в целом и для изменений, которые наверняка потребуются в дальнейшем. Возможно, дерьмовый код вполне допустим на «одноразовых» проектах, но и то при условии, что он простой. Даже в этом случае не стоит писать плохой код, лучше использовать какие-то наработки — свои или чужие, ускоряющие работу.


Организационные моменты

Проектирование — всему голова. Самый банальный вывод, но невероятно важный. Я очень хорошо убедился в том, что неверные плохо продуманные решения тянут за собой на дно весь проект, усложняя работу с каждой дописанной строчкой кода. Две недели назад я решил, что сетка важней, а анимации можно будет докрутить потом с помощью jQuery.animate(), а сегодня не сдал проект.

Изучать, изучать и ещё раз изучать задачу! Я плохо изучил исходники, получил с задержкой видео анимаций — как результат, я фатально недооценил сложность. Такое у меня тоже впервые. Как минимум, стоимость проекта нужно было удвоить, если не утроить. Злую шутку сыграла опять же призма «опыта», через которую я увидел 3 странички и решил, что всё просто как три рубля. Даже скинул немного цену относительно первоначально названной. Этого делать нельзя. В начале проекта необходимо досконально разобраться в задаче, потратив на это пускай и много времени.

Торговаться нельзя, это портит карму и вредит как самооценке разработчика, так и результату проекта.

Мне есть чему учиться. Возможно, самый главный вывод лично для меня. Он вдохновляет и наполняет энтузиазмом, опуская вместе с тем на землю. И это очень хорошо — на земле всегда есть чем заняться.

Хватит работать за еду! Как-то так получается (боюсь, что тянется это откуда-то из детства и обусловленности прошлым), что даже зарабатывая вполне серьёзные деньги на некоторых проектах, я всегда получаю минимально достаточное количество денег. Особенно если посчитать стоимость часа (хоть это и бессмысленно, как я уже выяснил). Участие хорошего специалиста в проекте должно стоить дорого, а иначе и хорошим специалистом не стать. Причём не обязательно участие «на полную катушку» с 8-часовым работим днём. Даже небольшая консультация стоит денег, не говоря уж об умении довести начатое до конца. Оговорка: конечно же, речь идёт о настоящем профессионале.

Субъективный вывод, не касающийся к тому же моего личного опыта в данном проекте: одержимость желанием клиента — это чепуха, особенно в заказной разработке. Идея «желание клиента — закон» может быть применима в сфере потокового осблуживания, например, в макдональдсе или при сборке автомобиля. Именно при наличии алгоритмов обслуживания, выполняемых по шагам, возможность изменить процесс, подогнав под конкретного человека, имеет ценность. В заказной разработке это бессмысленно, т.к. тут весь процесс с самого начала подгоняется под задачу — в противном случае это конвейер. Использовать подобный аргумент для утверждения «летающего асфальтоукладчика» преступно.

Более того, при работе над сайтом СВ я выработал очень важное правило: надо принимать решения только на основании объективных и измеримых данных. Таких данных об анимации и увеличении посетителей и/или конверсии у меня нет. Боюсь, что анимация вовсе никак не повлияла бы на интерес людей к сайту. Но есть одна оговорка: всё это верно при условии того, что задача — сделать сайт для посетителей, привлечь на него людей. Если задача заключается в том, чтоб сделать имиджевый сайт для понту или порадовать руководителей фирмы новомодными свистелками-перделками, плавно работающими на айпаде, то мой аргумент неприменим.


Технология

Джаваскрипт — это сложно, как и программирование любой логики. Анимации — это сложно, как и любое другое программирование графики. Это необходимо учитывать как в сроках выполнения, так и в стоимости проекта. Сами по себе анимации — что джаваскриптовые, что CSS3 не так уж и сложны. Логика какой-нибудь галереи пишется за несколько часов, если изначально потратить 15 минут и всё продумать. Но вот в совокупности с нетривиальным поведением сетки и самого шаблона сложность возрастает на поядок.  Конечно, с ростом профессионализма такие вещи становится проще делать, но пока что я не знаю, как. У меня уходит очень много времени на отладку логики. А программировать графику без раскадровок и сценариев — это вообще сущий ад.




Через некоторое время напишу заметку с наблюдениями про использование технологии: организацию Javascript-кода и независимые блоки в одном проекте, CSS3-анимации и т.п.

?

Log in

No account? Create an account