Тема, которую я благополучно прослоупочил - нелепые факапы в разработке.
https://vc.ru/life/124730-tred-razrabotchiki-vspominayut-nelepye-oshibki-v-svoey-rabote
Давно хотел рассказать свою историю, произошедшую почти 20 лет назад.
1/2
Работал я тогда в одном маленьком региональном операторе начальником отдела биллинга.
Ситуация там была интересная - биллинг на протяжении многих лет писала команда из 10 человек. Потом сотового оператора продали TELE2, а команда разработки отделилась и осталась в другой компании, занимающейся продажей интернета.
Поддерживать биллинг сотового оператора силами сторонней компании не виделось учредителям возможным, поэтому решили нанять для этого отдельного человека на переходный период, пока TELE2 не запустит свои мощности.
Как мне стало видеться спустя годы, директор отделившейся компании и по совместительству главный разработчик биллинга, решил провернуть схему как показывают в современных отечественных сериалах типа "мылодрама" или "последний министр".
Он нанял меня на должность начальника биллинга :)
Моя практика SQL на тот момент была ограничена созданием каталога для интернет магазина на Mysql.
Еще я слышал о том, что существуют join'ы ...
Передача биллинга происходила так: я пришел в кабинет к разработчикам (который располагался на том же этаже, что и сотовый оператор) и спросил как будет происходить процесс передачи.
Один из разрабов встал, подошел к стене, выдернул из одного из системников все провода и вручил мне его руки.
Биллинг представлял собой системник high tower с windows NT (или 2000, не помню точно) на борту и сервером MSSQL со всей бизнес-логикой, написанной на хранимках.
Я бегом добежал до своего кабинета и воткнул все все в сеть.
Не помню подробностей как я все это запускал. Видимо, мозг блокирует эти воспоминания :)
Long story short, я немного разобрался как там все устроено.
Бэк, в лучших традициях oracle-style разработки был полностью на MSSQL. Фронтом выступали приложухи, написанные на Visual Fox Pro.
На них работали все отделы - абонентский, бухгалтерия, саппорт и все остальные.
Одна из главных магий этой системы был процесс генерации "книги продаж" для бухгалтеров.
Он должен был запускаться ровно один раз в месяц, в 00:00 первого числа, откатить назад было невозможно, как оно работает - не знал никто.
Внутри процедура генерации занимала экранов 200 T-SQL, кода, который вызывал несметное количество других процедур, часть из которых была зашифрована.
Да, в MSSQL можно шифровать процедуры :)
Смеркалось... Второй из сотрудников нашего немногочисленного отдела случайно запустил эту процедуру в середине месяца. Бэкапов никто не делал...
Следующие пару дней прошли в консультациях на тему "как быть".
В базе была большая таблица, где были записаны все услуги всех абонентов с датами начала и конца биллинг периода.
Один из разработчиков биллинга предложил обнулить конец биллинг периода.
Вечером я сделал UPDATE tbl SET date_end = NULL и ушел домой. Бэкапов по-прежнему никто не делал...
Утром около кабинета стояла делегация почти из всех отделов. Практически с вилами.
Но я был готов, т.к. за несколько минут до этого мне позвонил начальник коммутатора и спросил, не знаю ли я что случилось.
В полночь на коммутатор свалилось 100500 тасков по отключению ВСЕХ абонентов.
Это был старый аналоговый оператор с такими огромными лопатами, а онлайн биллинг тогда был, кажется, только у МТС.
Онлайн - это когда тебя могут прервать в середине разговора, если кончились деньги.
Тут же пересчет балансов происходил в полночь и практически не было абонентов с предоплатой.
Post #437
796