Code&Travel
1.31K subscribers
2 photos
280 links
Работаю frontend-разработчиком (10 лет) и flutter developer (1 год). Имею расширение для Google Chrome на 80к пользователей. Посетила 50 стран и продолжаю. Веду digital nomad lifestyle.

Связаться - @suzannoshka, рекламы нет, только ВП.
Download Telegram
И снова здравствуйте. Не прошло и двух недель, как я пишу в этот блог опять 😀.

За это время я все же закончила версию Pixel Measurement 1.0.0 (расширение для Google Chrome). Расскажу, из чего состоял процесс.

В августе я поняла, что из всех своих целей больше всего я хочу создать пассивный доход из Pixel Measurement. Но я не хотела монетизировать продукт в имеющемся сыром виде. Мне хотелось создать проект, которым можно гордиться. Когда пользователь удаляет мое расширение, он попадает на страницу опроса, на которой я спрашиваю, что пошло не так. Я проанализировала список ответов и составила to-do list улучшений из повторяющихся пожеланий, добавив к ним свое видение. После этого села исправлять баги и внедрять доработки.

Так прошёл целый месяц. В сентябре я улетела в путешествие на целый месяц. В октябре в еще одно. Возвратившись в Москву в конце ноября, у меня было две недели на то, чтобы добить хотелки пользователей. Параллельно проконсультировалась с людьми из комьюнити билдеров (кто также создает расширения для Google Chrome), каким образом мне модифицировать интерфейс. В моей версии настройки и различные конфигурации были распределены в разных местах экрана (что-то — на странице настроек, другое — в левом углу экрана, третье — в правом). Мне посоветовали создать единую панель со всеми возможными настройками.

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

Затем еще 2-3 недели наскоками я внедряла новый дизайн и фиксила баги. Их оказалось бесчетное количество. Казалось бы, такой простой интерфейс, не так много сценариев использования, но порой находишь такие вещи, о которых даже не задумывался. Тестировщиком выступала я сама + раздала нескольким друзьям на тест.

Самый суровый баг поджидал меня в момент обновления расширения. Предположим, пользователь использует версию 0.0.6, Google Chrome автоматом скачивает версию 1.0.0 и обновляет расширение, — и тут вся верстка едет и все перестает работать до следующей перезагрузки страницы. Благо, для тестирования подобных вещей есть отдельный браузер: Google Chromium. Когда выкатываешь новую версию на 75 000 пользователей, берешь на себя большую ответственность. В такой момент хочется, чтобы их было меньше) Ведь один серьезной баг, пропущенный по неосторожности, может стоить тебе 35 000 пользователей. Я создала to-do list из 280 пунктов на тест + добавила 15 сайтов, на которых стоит протестить расширение. Дело в том, что если сайт использует глобальные стили, они могут затрагивать и интерфейс расширения Google Chrome. Нужно все перепроверять.

6 февраля я опубликовала свежую версию расширения на 10% пользователей. Сейчас, не получив отрицательной обратной связи (видимо, все баги учла 😀), раскатала до 40%. Можете меня поздравлять 🥳.

В качестве благодарности получаю такие честные и непроплаченные отзывы:
А теперь расскажу, что изменилось в версии 1.0.0, и почему я ее так долго делала.

Прошу извинить, последний пост про расширение для Google Chrome, дальше обещаю переключиться на другие темы)

Было:

Простая линейка пикселей онлайн. Пользователь рисует прямоугольник на экране, и линейка показывает, какое количество пикселей по ширине и высоте у этого прямоугольника. Есть сетка на background, которая позволяет удобнее прямоугольник рисовать. Можно менять цвет сетки (чёрный, белый, красный, зеленый) и размер сетки (4px, 8px, 20px, 50px, 100px). Есть возможность отключить сетку полностью. Прямоугольник на экране можно переносить, таким образом проверяя, что два элемента имеют одинаковые размеры. Также в панели слева отображаются координаты текущего указателя мыши. Саму панель с координатами можно перенести на любое место экрана.

Стало:

1. Основное — добавился Smart Select. Теперь пользователю не обязательно рисовать прямоугольник на экране (хотя старый функционал сохранился), он может наводить указатель мыши на элемент — и приложение автоматом будет показывать его размеры. Есть даже возможность выбрать определенный элемент в качестве центрального и смотреть размеры соседних уже относительно него. Таким образом, измерения работают гораздо точнее и стали автоматическими.

2. Для тех, кто предпочитает ручную линейку, добавился масштабный функционал настроек. Теперь цвет сетки определяется не из 5 сочетаний, а можно выбрать любой, воспользовавшись color picker. Также и с размером сетки: пользователь вводит необходимое количество пикселей в инпут, и сетка сразу перестраивается (было всего 5 предвыбранных сочетаний, напомню).

3. Появилась возможность менять цвет прямоугольника. Также, на любой из color picker. В предыдущей версии он всегда был одинаковым.

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

5. Появилась возможность получать измерения в ручном режиме не только в px, но и в см и дюймах. Зачем это надо — не знаю. Но многие пользователи жаловались на то, что в см расстоянии померить невозможно. Видимо, кто-то меряет страницы в pdf.

6. На панели управления (которая стала раз в 6 больше) появилась кнопка рейтинга и «сообщить о баге». Если пользователь ставит плохой рейтинг, я веду его на страницу обратной связи в Google Forms. Если хороший — на страницу отзывов по extension.

7. Поскольку панель управления теперь в разы больше и занимает значительную часть экрана, я сделала ее маленькую версию. В мелкой панели можно управлять наличием сетки и переключением режима (smart/manual select).

На разработку всего вышеперечисленного у меня ушло 111 часов чистого времени, включая первый прототип, дизайн, тестирование функционала и фикс всевозможных багов. Как думаете, много это или мало?)

P. S. Да, монетизация будет, но в следующей версии. Я улетела в очередное путешествие 🤣.
Всем снова здравствуйте. Прошла зима, за это время моя жизнь перевернулась три раза. Да, каждый месяц переворачивалась.

У каждого рано или поздно происходят события, которые случаются раз в восемь лет или вообще раз в жизни. События глобальные. Но когда они случаются каждый месяц, даже для меня, ребята, как для человека, любящего перемены, это — too much. Потому что нужно еще как-то сохранять концентрацию и умудряться работать.

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

Меня преследовала одна и та же фраза из книги «Собака по имени Money», о которой я уже как-то писала в блоге.

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

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

Таким образом, несмотря на все события, за эти три зимних месяца я успела:

1. Завершить работу в банке. Я работала на проекте банка Открытие более 8 лет. С первого дня основания проекта. Мы делали систему для малого и среднего бизнеса. Его купил ВТБ в конце 2022 года. С тех пор все пошло прахом, и два года мои задачи заключались в постепенном убивании проекта, который я так сильно любила и которым искренне гордилась. Который перевез меня в Москву, повысил мой доход сначала в 2, а потом в 5 раз, позволил свободно путешествовать, купить квартиру в Москве и дал многое-многое другое.

1 января 2025 года юр лицо банка Открытие перестало существовать. Моя работа вместе с ним тоже. 28 декабря 2024 года был мой последний рабочий день. Со мной, с человеком, который был от самого начала и до самого конца, никто даже не попрощался. Мне даже не дали последнего слова. В такую глубокую яму скатился этот проект уже под руководством ВТБ. 31 декабря я удалилась из всех рабочих чатов, чтобы больше никогда об этом не вспоминать.

2. Завершить разработку мобильного приложения на Flutter, которым я занималась целый год. С нуля, изучая язык программирования с помощью chatGPT. Сейчас приложение находится на стадии апрувов в Apple Store и Google Play. Как только появится, я вам сообщу.
3. Разработать новую версию Pixel Measurement, о которой писала выше. Иногда мне казалось, что я делала ее не из-за желания заработать деньги, а вопреки всему. Уж очень много всего случалось, что мешало мне реализовать задуманное. При этом я понимала, что данная задача для меня важная, не срочная, но важная (на такие как раз постоянно не хватает времени, потому что есть основная работа). Я тут вижу очень хорошие перспективы и возможность получать хороший пассивный доход в будущем. Которые выгорают каждый день, пока я торможу и ничего в сторону монетизации не делаю 😅. В итоге я добила расширение за день до своего отъезда в путешествие.

4. Найти новую старую работу, на которой я с февраля, и на которой уже многое случилось. И, да, я ее совмещаю вместе со своим 5-ти недельным путешествием по Европе и вместе со всем остальным. Но о нюансах этой работы расскажу уже в следующих постах.

А у вас как прошла зима?) Весна, пожалуйста, больше мне такого не надо 🤣
🔥Шанс попасть в IT

Компания Clevertec ищет участников бесплатного марафона по frontend-разработке. Лучших выпускников пригласят на стажировку.

🧑‍💻Если ты начинающий веб-разработчик (JavaScript, React) из России и хочешь прокачаться под менторством программистов компании, заполни эту анкету.

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

Старт — 1 апреля (не шутка 😂). Стоит попробовать😉
Не так давно я выполнила упражнение на определение собственных ценностей. На самом деле, полезно, помогает сверяться с ними как с компасом при принятии жизненно важных решений. После многих решений возникает либо ощущение, что так и должно быть, либо состояние дикого дискомфорта. Так вот, если чувствуете дискомфорт, значит, принятое решение идет в разрез с вашими ценностями. И стоит подумать, как его изменить.

Упражнение состоит в следующем:

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

Например, для меня одним из важных моментов был переезд из Петербурга в Москву. Мне всегда хотелось попробовать пожить в большом городе (Петербург в какой-то момент стал мне мал), сформировать с нуля свой круг общения и пожить, наконец-то, отдельно от родителей. Мною двигал интерес к новому, вызов, риск, самостоятельность. То же самое я чувствовала, когда переходила из одной школы в другую в 8 классе. Я выбрала школу с углубленным изучением информатики еще в 2004 году, не написав до этого ни одной строчки кода. И не прогадала. Или когда отправилась на краткосрочные курсы в Utrecht University на английском языке, одна, где погрузилась в студенческую жизнь на иностранном языке и перестала чувствовать себя туристом в другой стране. В каждом из этих случаев был вызов, развитие и новый опыт.

Ценности — это внутренний огонек внутри тебя, ты просто не можешь действовать иначе.

Более подробно упражнение и список 40 потенциальных ценностей описано здесь.

У меня получились:

1. Узнавание нового (каждый день мне важно узнать новую информацию, приобретать новый опыт, развиваться, быть продуктивной, находить время на творчество, вдохновение). Я просто не могу без личного развития и ненавижу, когда что-то ломает мою продуктивность.

2. Независимость. Не признаю никакого контроля извне. Я даже отчитываться почасово по выполненным задачам не смогла) Все решения в своей жизни я должна принимать сама, не приемлю никаких ограничений и отчетности. Эта же особенность позволяет мне быть максимально эффективной и строить распорядок дня согласно собственным циклам. При этом у меня очень большой уровнь самодисциплины.

3. Насыщенная интересная жизнь. Нет для меня ничего хуже бесконечных «дней сурка», в которых каждый твой следующий день похож на предыдущий. Ситуация с коронавирусом, когда ты должен сидеть несколько дней подряд в одной квартире казалась мне кромешным адом. В таких ситуациях я начинаю быстро угасать. А вот когда жизнь постоянно бьет ключом, что-то происходит (как хорошее, так и плохое), когда кажется, что за неделю прошел один месяц, — при таких обстоятельствах я чувствую себя как рыба в воде. Однако, и постоянная смена декораций когда-то становится обыденностью. В такие моменты хочется еще большего разнообразия, добавив спокойные дни, в которые ничего не происходит.

4. Успех среди других. Да, мне нравится материальное благополучие, понимание, что ты взял лучшее из имеющегося, общественное признание. Мне нравится вдохновлять других людей, демонстрировать, как я крута и в чем я молодец, не довольствоваться малым и постоянно гнаться за тем, что мне надо. И доводить до победного результата.

Такие вот получились мои ценности. А что у вас?)
В начале года после завершения работы на проекте банка я оказалась перед выбором, что делать дальше. На тот момент совместно с основной работой я работала на другом проекте с почасовой оплатой. И моя идея заключалась в том, чтобы перейти на нем на полную ставку.

Впрочем, вариантов было два: серьезно увеличить ставку в час и продолжать работать по часам, либо предложить оптовый заказ со скидкой. Я склонялась ко второму варианту, т. к. предпочитаю стабильность.

Переговоры прошли в нужное время и в нужном месте. Уже два года мы пилим стартап для поиска наиболее оптимального маршрута для грузоперевозок всему миру. Этакий aviasales для оптовых поставщиков с кучей наворотов. И сейчас как раз выходим на финишную прямую, ищем инвесторов, дорабатываем оставшиеся 15% функционала и готовы встречать первых пользователей. Поэтому идея вложится в этот проект побольше, чтобы получить результат побыстрее, понравилась главному. В общем, меня взяли 🙃.

Схема оплаты оказалась очень необычной для меня. Я всегда работала через ИП, Upwork или получала зп в конверте в далеком 2014 (в общем, никогда по трудовой), а тут мне предложили заплатить 50% наличкой. Сразу. Такая предоплата за полгода вперёд.

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

В такой парадигме я проработала три недели. Больше не выдержала. Это было практически нереально: вместо того, чтобы делать, запоминать по минутам, что именно было сделано. Да и вообще, как писала в предыдущем после, я тот человек, который не признает никакого контроля извне. Я чувствовала себя как в детском садике, где нужно каждый день докладывать воспитателю, что ты делал сегодня. Но мы-то с вами взрослые люди. Давайте работать так, чтобы всем было интересно и комфортно.

В общем, три недели спустя я провела другие переговоры, уже на групповом созвоне со всеми участниками. Где объяснила, почему текущая система трекинга задач крайне неудобна для меня. И предложила свою. Теперь время по всем задачам буду заполнять еженедельно, более крупными блоками (по 4-6-8 часов). А уже на протяжении недели выкладывать работающий функционал по мере готовности и писать в групповой чат с принскринами, что именно было сделано. Вроде, всех устроило. Так теперь и живем)

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

На самом деле, основное — найти работу с более менее свободным графиком. На текущей у меня нет жесткого начала рабочего дня, поэтому начинаю я его часам к 17-18. У меня нет ежедневных созвонов: встречи проходят дважды в неделю в 18.15 по Москве или 16.15 по Европе. Идеально!

Я самостоятельно распределяю часы, когда и сколько я работаю. Работать для меня на выходных — в порядке вещей. На буднях обычно утром и днём я занимаюсь своими делами, к задачам приступаю в районе 17-18, когда стемнеет. Если стоит вечернее мероприятие, перекраиваю свой день и работаю в светлое время суток. Главное — отработать необходимое количество часов на неделе. Таким образом, отправляясь в путешествие, часов до 17 я обычно хожу по музеям/гуляю по городу/на хайкинг, а после возвращаюсь в отель и приступаю к работе. В Азии с их часовыми поясами вообще идеально: выглядит так, что ты работаешь по московскому времени.

Есть только одна вещь, которая ломает мой режим: переезды. Когда их слишком много, я страдаю 🥲. Это означает, что весь мой сформировавшийся график в день переезда рушится, надо выделить 3 ч на упаковку/распаковку чемодана, дотащить его до транспорта и понадеяться, что в этом транспорте будет стабильный интернет. Ведь надо, чтобы можно было всю дорогу работать, но так бывает не всегда, к сожалению. В итоге я стараюсь оседать в каком-нибудь крупном городе (из которого можно удобно доехать до других мелких) недели три, чтобы все посмотреть в комфортном темпе и совместить с работой.

Но жизнь обязательно вносит свои коррективы: то хочется посмотреть несколько крупных далеких городов, то время по визе ограничено, то отели в этой локации дорогие, то начинаешь скучать по друзьям и по дому, то устаешь жить на чемоданах и хочется вернуться в свою квартирку. В итоге постоянно балансируешь между «успеть все и сразу» и «давай все же организуем все в комфортном для себя ритме». За последнюю 5-ти недельную поездку у меня было 4 страны и 5 городов. Вместо 2-х по идеальному для меня сценарию 🤣.

Путешествую я не всегда. Я так просто не выживу) Есть у меня и периоды затишья, когда я по целому месяцу или даже больше торчу в Москве (где у меня квартирка) или в Петербурге (где у меня родители). За время в Москве я выстраиваю себе максимально однообразную рутину, с небольшим количеством мероприятий на неделе, чтобы уделить это время личным проектам. Вот почему я так долго делаю Pixel Measurement 😀. Стараюсь организовать все так, чтобы все самое интересное, что ты видишь и слышишь, было написанием кода для своего проекта. Или созданием собственного подкаста. В Петербурге же у меня максимально социальная жизнь, куча друзей. Мне кажется, я никогда больше не общаюсь с таким количеством людей, как там) Распределение Россия/заграница у меня примерно 50%.

Вот так вот, постоянно балансируя, я стремлюсь жить жизнь, которую хочу. И успевать все то, что для меня важно. Одна подруга сказала мне, что я вдохновляю ее мыслить широко и свободно. Так и есть, никаких границ в моей голове не существует. Возможно, вдохновлю и вас.
Вы когда-нибудь делали сайт на конструкторах? Я — да. Вот, что получилось. Создавала сайт для своего расширения: обязательное требование для монетизации. Мои мысли: твою мать, вообще не оптимально, почему я не могу задать этой кнопке line-height или поменять размер шрифта при конкретном разрешении?! В итоге пришлось работать с тем, что есть.

Честно: оптимальнее было бы скачать красивый шаблон сайта на https://www.templatemonster.com/, отредактировать CSS и HTML и загрузить на хостинг. Но, нет, я пошла сложным путём. Понадеявшись, что AI constructor от domain.com способен на многое. Зря 🥲. Он даже не дает сделать другие отступы в мобильной версии.

Короче, создавать сайты на конструкторах, особенно на domain.com, — та еще запара. Ты постоянно обходишь ограничения из-за того, что разработчики что-то не предусмотрели. Мне вот, например, пришлось вставить кнопку картинкой (КАРТИНКОЙ, понимаете 🤯), только потому, что я не могла отрегулировать ее высоту. Уменьшить размер шрифта и задать гигантские неоптимальные отступы только для того, чтобы один текст не наезжал на другой в мобильной версии. В итоге, при каждом разрешении сайт смотрится не оптимально. Но, хотя бы, читаемо 👍.

Почему бы не перейти на хостинг? Да потому что я за этот онлайн конструктор уже заплатила) Целых 20$ за год, в отличие от хостинга в разы дороже. Продление, кстати, стоит 200$ за год. Кто делает такие тарифы?)

Короче, этот мой пост — ода моим мучениям с онлайн-конструктором domain.com. Не берите его там. И домен тоже не покупайте: продление стоит в 3-4 раза дороже первоначальной покупке.

Ну а то, что удалось выжать из этого редактора, кряхтя и парясь, вы можете посмотреть здесь.
Вы еще помните про мобильное приложение?) Я — да. Как сейчас помню, более года назад, в середине марта 2024 года, я приступила к разработке мобильного приложения на Flutter, о котором ничего не знала до.

Зачем мне это было нужно? Во-первых, мне обещали хорошие деньги. Люди, предложившие мне проект на Flutter, обещали платить мне такую же ставку в час, какую я получаю за работу на Frontend. Да, мне, человеку без опыта во Flutter. Им было важно, чтобы за проект взялась именно я.

Во-вторых, я была весьма не прочь получить новый опыт. Как вы уже, должно быть, заметили, на рынке идет существенное сокращение количество вакансий на Frontend. Если смотреть рынок РФ, практически все они требуют работу с территории России. А зарубежные компании, наоборот, работать из РФ не разрешают. Меня не устраивает ни тот, ни другой сценарий. На Flutter таких ограничений нет.

В-третьих, во всех самоучителях сказано, что Flutter — весьма простой фремворк. Так и есть, особенно если переходишь на него с фронта. Ничего такого сверхъестественного и высокоинтеллектуального, как, например, есть в machine learning, я в нем не нашла. Да, есть нюансы с билдами и публикацией приложения, которые просто выбивают меня из колеи. Но… на любой работе свои издержки.

Таким образом, взвесив все «за», я не нашла ничего «против». Разве что уменьшение свободного времени и откладывание все той же монетизации в Pixel Measurement. Который, на момент получения предложения о Flutter имел всего 3 000 пользователей.

Первые две недели при почасовой работе ушли у меня на просмотр самоучителей и сбор тестовых проектов. Вторые две — на экран логина, который создавала по аналогии с самоучителем. Дальше двинулась сама, и за 2-3 месяца осилила верстку, спрашивая советов у ChatGPT. Потом был перерыв, и с конца лета приступила к прикручиванию апишки. К началу декабря все было готово. Еще 2 месяца ушло на фиксы багов. И, вот, конец февраля, мы готовы к публикации 🎉.

Чтоб вы не думали, что я такая тормознутая и целый год разрабатывала приложение интернет-магазина. Весь прошлый год у меня была регулярная стандартная работа, почасовой фронтовой проект, постоянные путешествия и переезды и еще этот проект на Flutter.

В конце февраля мы приступили к публикации приложений на Android и iOS, и служба поддержки Apple вынесла мне все мозги 🤯. Нужно было создать privacy policy, каждые 2 дня отвечать на ряд их бизнес-вопросов, внедрить дополнительный функционал, без которого они ничего не апрувили и пофиксить баг, который никто кроме них не нашёл. Чтобы вы понимали: все билды мы тестируем на телефонах, у нас есть ряд добровольных тестировщиков. НО: в момент публикации выходила iOS 18.4 (которая была Beta), и они нашли баг на ней, на iPad Air, хотя наша версия полностью работоспособна на iOS 18.3. Пришлось в экстренном порядке разбираться, как тестировать на Beta-версиях iOS и скачивать новые эмуляторы на 8 Гб в при отсутствии интернета (да, в эти дни всему дому вырубили wi-fi на 3 дня 😀).

Как бы то ни было, годовые усилия не прошли даром, и разработанное мобильное приложение было, finally, опубликовано. Посмотреть его можно здесь на iOS и тут на Android.

А ко мне в копилку по праву добавилось звание Flutter developer. Иначе какой ты разработчик, если не можешь показать ни одного релиза своего продукта)
Я разрабатывала год мобильное приложение с нуля, не зная ничего о Flutter изначально. Я делала собственное расширение для Google Chrome полтора года, даже не ожидая, что оно может набрать 80 000 пользователей. И вот, что я поняла…

То, что ты делаешь — это всегда путь. И на нем обязательно встретятся трудности. Легко говорить друзьям: “Я выложила свое первое мобильное приложение на Flutter в Apple Store и Google Play, можете потыкать”. Это выглядит как результат, который легко дался. Но никто кроме тебя не знает, сколько ночей ты провела, пытаясь разобраться, почему не собирается тот или иной build. Никто не знает, сколько раз мне приходилось все сносить и заново ставить, чтобы запустить версию на эмуляторе после долгого перерыва. Или какое кол-во каверзных вопросов задала мне служба поддержки Apple, когда я впервые публиковала мобильное приложение. Всего и не припомнишь.

Эти трудности сопровождали меня постоянно. Мобильное приложение на Flutter не было простым проектом. Да, нюансы верстки я осилила моментально. Прикручивание логики тоже не было сложным. Но все, что связано с build, публикацией, симуляторами выносило мне мозг как только я за это бралась. А не браться было невозможно: заказчику нужен конечный результат, и ему наплевать, что именно там не работает.

Даже сейчас, когда мобильное приложение уже выложено, эта борьба не окончена. Я сталкиваюсь с новыми нюансами: то, как работало на эмуляторе, не работает на реальном телефоне. И мне приходится сражаться дальше.

Аналогично с Pixel Measurement. Когда-нибудь (надеюсь, скоро) я напишу: “Я заработала первые 2000$ пассивного дохода на своем проекте!”. Меня прокомментируют: “Круто! Повезло!”. Но мало кто поинтересуется, что именно за этим заработком стояло. Как именно я регистрировала 10 почтовых ящиков, чтобы оформить хотя бы один developer аккаунт Chrome Web Store, как именно я вычищала ключевые слова из описания, забирая время у своего отпуска, почему я опубликовала это расширение пьяная из поезда в Осаку, какой дополнительный функционал я разрабатывала полгода и почему 10 раз я переписывала код для монетизации. Люди будут видеть лишь конечный результат.

Однако, вместо бессонных ночей с Flutter был у меня и другой вариант. Гораздо более простой и логичный, как покажется многим. Зачем изучать новый язык программирования, когда можно просто пойти в ВТБ, куда тебя уже берут по умолчанию?

К марту прошлого года я уже более 7 лет работала на проекте банка Открытие. Из-за присоединения группы Открытия к ВТБ нас сокращали. С каждым проводили собеседование, и по его результатам назначали на проект ВТБ. По умолчанию, даже готовиться к собесу не надо. Моя мотивация была настолько низкой, что я ответила на 3 вопроса из 10. И все равно меня взяли. Я могла сидеть в России без возможности работы из-за границы, ездить пару раз в году в отпуск, делать более-менее сносные задачи и постепенно становится злой, как все мои коллеги. Но есть один нюанс: пойди я по этому пути, я бы себе этого никогда не простила. Работать на проекте ВТБ после всего того, что он сделал с Открытием, было ниже моего достоинства. Не говоря уже об остальном диссонансе.

Именно поэтому, как только мне свалилось предложение о Flutter, я за него зацепилась. Да, я пошла изучать новый язык программирования, чтобы не быть в ВТБ. Мне было все равно, что ждет меня на пути мобильной разработки. Я знала, что мне будет не просто. Но одно дело сражаться за то, что тебе действительно важно. И совсем другое — воевать с ветряными мельницами в той среде, где ты не должен находиться. В последнем случае на битву просто не хватит сил.
Оглядываясь сейчас ретроперспективно, я понимаю, что мне даже страшно представить, каким человеком была бы я сейчас, согласись я на предложение от ВТБ. Грустным, злым, задавленным, без амбиций и блеска в глазах. Но я не только смогла отказаться от казавшего на первый взгляд идеального предложения (которое само идет тебе в руки, работа гарантирована, родители советуют соглашаться, некоторые друзья не видят в этом предложении ничего плохого); я зацепилась за ниточку и прыгнула выше своей головы в сторону тех перспектив, которые мне были нужны. И я допрыгнула до нужной мне отметки.

О чем этот пост? Я хочу донести до вас лишь одну мысль: сложно будет всегда. Неважно, выбираете вы один путь или другой. Вам придется бороться с трудностями, преодолевать себя, и усилий на любом из путей вы затратите много. Продажники говорят, что одинаково сложно продавать товар как на 10 000 руб., так и на 100 000 руб. Так какой смысл продавать товар на 10 000 руб., если за те же усилия можно впарить и за 100 000?

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

Внедрила монетизацию в Pixel Measurement 🎉. Не прошло и полтора месяца)

«Почему так долго?», — спросите вы. Во-первых, для монетизации я использовала сторонний модуль, который регистрирует оплаты Stripe/Paddle, создает личный кабинет пользователя, берет на себя все юридические вопросы. Моя задача заключалась лишь в интеграции с ним. И как только я полностью закончила интегрироваться с версией 1.4, ребята выпустили версию 2.0. Мне потребовалось начинать весь процесс заново 🤷‍♀️.

Во-вторых, в версии 2.0 были критичные для меня ошибки. Да, настолько критичные, что я не могла выпускать расширение. Не работала кнопка signOut (если пользователь захочет авторизоваться под другим аккаунтом) и запрос на получение инфы о пользователе вызывался только один раз. Причем, такие проблемы были только у меня в связи с особенностями моего расширения. Пришлось писать ребятам-разработчикам из самого paywall и ждать, пока поправят.

В-третьих, поправили все в максимально неудобное для меня время 🤪. Когда я была с ног до головы погружена в проект на Flutter и ничего, кроме него, в своей жизни не видела. Пришлось ждать, когда освобожусь.

В-четвертых, помимо самостоятельного тестирования перед публикацией надо получить апрув от самих разработчиков paywall, который я встраиваю. И пройти все их проверки. На это тоже потребовалось время. И вот, 30 апреля, я здесь. Запускаю монетизацию прямо перед майскими 🚀.

Но не спешите поздравлять меня раньше времени: логика монетизации устроена таким образом, что деньги с пользователей я буду брать только после окончания trial-периода, который идет 7 дней. Таким образом, мне надо подождать, пока Google апрувнит мое расширение (5 дней уже думает), подождать еще 7 дней — и наблюдать первые оплаты. В дальнейшем задача будет сводиться к максимизации прибыли: буду экспериментировать с ценой подписки и временем триала, пытаясь выжать для себя максимум.

Судя по рассказам других, у меня есть оценка, сколько денег должно быть в месяц. Пожелайте мне удачи 🍀.
Ошибка, которая стоила мне 50% пользователей.

Есть у меня еще одно расширение, Download Svg называется. Результат средний: за год набрало 6 000 пользователей. Только вот могло быть 12 000. Причина — 50% удалений.

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

Полезно собирать обратную связь от пользователей при удалении расширения. Да, у меня есть Google-форма с вопросом «почему вы удалили расширение». Ее видит пользователь, когда решает закончить работу со мной. В ней же я и получала обратную связь «невозможно закрыть бесящую кнопку справа». Получала — и ничего не делала: другие дела, сами понимаете 🤷‍♀️.

Какого же было мое удивление и счастье, когда год спустя я пофиксила этот баг за одну минуту. Код исправлений вы можете наблюдать ниже. Все надо делать вовремя, ребята 😁.
Совсем недавно я вернулась из Тайланда, где работала и отдыхала. И хочу поделиться своими наблюдениями. Спойлер: Бали мне зашел гораздо больше.

На первый взгляд, все в Тайланде хорошо в начале мая. Бесконечные пляжи и море, на котором никого нет, низкие цены на аренду в несезон, доступная еда, умопомрачительные виды, доброжелательные местные, которые даже не настаивают на чаевых, никаких пробок. Но есть одно жирное НО, ставшее до меня критичным: на Пхукете нет практически никаких комьюнити и мероприятий.

Приезжая на новое место надолго, я всегда ищу, где пообщаться с новыми людьми по своим интересам. У меня для этого разработана мноуровневая схема. Сначала смотрим мероприятия на meetup.com, потом вступаем во все русские чаты Telegram конкретного места, затем подписываемся на все Facebook-группы для русских и иностранных экспатов, после ищем в Гугле по ключевым словам, затем подписываемся на events-аккаунты по этой локации в Instagram (он, кстати, хорошо рекомендует другие согласно вашим интересам) и, вишенка на торте, ищем все коворкинги, заходим на их сайты и смотрим, какие мероприятия у них есть. После все анализируем, добавляя сюда афиши оффлайн/рекомендации знакомых и другие случайным образом открытые тусовки. Да, это мы только поискали мероприятия, достопримечательности ищутся отдельно 😀. Так вот, проделав все вышеперечисленное и убрав из списка клубные тусовки и ночную жизнь, удалось выдавить лишь парочку. Даже в забытой болгарской деревне Bansko, о которой мало кто слышал, в разы больше, скажу я вам.

Что, в свою очередь, ждало меня на Бали, когда я там была. Здесь говорят о стартапах и бизнес идеях на английском, там проходит веган-фест, здесь открывается женский клуб на русском по прокачке женской энергии, там проходят квизы (да почти каждый день), здесь художник выставляет свои картины и устраивает презентацию по этому поводу, там все знакомятся на нетворкинг-встрече и играют в Денежный поток, тут вечеринка по йоге и медитации, а еще концерты на крыше, ежедневные мероприятия от коворкингов и много-много чего еще. Каждый вечер у меня был выбор из 5-6 событий, куда сегодня пойти. Вот так и надо жить 👍. В Тайланде же, если хочешь держаться подальше от разврата, молча идёшь вечером в отель или кафешку.

Короче, вердикт такой: съездить покататься по Пхукету, покайфовать в море, тратя не очень много денег (по сравнению с Европой), посетить Bounty-острова и посмотреть умопомрачительные закаты, заложив на это пару недель, — 👍. Но оставаться и жить на долгий срок я бы тут не стала. Даже на 8-ой день, постоянно работая, я умудрилась заскучать. За более активным образом жизни на Бали. Вот там бы я с легкостью провела месяца 3. Правда, говорят, что ситуация с пробками там существенно ухудшилась, чем два года назад ☹️.
В повседневной разработке я периодически использую ChatGPT. Новый язык программирования Flutter я вообще выучила с помощью него. Если говорить про Frontend-задачи, то в основном мне он помогает для простых нудных вещей типа маски телефона и идей, как можно сделать тот или иной эффект (например, создать parallax вручную). Для Frontend-разработки я использую Webstorm, при этом интеллектуальный помощник там я отключила. Уж очень тупым он мне показался)

При этом у меня есть знакомый, который 3 месяца писал код с помощью AI-редактора Cursor. Лично я в эту тему не залезала и сомневаюсь в эффективности подобных инструментов (мне привычнее писать код вручную по своим паттернам, чем идти на поводу у AI-редакторов), но знакомый решил провести серию вебинаров, чтобы здраво разложить по полочкам реальность AI-редакторов. Все на примере реального использования для рабочих проектов. Я заинтересовалась)

Первый вебинар сегодня, в 16.00, МСК, абсолютно бесплатно. Запись обещают. Я буду) Присоединяться тут.
Как там дела с монетизацией?)

Напомню, что в конце апреля я запустила монетизацию в своём проекте Pixel Measurement. Только на новых пользователей и только из Tier 1 стран (США, ЕС, Австралия). Это значит, что в день paywall по моей оценке должны видеть 35 человек, итого 1575 за 1.5 месяца. Оплатить из них должны были минимум 2 в день (конверсия 5%) со среднем чеком в 36$. Итого за 1.5 месяца я должна была заработать 2 700$ без учета налогов. Сколько заработала я? 77$.

Почему так? Во-первых, paywall вместо 1500 раз увидели всего 700. Во-вторых, вместо ожидаемой конверсии в 5% реальная составила 0.001%. И это мне повезло, что пользователь взял lifetime-подписку за 72$! Могла бы заработать за месячную 5$ 🥲.

Почему такая маленькая конверсия в платящего пользователя? Мое основное предположение в том, что я таргетируюсь не на тех. У меня стоит временной trial для новых пользователей, предложение оплатить всплывает через 5 суток. Возможно (повторюсь, тут никто ничего не знает наверняка), пользователи используют мое расширение не каждый день, а раз в неделю. Тогда они попользовались им сегодня, не успели привыкнуть, открыли через неделю — видят paywall и охреневают 😱. Тут же удаляют расширение и оставляют негативные отзывы, говоря, что никто не предупреждал, что оно — платное.

Поэтому сейчас я попробую другую систему. Trial будет не по времени, а по количеству измерений моей линейкой — ключевым действиям пользователя. И снижу цену. Посмотрим, как пойдет.
И снова про монетизацию. Итак, к какому выводу я пришла. Напомню, конверсия в оплаты у меня равна всего 0.001%.

Я думаю, что таргетируюсь не на тех пользователей или не в тот момент времени. У меня стоит триал на 5 суток, и, видимо, он не попадает в точку. Всего я вижу 2 сценария продаж.

1. Продавать в первый сеанс знакомства пользователя с моим приложением, на «ВАУ»-эффекте. Человек ставит мое расширение, тыкается в нем, видит, что все круто, и в этот момент всплывает сообщение, что, вообще-то, приложение платное. Пользователь думает: «ок, оно превзошло мои ожидания, оплачу!». Согласитесь, вы и сами что-либо так покупали, когда вам расписали, как все круто. Например, попадались на зазывал на лодку на берегу моря.

2. Продавать в тот момент, когда пользователь привык к моему приложению и не хочет с него слезать. Пример: ChatGPT. Сначала все бесплатно с ограничениями, тебя они бесят, ты оплачиваешь подписку, а потом просто не хочешь возвращаться назад. Все равно используешь в ежедневной работе. Но здесь важно точно определить, когда именно у пользователя возникает привыкание и показать ему paywall в этот момент времени. Из минусов: первой оплаты придётся ждать долго, привыкание происходит не быстро.

Я сейчас решила пойти по второму сценарию. Но для этого мне не хватает статистики. Поэтому решила обложить все расширение Google Analytics, чтобы уже позднее проанализировать, как часто они открывают расширение, куда именно нажимают в интерфейсе, каким функционалом пользуются и т.д. Монетизацию стоит делать именно на ключевой функционал. Готова рассмотреть и подписку в стиле freemium (часть действий бесплатно, часть — доступно в платной Pro-версии). Говорят, это снижает конверсию, но что может быть хуже текущей в 0.001% 😀?

Конечно, если статистика покажет, что пользователь заходит в расширение 1 раз в месяц, тут уже ничего не поможет)
Недавно мне попалось видео «10 ошибок, которые я совершила с 20 до 30 лет». А еще совсем недавно мне стукнуло 34. Поэтому решила сформировать свою версию советов себе самой с 20 до 34 лет. Вдруг, и вам будет полезно)

1. Не бояться идти на переговоры, если условия контракта стали вдруг невыгодными. И не действовать в ущерб себе только потому, чтобы вы кому-то что-то пообещали.

Сколько раз в жизни в жизни у меня были ситуации: договариваешься о работе над проектом на средних для себя условиях, оговариваешь сроки, стремясь порадовать клиента и быть молодцом, переоцениваешь себя, а потом оказывается, что работы в разы больше и ты там что-то не предусмотрел. И вместо того, чтобы честно сказать клиенту, как оно есть (как делают остальные) ты работаешь ночами в ущерб себе, иногда стоимость доходит до 60 руб в час, лишь бы все доделать в сроки, который ты обговорил 3 месяца назад. Да, в результате тебя считают очень ответственным исполнителем и хотят работать дальше. Только вот чрезмерно ограниченное время твоей жизни тратится на абсолютно пустые вещи даже без достойной денежной компенсации. Мне кажется, если сложить все невыгодные проекты в часах, на них я убила года полтора своей жизни.

2. Не слушать других людей и не думать, что кто-то знает тебя лучше, чем ты сама.

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

Хотела дописать сюда еще несколько пунктов, но поняла, что не узнав все опытным путем, я бы к ним не пришла). И вообще пунктов, за что я сама себе говорю “спасибо!” у меня гораздо больше. В целом, у меня ощущение, что я все делала правильно (за исключением двух выше). Да, какие-то решения, пока я познавала себя, заводили меня в тупики. Но без них бы я не пришла к точному понимаю самой себя. Единственное, пожалуй, что стоит добавить, это быстрее принимать решения. Какая разница, какое именно оно будет, ведь на ним все равно последует тот или иной опыт с его новым выбором и новыми решениями. И гораздо интереснее прожить жизнь, в которой у тебя было много развилок, много решений и разного опыта, чем ту, в которой ты 10 лет сомневался по поводу одного и так и не успел пройти дальше. Как было однажды сказано, и мне откликнулось:

I’m always telling myself that when I am worried to do something. It doesn’t matter if my life is hard or not; it is passing. Everything is passing – good days, bad days, challenges, all difficulties. But I know that I have learned a lot of things from difficulties, and I’m now stronger when I compare myself with my past.

What will I lose? I am losing my life with every passing second.

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

Я решила принять участие в конкурсе блогов Telegram. Надеюсь выиграть) Следить за процессом и другими участниками можно здесь @tg_contest_main.

А теперь вопрос к вам, уважаемые знатоки, о чем вам было бы интереснее прочитать в этом блоге: больше личного или экспертно контента?
Ставьте реакцию банана 🍌, если личного, и реакцию кита 🐳, если экспертного. Мне-то всегда есть, чем поделиться)