Недавно один из клиентов мне написал «Когда будет окончательная версия системы, чтобы не обновляться больше?». И тут я понял, что обычный человек воспринимает любую программу как нечто постоянное и не замечает того, что программа развивается. Пользователь в какой-то момент просто привыкает к исправленной ошибке или новой фиче и продолжает пользоваться программой или сервисом. При этом в его восприятии остается только единое целое.
Любимая игра – хоть десять лет назад, хоть сегодня для пользователя остается одной и той же. Пользователь заходит и приятно проводит время, это все что ему нужно. Думаю, если пользователю сказать – что то во что он играет в данный момент это окончательная версия и больше никогда не будет апдейтов, то он нисколько не огорчится и воспримет это нормально. Вопросы и недовольство у него начнут возникать очень скоро, когда вдруг обнаружится что графика уже не такая красивая как у других, или анимации приелись.
На примере вопроса моего клиента я хочу показать то, что даже самая идеальная программа перестает быть идеальной в момент выпуска очередного релиза. И чем больше пользователей у программы, тем больше нужно следить за ее обновлениями и улучшениями.
На примере CMS Sitebill, над которой мы работаем уже 10 лет. Помню в 2012 году начался довольно бурный рост клиентской базы и новые требования поступали буквально каждый день. Мы что-то улучшали и дорабатывали. Примерно в то время я внедрил в работу шаблоны bootstrap, до этого страшно подумать мы юзали голый css и сами генерили кнопочки.
Когда был готов первый релиз на bootstrap я подумал, ну вот он тот самый долгожданный рабочий вариант, который прослужит долго, и никто не будет жаловаться на неудобства.
Прошло буквально полгода и появилась новая версия bootstrap, еще более крутая и навороченная. И теперь наша уже старая версия выглядела очень нелепо. Снова начали доработки под этот новый bootstrap.
Затем пошил обновления PHP и тут нужно было активно переделывать большие куски кода. А после таких переделок как известно вылезает куча багов и следующие полгода приходится ловить багрепорты от клиентов и править, править и править.
Ко всему еще добавляется улучшение собственных навыков программирования. Если раньше я вполне был доволен парочкой паттернов ООП и вообще слабо представлял себе, что я юзаю какие-то паттерны, вообще. То после изучения и глубокого понимания этой обширной области я вдруг начинал видеть, что мой код — это сплошное болото сильно связанных методов. Снова начинается работа по рефакторингу и как следствие появлению новых ошибок.
Пару лет назад я был в отчаянии. Потому что кода стало так много и он требовал так много сил на поддержку, что я начал искать и изучать новые технологии. Открыл для себя еще один революционный подход – это фронтенд разработка на JS-фреймворках. Вы уже понимаете, что такой переход потребовал очередной переделки структуры и архитектуры.
Мне пришлось создавать REST API интерфейс для всех тех ключевых функций, которые были до этого глубоко скрыты в ядре системы. Вышел вопрос авторизации запросов и аутентификации пользователей. Затем нужно было научиться синхронизировать пользовательские сеансы между классическим фронтом и новым Angular-фронтом.
Еще одним серьезным испытанием для меня было изучение Laravel-фреймворка. Изучал я по книге «Laravel Up & Running». Я вдруг обнаружил, что то, над чем мы десять лет бились при разработке своей системы – давно отлажено, протестировано и прекрасно работает в Laravel. При этом там есть функции и компоненты, которые я бы очень хотел использовать у нас в системе CMS Sitebill. Но проблема в том, что наш код очень сложно адаптировать под архитектуру используемую в Laravel.
Одно время я даже подумывал полностью забросить разработку CMS Sitebill и перейти на разработку только на Laravel. Поднял на фл.ру свой старый аккаунт и начал активно искать заказы под этот фреймворк. И погрузился в работу. Я бы и дальше делал эти заказы на фл.ру, но это разовая работа и она полезна для сиюминутного выживания, но не приносит никаких программерских инвестиций, про которые я рассказываю в своем посте «Как программисту начать зарабатывать на своем продукте?»
Я познал философию применения своего труда в русле личных инвестиций. Философия эта выражается известным высказыванием «Если Вы не строите свою мечту, кто-нибудь обязательно наймет Вас строит свою». В общем, я теперь не могу заставить себя работать над чужими проектами, понимая, что это бесценное время я мог потратить на улучшение своего продукта.
Вот такая дилемма сейчас стоит передо мной. С одной стороны куча своего старого кода, который нужно поддерживать и развивать, с другой очень привлекательный фреймворк Laravel, на котором реально разрабатывать очень сложные проекты и очень быстро.
Мне сейчас нужно каким-то образом направить свою систему CMS Sitebill в сторону интеграции с Laravel.
Заключение
Работа программиста весьма интересна, но в тоже время природа программных продуктов такова, что кроме самих требований клиентов работу подкидывает сам программист, когда исправляет уже рабочие участки кода для улучшения. Этакий вечный двигатель. Пока у программиста горят глаза и не угасает интерес к своему детищу, он способен снова и снова писать код.