Несколько месяцев назад на Reddit появился пост разработчика начального уровня, который удалил производственную базу данных в свой первый день. Мы все съеживаемся, читая подобные истории о тех, кто совершает эти большие, незабываемые ошибки. Мы понимаем, что для этого не потребуется много времени - у большинства из них были близкие вызовы.

На моей первой работе старший администратор базы данных в первый же день отказался от производственной базы данных. Эти истории повсюду. Команда восстановила его ошибку из резервной копии недельной давности и держала его при себе. Спустя десять лет они все еще подшучивали над ним за это.

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

Я вошел в рабочую машину и открыл базу данных. Таблица статей была пуста. Хорошо, это подтвердило то, что мы видели на сайте.

В таблице пользователей остались пользователи. Странный. Таким образом, мы потеряли все наши статьи, но, по крайней мере, их бета-пользователи все еще имели свои учетные записи. Мы могли бы объяснить, что это бета-версия, и такое случается.

Следующие несколько мгновений были размытыми. Я точно не помню, что делал. Я не думаю, что был достаточно глуп, чтобы набрать drop table users в консоли. Но я был там, теперь без статей и без таблицы пользователей. Я немного посидел в шоке.

Тогда я подумал, как это исправить. Я действительно уронил таблицу пользователей? да. Мы делали резервные копии? Нет. Как мы можем сказать об этом клиенту? Я не знаю.

Я помню, как подошел к менеджеру проекта, сел рядом с ней и объяснил, что произошло. У нас не было данных в таблице статей, поэтому сайт выглядел пустым. И да, я тоже уронил таблицу пользователей. Теперь им нужно было повторно пригласить всех этих пользователей - если они смогут выяснить, кто они все. Ой.

Я вернулся к своему столу, чувствуя себя побежденным.

Однако что-то меня не устроило. Как мы вообще потеряли все эти статьи?

Я продолжал копать. Отчасти отрицание, отчасти желание сохранить лицо. Вскоре после этого я заметил кое-что важное.

На сервере было пять других баз данных. У одного из них было имя, похожее на имя базы данных, которую я только что просматривал.

Когда я его проверил, там были все статьи. Таблица пользователей была в порядке. Оказывается, изменение конфигурации случайно попало в рабочую среду, в результате чего сайт указывал на совершенно новую базу данных. Тех пользователей я видел? Данные о семенах.

Какое облегчение! Утро, полное нервов и желудочного сока, заставило меня почувствовать себя плохо, но мы смогли «восстановить» все данные, и я обнаружил настоящую проблему еще до того, как мы должны были сообщить плохие новости.

Много уроков извлечено из этого эпизода. Один из самых простых: теперь мы всегда делаем резервные копии… возможно, самый эффективный антацид для разработчиков.

Спешка и никогда не забегает вперед

Одна из других моих недавних ошибок, которая выделяется, была не столь драматична. Фактически, это была крошечная ошибка за крошечной ошибкой, которая в конечном итоге привела к беспорядку.

Нашей задачей был проект в сжатые сроки. (А разве не все?)

На нашей первой встрече мы как команда договорились, что это займет вдвое больше времени. Поскольку крайний срок давил на нас с самого начала, я быстро прошел через часть аутентификации, чтобы мы могли перейти к функциональности, которая действительно волновала клиента.

Раньше я реализовывал аутентификацию только один раз в одностраничном приложении и до сих пор не до конца понимал, как это должно сочетаться.

Какая ошибка - взломать его так быстро, как только смогу. Я пропустил несколько важных вещей:

  1. Пользователь загрузился из файла cookie после входа в систему, но страница попыталась загрузиться без ожидания. В зависимости от порядка этих событий вы будете получать ответы с сервера о том, что вы не авторизованы. Ошибка возникала редко, и ее трудно было воспроизвести, потому что большую часть времени все выполнялось в правильном порядке.
  2. Аутентификация также никогда не проверяла, истек ли срок действия токена. Если вы не заходили на сайт часто, когда вы вернетесь, сайт не будет работать, и вам придется выйти и снова войти.
  3. Токен должен был обновляться с каждым запросом, но у меня никогда не было времени разбираться в правилах, связанных с ним. Так что это снова привело к проблемам со сроками. Если мы отправили несколько запросов одновременно, в зависимости от порядка, в котором они возвращали, вы получите неправильный токен, который будет использоваться в будущих запросах.

Мы поспешили и все равно потратили вдвое больше отведенного времени. Разница заключалась в том, что ошибок было гораздо больше, а затем было потрачено еще больше времени на отслеживание и исправление этих ошибок.

Работа меня смущала. Затем, когда меня публично стыдили за это, все стало намного хуже.

Скажу одно: с тех пор я потратил время на изучение аутентификации. Теперь я понимаю OAuth, JWT, токены обновления и истечения срока действия. Я внимательно изучил код аутентификации, написанный другими в ряде библиотек. Я построил потоки аутентификации на нескольких разных языках и в разных фреймворках.

Превращение неудач в будущие успехи

Это единственное, что я убираю из всего, что идет плохо. Почти всегда из этого получается что-то хорошее, если хотите.

Если кто-то учится на своей ошибке, теперь он лучше, чем был раньше. Я стараюсь не обижаться на товарища по команде, который ошибается в первый раз. Обычно они уже знают, что напортачили.

Однако я стараюсь не быть таким жестким с теми, кто повторяет одну и ту же ошибку снова и снова. Они по-прежнему заслуживают сострадания.

Вы будете постоянно расти, если сможете делать четыре вещи с ошибками:

  1. смеяться над созданием одного
  2. учиться на этом
  3. дестигматизировать, делая их
  4. и поделитесь своей ошибкой, чтобы другие тоже могли извлечь из нее пользу

Я оставлю вам последний анекдот о ценности ошибок. Генеральный директор IBM в начале 1900-х Томас Дж. Уотсон однажды столкнулся с сотрудником, чья серия неверных решений дорого обошлась компании. Когда его спросили, собирается ли Уотсон уволить этого сотрудника, Уотсон ответил:

«Нет, я только что потратил 600 000 долларов на его обучение. Зачем мне нужно, чтобы кто-то нанимал его опыт? »

У вас была интересная ошибка в прошлом? Поделиться этим!

Спасибо, что прочитали статью! Если вы сочтете это полезным и хотите выразить свою поддержку, поделитесь им и не забудьте нажать кнопку 👏. Чтобы увидеть больше подобных статей, следите за публикацией и автором в Твиттере.

Зак Кун - директор по развитию цифрового агентства Smashing Boxes, Дарем, Северная Каролина. Он создает веб-приложения и мобильные приложения более десяти лет и участвует в стартапах и новых технологиях, таких как блокчейн, Интернет вещей и машинное обучение.