.и в продакшен – Telegram
.и в продакшен
2.48K subscribers
9 photos
3 videos
107 links
Фаундер-технарь - канал основателя www.jitbit.com, Alexander Yumashev @jitbit

Как быть CTO/CEO одновременно, как растить bootstrapped-стартапы и прочая айтишечка.
Download Telegram
Наткнулся на офигенскую штуку - внутренние гайдлайны Амазона по написанию текстов.

Больше всего понравилось - "если отвечаете на вопрос, есть только четыре варианта ответа:

1. Да
2. Нет
3. "Число"
4. Не знаю

ps. стянуто из блога Денни Шеридана, главного в AWS по стартапам
This media is not supported in your browser
VIEW IN TELEGRAM
Оффтопик: немного красоты вам в ленты.

PS. Особенно эпично выглядит на фоне пустых карантинных улиц (это в Корее)

PPS. Зануда внутри меня не мог не заметить, что девайс нормально выглядит всего с пары ракурсов (с них как раз снимают)

PPPS. и раз уж мы про видео, вот вдогонку демка нового Unreal Engine 5. От освещения сносит крышу, а от цифры "16 миллиардов полигонов только в этой комнате" старому геймеру хочется плакать.
https://www.youtube.com/watch?v=qC5KtatMcUw
​​Поговорим о SEO ("вжуххх" - это от канала отписалась четверть подписчиков)

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

Есть один ужасно важный фактор ранжирования в Гугле, о котором никто не говорит - связанность вашего бренда с той или иной нишей. Ренди Фишкин кричит об этом на каждом углу уже много лет, но его никто не слушает.

(между тем у гугла даже есть патент где это сказано открытым текстом)

Как проверить - возьмите топ-20 гугла по вашей теме и прогоните через любую TF/IDF тулзу (я пользуюсь вот этой, и кажется там даже можно один запрос в день бесплатно).

Это простой и быстрый способ понять, какие слова сам Гугл считает релевантными вашей нише.

Вбиваем, например, "project management software" (пример от балды, я только что переключился в соседнее окошко и вбил) - что мы наблюдаем? Помимо слов типа "gantt", "team", "project" и прочих очевидных штук мы видим что? Бинго - бренды. Я знал.

Бах - "Trello". Бах - "Basecamp". Бах - "Wrike".

У сайтов этих компаний может вообще не быть ссылок, но они всегда будут в топе. Потому, что когда люди обсуждают проджект-софт - они упоминают эти бренды.

Но как поднять упоминание своего бренда на нишевых страницах?

Однажды я познакомился с крутым эстонским чуваком по имени Andrus Purde и он взорвал мне мозг двумя предложениями. Он спросил:

-Вот топ 10 результатов гугла по твоей теме - на каком месте ты бы хотел быть?
-(я) нууу, топ 4.
-Неа. Правильный ответ - НА ВСЕХ

Топ
-10 результатов гугла по софтверным тематикам - это как правило маркетплейсы и аггрегаторы. Capterra, G2crowd, SoftwareSoggest и похожие... Ваш бренд должен быть листнут на всех этих страницах. И современный SEO - это не закупка ссылок на индусоблогах - это PPC на этих платформах, налаживание контактов с тамошними редакторами, а самое главное - кропотливый и аккуратный емейл-маркетинг на уже имеющихся клиентов, чтобы шли туда и оставляли отзывы.
​​(обещаю, что следующий пост будет про стартапы, а пока зажмурьтесь и промотайте, будет техническое нытье в стиле @DHH )

Почти все движки баз данных в каком-то виде умеют "полнотекстоый поиск", он же Full Text Search, он же Full Text Index.

Он есть в SQL Server, Postgres, Oracle и даже, простихосподи, MySQL.

Но на весь интернет слышны стоны "FTS какашка, юзайте Elastic!"

(иногда "юзайте Lucene/Solr!", или даже "юзайте Sphinx!")

И меня от этого страшно бомбит.

FTS - не какашка (ну, скажем так, не совсем какашка). Дело в подходе:

- Когда люди юзают "внешние" движки типа Эластика - они пишут дохрена кода, который собирает из нескольких таблиц красивое текстовое представление объекта, потом записывает объект в индекс, следит за обновлениями, удалениями; Потом народ настраивает всякие фильтры (чтобы, например, вычищать HTML- или PDF-разметку), поднимает поисковый кластер, ставит Kafka/RabbitMQ, чтобы к нему обращаться...

- А когда люди юзают full text - они кликают галочку "install" в настройках и ждут, что все заработает.

Само.

И оно, конечно, нихуя не работает.

Если к fts-поиску подойти так же нежно и задумчиво, как мы подходим к Эластику - он будет работать почти так же хорошо.

Например, тоже создавать текстовые представления объектов (через специальные индексированные вьюхи или даже computed-колонки), вычищать HTML (во всех движках есть фильтры), выносить вьюхи и индексы на отдельные диски (или даже отдельные сервера), стараться не использовать mixed-запросы - т.е. комбинацию полнотекстового поиска с обычным SQL; например, запрос SELECT x FROM y WHERE CONTAINS(blabla) AND MagicNumber = 42 гарантированно сведет планировщик с ума (quick & dirty решение - внести "MagicNumber42" прямо в индексируемый текст) - и всякий прочий тюнинг.

В общем, "Tools are never evil. Applications of those tools can be."

Не знаю, зачем я это написал, считайте это продолжением поста про SQL
Классный пост о том, как популярные в США приложения получили первую тысячу пользователей. Будет полезным для продактов, стартаперов и всех, кто занимается запуском и продвижением цифровых сервисов.

‎•‎ Создатель Dropbox запостил видео с презентацией сервиса на Hacker News.

•‎ Почтовое приложение Mailbox было доступно в закрытой бете; пользователи оставляли свой мейл, чтобы получить доступ. Через неделю после запуска в виртуальной очереди было 700 000 человек.

•‎ Первыми пользователями Instagram стали фотографы и дизайнеры с популярными аккаунтами в Twitter, которые помогли приложению стать вирусным.

•‎ Основатель почтового сервиса Supermail написал пост о закрытии другого почтового сервиса. Текст хорошо зашел, его перепостили медиа. Это принесло приложению 5000 новых пользователей.

Всего автор проанализировал опыт нескольких десятков популярных приложений и выделил 7 главных стратегий.

1. Go where your target users are, offline
2. Go where your target users are, online
3. Invite your friends
4. Create FOMO in order to drive word-of-mouth
5. Leverage influencers
6. Get press
7. Build a community pre-launch
...I see a society that is impossibly distracted by likes and selfies, smartphones, and similar technologies...

В топы HN вылез интересный пост программиста, который 10 лет сидел в тюрьме, после чего вышел - и не узнал окружающий мир.

Говорит, будто вылез из машины времени: технологии рванули вперед, а его профессиональные знания безнадежно устарели.

Такое с осужденными, в общем, не редкость, но интересен именно взгляд глазами программера.

Когда-то лидер хакерской группировки - сейчас он с трудом разобрался в Windows10, а дочке пришлось объяснять ему, что такое "хештег".

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

(впрочем, тут уже недалеко до другого синдрома - FOMO - он же "fear of missing out", хехе)

https://forklog.media/after-10-years-in-tech-isolation-im-now-outsider-to-things-i-once-had-mastered/
Мобильное приложение Hey.com угрожают выпилить из аппстора.

Если кто пропустил, Hey - это новый емейл-сервис от создателей Basecamp - Джейсона Фрида и Дэвида ХайнемайерХанснсн... (тьфу)... короче, от DHH. Пионеры SaaS, авторы отличных (без иронии) книг "Getting Real", "Rework", "Remote", создатели фреймворка "Ruby on Rails" и прочая, и прочая...

В общем, new take on email, "мы взорвем этот рынок" и все такое.

Если интересно, вот тут Джейсон выложил видос, где объясняет чем эта новая почта так замечательна

(мне, кстати, всегда нравился Basecamp/37signals... парни, конечно, очень эксцентричные и, честно говоря, успели затрахать своим скандальным нравом, но все равно молодцы)

Короче, ребята вдруг обнаружили, что Apple требует 30% комиссию от подписок.

Правила Apple четко говорят: ты НЕ можешь добавить в аппстор приложение с возможностью платной подписки, анлесс ты даешь возможность запустить подписку прямо с телефона (через аппстор-аккаунт, отдавая Эпплу 30%).

Так работают (вернее, работаЛИ) Нетфликс, Спотифай и тд и тп. Все они в свое время пытались с Эплом бодаться. Это закончилось ничем и в их приложениях теперь есть только кнопка "log in" - зарегистрироваться в сервисе из приложения нельзя.

В общем, у Джейсона и Дэвида опять бомбит, ибо в их приложении кнопки "создать аккаунт" как раз нет. И парни объявили очередной крестовый поход.

С другой стороны - плохого пиара не бывает. Вся моя англоязычная твиттер-лента теперь обсуждает только Hey.

Тем временем в EU в отношении Apple началось антимонопольное расследование как раз насчет этих диких комиссий. Плюс, авторы справедливо указывают, что в аппсторе есть десятки консьюмер-приложений с платными подписками: начиная с GSuite и заканчивая финтех-банками типа Revolut, где можно апгрейднуться на "премиум счет" в обход монополии.

В общем, достаем попкорн. Вдруг смогут забороть Apple всем миром?

За подробностями сюда: https://www.protocol.com/hey-email-app-store-rejection или сюда https://twitter.com/pierce/status/1273009825031413762 а также в твиттер к любому сотруднику Basecamp
Вещи, которые мы в Jitbit делаем неправильно:

1) Мы все еще получаем все ошибки на емейл

2) Мы все еще немного пишем на jQuery

3) У нас нет SPA и мы почти не юзаем фронтенд-фреймворки, все рендерится на сервере. Несколько самых сложных экранов написаны на Vue, но это все.

4) Мы работаем на Microsoft-стеке (asp.net mvc + винда + SQL Server). Парочка микросервисов на линухе (в основном питон и нода), но основное приложение - винда. Извините.

5) Мы, кажется, довольны (!) этим стеком. Ну правда. Сервера не выключаются годами.

6) Planned outage не считается

7) Мы почти не юзаем докер и я нихрена не знаю про кубер. Любую команду я сначала полчаса гуглю, потом еще полчаса пытаюсь врубиться.

8) Мы не юзаем TypeScript (меня толкают в бок коллеги) - ок, мы юзаем TypeScript, мобильное приложение на нем.

9) Мы не юзаем джиру, трелло, notion, confluence, чего там еще бывает... Короче, мы вообще ничего не юзаем кроме Слэка (меня опять толкают в бок) - ок мы еще юзаем Гитхаб

(я, конечно, немного передергиваю, ибо мы догфудим наш собственный продукт, но звучит красиво, не смог устоять)

10) Я ничего не знаю про аджайл, скрам, канбан, хуян и тп. Не, ну что-то знаю, конечно. Но не пользуюсь.

11) Мы не юзаем js-компиляторы. Babel, Webpack? - неа, не слышали. Что в текстовом редакторе - то у юзера в браузере. Что-то перепакуется и сожмется на CDN - и ладно.

11.1) Еще мы не бандлим скрипты в один большой комок, но это осознанно и специально.

12) мы пишем CSS на LESS. Кажется это не модно. Кажется, уже лет 10.

13) Мы всего год, как завели нормальный CI в облаке. Но я до сих пор не понимаю, зачем. За год там ни разу ничего не сломалось. Потому, что почти все билды и юниттесты мы все равно по-привычке гоняем локально.

14) я не знаю Go, Rust, Kotlin и Dart. Вообще, все новые и модные языки, которые "не C# и не JS" я знаю с большим трудом. Даже питон. (зато я отлично знаю плюсы)

15) у нас нет стейджинга, CD выкатывается сразу в прод.

16) Наши AWS-сервера - полудохлые инвалиды, мой ноутбук круче любого из них (хотя нас ломают, нагружают, аудитят, penetration-тестят, в том числе гос-структуры и даже военные - см. пункт 5)

17) я не помню как работает flexbox и каждый раз гуглю. В верстке встречается «float:right/left», а иногда даже - (о нет) - таблицы.

18) у нас нет продактов

19) когда-то вся команда фанатично сидела на маках и только на маках!!!!111 Сейчас остался только один - релизить мобильную приложуху. И Макса (который это делает) очень бесит доставать его из тумбочки.

20) У нас нет ничего «serverless» ни AWS-Лямбды, ни CloudFlare workers, ни аналогов.

21) один наш очень, очень важный микросервис написан на... PHP
(справедливости ради - это не наш выбор)

22) У нас еcть single point of failure - база данных. Поэтому мы фанатично бекапим ее 10-ю разными способами.

23) за 12 лет эти бекапы ни разу не пригодились (тьфу-тьфу-тьфу)
​​В прошлый раз было про "что мы делаем неправильно"

Я долго чесался, но теперь попробую написать, что мы делаем заебись

1) По "revenue per employee" мы обгоняем Амазон

2) По "profit per employee" мы обгоняем Microsoft.

(в принципе на этом можно остановиться, хехе)

3) Компании 15 лет. Основному продукту - 12.

3а) Мы умеем быстро пивотиться и тестировать гипотезы. Прежде, чем остановиться на основном продукте мы запустили 26 (двадцать шесть) других, менее успешных.

4) Компания прибыльна с первого месяца.

5) Без инвестиций.

6) И все потому, что мы делаем вещи "неправильно"

(вообще, нам, программистам давно пора уяснить, что наши сферические кони в вакууме слабо коррелируют с бизнес-результатом)

7) Мы исповедуем принципы "Five whys principle" и "Keep it simple, stupid". Про это я, наверно, напишу отдельный пост.

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

9) У нас почти нет расходов на инфраструктуру продукта. Наш месячный счет от AWS меньше 1к.

10) У нас дофига тестов. Фронт, бек, юниттесты, интеграционные тесты, апи-тесты, UI-тесты через Селениум, нагрузочные тесты, бенчмарк-тесты - you name it

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

12) Нет, мы не юзаем для этих скриптов внешний продукт, для которого надо полдня поднимать контейнер и писать к нему тонну конфиг-файлов fucked-up-syntax.yaml. Простой обычный код на хорошо знакомом языке, прямо внутри монолита.

12а) Кстати, да, монолит же.

13) Мы офигенно умеем в базы данных. Индексы, execution-планы, оптимизация стораджа, запросов, пошаговая материализация и тп.

14) Средний "time to prod" для фича-рекваста - 2 дня.

15) "Time to prod" для баг-репорта - меньше часа. Иногда вообще пару минут.

16) От написания кода до деплоя в прод - один клик одной кнопки. Все, как завещал великий Джоел. Если вы на этом месте занервничали - см п.10.

17) мы, кажется, хорошо врубаемся в асинхронный I/O-код на бекенде. Про это я, наверно, тоже напишу отдельный пост, ибо судя по собеседованиям, люди не очень понимают, чем же так охуенен async/await и его аналоги.

18) Мы любим и умеем оптимизировать производительность. Фронт, бек, код, базу, Lighthouse, что угодно. На днях переписывали неэффективные CSS-селекторы, layout-рендер ускорился с 50мс до 38мс... Нет текущих задач на сегодня? Иди посмотри, что можно ускорить.

19) Мы практикуем "all hands support": неважно, кто ты по должности - HR или нудный одмин - хотя бы раз в неделю иди и отвечай на тикеты от реальных клиентов. Даже если ты 10 раз директор с красивой визиткой и длинной важной подписью. Джефф Безос это делает, и ты делай. И эта традиция - лучшее лекарство от блестящих штук и сферических коней в головах программистов.

20) Мы работаем удаленно и все находимся в разных странах, но про это уже было. Да и кого этим удивишь в эпоху КОВИДа...

21) если кто-то сильно нафакапил (ну типа уронил прод) - он заказывает пиццу всем остальным сотрудникам

22) последний раз такая пицца приезжала года 4 назад.
​​"Сходи в настоящий отпуск" говорили они. "Очисти голову" говорили они. "Это очень полезно".

В общем, сходил. Парусный поход, Карелия, Онежское озеро. Полный оффлайн на две недели. Получилось невероятно круто (хотя въехать из ЕС в РФ во время пандемии оказалось отдельным квестом), но речь о другом.

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

Чтобы стратегично подумать про стартапы и бизнесы - это круто.

Чтобы повтыкать про маркетинг, ниши и продакт-менеджмент - тоже.

Даже для дизайна и UX будет полезно - вернуться и охереть "господи, какой же уродливый у нас продукт".

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

Я начинаю подозревать, что армия дауншифтеров, призывающих "бросить все и жить Настоящей Жизнью (tm) (с)", просто не смогли включиться обратно, хехе.

Так-то жить, конечно, надо в глухом лесу вдали от городов. Но с компом, оптоволокном и тремя мониторами))
​​Две моих любимых американских поговорки.

1) The best time to sell is when you don't need to sell.

(это про продажу бизнеса). Красиво и понятно. Держите ее в голове.

Но самая любимая - вторая:

2) You're the average of the 5 people you hang out with.

Окружайте себя крутыми людьми. Быть «самым тупым в комнате» очень полезно для здоровья.

Если смотреть назад, на график наших взлетов и факапов, самые большие скачки наш стартап делал тогда, когда мы с моим СТО - два дибила - вдруг случайно оказывались в гуще крутых людей. На удачной конференции, кампусе, инкубаторе и просто тусовках с теми, кто на голову выше

(и желательно делать это вне зоны комфорта: в незнакомой среде или вообще в чужой стране)

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

И тут мы приходим к третьей охуенной поговорке:

3) There's no silver bullet
Посраться с Apple из-за АппСтора, кажется, становится делом чести для любого уважающего себя разработчика. Сегодня там забанили WordPress (пожалуй, самая популярная в мире CMS), правда, по совсем уж идиотской причине:

iOS-приложение WP позволяет рулить не только своим локальным вордпрессом, но и тем вордпрессом, который хостится на wordpress.COM. А там можно купить себе, например, домен. За который - ну вы уже догадались - Эпл хочет свои 30%.

Коллизия интересна тем, что WordPress - ащета опенсорсный проект. Живущий на wordpress.ORG. А хостинг wordpress.COM - всего-лишь один из "клиентов" этого опенсорса и наверняка вообще другое юридическое лицо.

🍿🍿
​​"Чтобы произвести 1 килограмм говядины в воздух выбрасывается 60 килограмм CO₂"

Ребята из Our World In Data сделали невероятно интересный график - какие продукты дороже всего обходятся экологии. Люблю такие data-driven подходы в неожиданных местах.

Интересно, что у орехов отрицательный баланс дефорестации (обезлесения) потому, что сельхоз-поля превращаются в ореховые леса.

А еще интересно, что транспортные расходы в пищевой цепочке - мизерны. И в следующий раз, когда очередной эко-истерик закричит "спасай планету - ешь продукт локальных фермеров!" плюньте ему в глаза.

PS. кофе как-то слишком сильно вверху... пожалуй, закрою на это глаза )) прости меня, планета

PPS. оригинал тут
​​Есть две категории стартапов:

Vitamin-type product

и

Aspirin-type product

Vitamin
- это такое найс дополнение, ну типа SMM аналитика для маркетингового отдела. Или согласовалка календарей вроде Calendly. Если этот продукт внезапно убрать - бизнес покашляет, но не остановится.

Aspirin - это, например, git. Или джира. А также CRM, система управления проектами, тикетами, корпоративная почта или какая-нибудь узконаправленная система в предметной области (ну типа система бронирования для отеля)...

В общем, вы поняли. Если оно сломается - компания либо сильно замедлится, либо вообще встанет.

(Впервые термин, кажется придумал Кевин Вонг, VC-шник из долины, который сказал:

“We divide business plans into three categories: candy, vitamins, and painkillers. We throw away the candy. We look at vitamins. We really like painkillers. We especially like addictive painkillers!”
)

Продавайте, в общем, "аспирин", други мои.

PS. Третья категория - "candy" из цитаты выше - тоже может принести миллионы. За примерами смотрим Angry birds или Snapchat... Но (а) напрямую практически не монетизируется (б) сложно взлетает без инвестиций или кикстартера

PPS. На самом деле есть еще четвертая категория - Vaccine-type product - продукты-"вакцины", ценность которых сложно осознать в моменте, но которые сильно помогут в ситуации "все вот-вот ебнется". Примеры - бекап, мониторинг, логгинг и тд.

PPPS. Продукты могут переходить из одной группы в другую за время своей жизни и даже в процессе онбординга: сначала клиент запал на "candy" обложку, потом решил попробовать "витамин", а через полгода обнаружил, что жить без этого не может. И это идеальная воронка для идеального продукта.
​​Запускаете новый проект? Выберите что-то одно:

- либо интересный и инновационный тех-стек

- либо интересный и инновационный продукт

(мысль не моя, подслушано у кого-то на митапе microconf remote с Джейсоном Фридом, когда обсуждали, что "Hey" написан на Руби)

Подписываюсь обеими руками.

Есть даже такое понятие, "innovation budget". Он конечен. Вы и ваша команда потянете только "X" единиц новизны. Больше уже не влезет.

Стильный-модный-молодежный тэкстек быстрее набирает техдолг. И медленнее его решает. Ну и вообще:

If you want to play with a new tech stack, start a side project. Don't start a company.
Последние два месяца пытаемся продать наш софт в Microsoft. Это пиздец.

Ну как "пытаемся".... Это они пытаются купить, а мы от них отмахиваемся, ибо ДИКО ЛЕНЬ.

Знаете, как выглядит продажа софта в большую корпорацию?

(имена изменены хехе)

BigCorp: Здравствуйте, мы хотим купить on-premise версию вашего продукта

Я: Супер, вот ссылка на оплату

BigCorp: Мммммнет... Мы так не умеем. Мы хотим сложнее. Нарисуйте "проформу инвойс". Мы создадим purchase order. Потом пришлите нам вашу форму W9 Потом мы сделаем аудит...

Я: Воу-воу-воу, 5 сек

(ушел гуглить, "proforma invoice", "purchase order")

BigCorp (через неделю):
Ну че там?

Я: (блин, забыл про них) Так, ребята, вот вам другая ссылка, можно купить через этот ваш "purchase order" в два клика. Оплата банковским переводом, чеком, как хотите.

BigCorp: Секундочку....

BigCorp (другой сотрудник): Здравствуйте, мы хотим купить on-premise версию вашего продукта

Я: бляяяяя

BigCorp: Нам все же нужен W9 и W8-Ben, и потом... Нам надо сделать СЕКЬЮРИТИ АУДИТ вашего продукта. Это очень важный СЕКЬЮРИТИ АУДИТ.

Я: да ради бога, вот URL сервиса, трахайте его

BigCorp: Мммммнет.... Мы так не умеем. Мы хотим сложнее. Вот вам ссылка на нашу внутреннюю СИСТЕМУ ОБЩЕНИЯ С ПОСТАВЩИКАМИ. Там надо заполнить опросник на 18 экранов....

Я: штобля?!

Наш CTO в Слэке: Аахаха, я это говно уже заполнял.

Я (в Слэке): как это "уже заполнял"?

CTO (в Слэке): да ты че, они у нас уже три раза этот продукт покупали

Я: дорогой BigCorp, схуяли (зачеркнуто) вы ведь уже наш клиент! Мы все заполняли, вот емейл "Майкл-Из-Другого-Отдела(собака)бигкорп" выясняйте с ним.

BigCorp удаляется подумать

BigCorp (через неделю):
там был чутьчуть другой опросник. И мы нигде не можем найти Майкла. Короче, надо заполнить...

Я (неразборчиво)

BigCorp:
...зарегистрируйтесь в СИСТЕМЕ ОБЩЕНИЯ С ПОСТАВЩИКАМИ, потом поставьте на телефон наш СЕРТИФИЦИРОВАННЫЙ 2FA ГЕНЕРАТОР, потом....

Я (через неделю): я все заполнил.

BigCorp: Но вы в половине пунктов поставили прочерки!

Я: Да. Я устал.

BigCorp: ладно, хер с вами. Итак, мы начинаем наш СЕКЬЮРИТИ АУДИТ! Результаты придут в СИСТЕМУ ОБЩЕ...

Я: да я понял-понял

BigCorp (через неделю): вы прошли СЕКЬЮРИТИ АУДИТ. Мы выявили ДЫРУ которую надо устранить, сообщите сроки устранения, подпишите обязательство, потом предоставьте скриншоты, что все починено, потом...

Я: че за дыра?

BigCorp: Дыра очень, очень серьезная. Секундочку, где наш тестер....

Дармеш Кумар (тестер): У них нет хидера X-Frame-Options.

BigCorp: дада, у вас нету этого... как его... "хидера"...

CTO в Слэке: вот дибилы...

Я: вы же покупаете on-premise версию, все хидеры настройте на своем nginx или что у вас там. Мы специально все убрали, ибо on-prem клиенты юзают софт во все дыры (в том числе внутри iframe)

BigCorp: воу-воу-воу, почему по емейлу? Пишите ответ в СИСТЕМЕ ОБЩЕ...

Я (в Системе Общения): К сожалению в выбранный вами тарифный план не входит кастомная разработка и лигал-сопровождение, вот ссылка на план "Мега-Энтерпрайз" за 100к долларов в сутки, спасибо.
😁1
​​Charge more

Фаундеры очень часто недооценивают свои B2B-продукты. Недооценивают в буквальном смысле - ставят слишком низкую цену. Синдром самозванца в кубе.

"Не могу представить, что кто-то заплатит больше 5-ти баксов за это дерьмо, которое я накодил за две недели"

Мы за 15 лет много раз АБ-тестили цены и с удивлением обнаружили, что цена ВООБЩЕ не влияет на конверсии. Никак. От слова "совсем".

1) в B2B люди тратят чужие деньги. Собственникам компаний это трудно осмыслить, у них все деньги - свои.

2) Цена - это очень сильный (самый сильный) маркетинговый мессадж. Цена в 5 баксов говорит "я говно для нищебродов". Цена в 5 тыщ говорит "эй, парень, а ты уверен, что дорос?"
Позиционирование, битчезз.

3) При цене 5 баксов вы получаете армию школьников, которые будут звонить в саппорт раз в час, а при малейшем косяке оставлять гневные отзывы с 1/5 звезд. При цене в 5000 ваши клиенты спокойны и незаметны.

4) Для B2B-продукта цена не имеет привычной шкалы "дорого-дешево". Она имеет совсем другую шкалу:

"no approval - boss approval - boss's boss approval"

No approval
АКА "могу прям щас купить по корпоративной кредитке и мне ничего за это не будет"

Boss's approval AKA "всплывет отдельной строкой в бюджете, потребует пары встреч, но в целом ок"

Boss's boss approval АКА "чтобы это купить придется запустить ебанистический процесс согласования по всей компании"

В итоге имеем, что, например, во-втором случае покупателю придется пройти примерно одинаковый гемор - что за $100, что за $999. Поэтому лавируем между этими точками.

Ну и конечно, как тут обойтись без статьи Великого Джоела Всея Вселенной https://www.joelonsoftware.com/2004/12/15/camels-and-rubber-duckies/
EA сняли настолько эпичный промо-ролик для "Star Wars: Squadrons" , что на игру уже, в общем, плевать.

Можно я не буду ни во что играть, а просто посмотрю продолжение этого мини-фильма? https://youtu.be/f2VmOqjV_7Q

Ну и раз уж мы про СтарВорз - все же помнят, что через месяц выходит второй сезон "Mandalorian"? Йееей! https://youtu.be/eW7Twd85m2g (трейлер)
​​Немного tech porn...

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

Вопрос на засыпку: как долго работает вот такой код:

 for (i=0; i<1000000; i++)
thread.sleep(1);

Казалось бы ответ очевиден - миллион миллисекунд или около 15 минут. НЕТ.

Правильный ответ - больше 4 часов.

Wtf?! Cейчас я все объясню)

--

У нас на бекенде есть бекграунд-воркер - огромный цикл while, который бежит по массиву с миллионами элементов и делает с ними всякую арифметику.

Но мы ведь не хотим, чтобы во время этого цикла CPU встал колом на 100% и сервер затупил. Мы хотим, чтобы сервер продолжал жить и работать, "принял себя и стал счастливым".

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

(если меня читает хоть один геймдев, то на этом месте он унизительно захихикал и достал попкорн)

"Паузы", они же Delay(), они же Sleep() в большинстве операционных систем сделаны на таймерах. Разрешение этих таймеров - 12-15мс. Сделать паузу на 1 миллисекунду нельзя - будет минимум 15.

На большом массиве с миллионом элементов получаем 15ms * 1000000 / 1000 / 60 / 60 = 4.16 - больше четырех часов.

И придя утром на работу Петя видит что? Что его цикл все еще работает - медленно и печально. Джоб, который раньше занимал 7 минут (хоть и грузил проц), теперь работает, сука, полсуток. Но зато на релаксе.

Все сломалось и клиенты уже ставят тикеты в стиле "алебля?!"

(а наш геймдев злобно ржет в голос)

Потому что у них в геймдеве это случается примерно все время. И называется "tight loop/busy loop". И на таймеры полагаться нельзя.

Как быть, куды бечь?

1) Использовать multimedia-таймеры или таймеры из openGL/directX (оверкилл)

2) Троттлиться не на каждом шаге, а раз в N итераций (неэлегантно и костыль)

3) Забить на паузы и юзать волшебную инструкцию Thread.Yield - это такой "вежливый" способ поделиться ресурсами и сказать операционной системе "хей, я все еще занят, но если прям накипело - притормози меня и дай другим поработать" (это лучший способ).

Загрузка в 100% никуда не денется, но на нее будет плевать - все будет ворочаться, а сервер будет быстрым и отзывчивым.

Thread.Yield есть во всех языках:

C#: Thread.Yield

C++: std::this_thread::yield

Win32: SwitchToThread

Java: Thread.yield

Go: runtime.Gosched (кажется)

Visual Basic: DoEvents (шутка! ...хотя не совсем)

Python: time.sleep(0) (на винде time.sleep(0.0001) не спрашивайте, почему... потому что Питон...)

(кстати, не только Питон - довольно многие системные либы понимают, что "sleep(0)" это на самом деле "yield", включая дотнет, posix и winapi)

и тп.

И напоследок гениальный видос, который я уже кидал в наш уютный чатик. Это я вчера:
Самоизоляция like a boss