newsmode
search
Меню
arrow_back Назад

How Prototyping Can Help You to Get Buy-In

auto_awesomeКраткое саммари

Юджин Ян объясняет, почему демонстрация простого прототипа часто убеждает руководство там, где не справляются продуманные предложения с исследованиями и данными. Прототипы делают идею конкретнее, служат доказательством технологии и упрощают сбор обратной связи, но не отвечают на вопрос «зачем это строить», поэтому проект всё равно стоит начинать с one-pager'а. В прошлой роли автору отказали в развитии компьютерного зрения, но он в свободное время собрал на Theano реализацию ResNet с transfer learning для классификации изображений и поиск по эмбеддингам с косинусной близостью; демо зажгло стейкхолдеров, и в 2018 году поиск по картинкам вышел в приложении (Lazada). Он советует строить прототипы на Python (Flask, FastAPI, Streamlit, Docker, EC2 spot) и делится уроком: первый классификатор, доступный лишь через curl, никто не использовал, пока он не добавил простой GUI. Главный вывод: каким бы хорошим ни был ваш код, нетехнические пользователи не попробуют его без удобного графического интерфейса, поэтому имеет смысл потратить неделю-две на прототип в начале проекта.

How Prototyping Can Help You to Get Buy-In

Как прототипирование помогает заручиться поддержкой

[ productivity ] · 7 min read

[ productivity ] · 7 мин чтения

Sometimes, well-thought-out proposals backed by extensive research and data will fail to convince decision-makers. But a demo of a simple prototype will get them excited and ready to commit. I’m surprised how often this happens.

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

While we should still start projects with a one-pager to clarify, socialize, and get feedback on our ideas, if we’re not making headway, one option is to build and demo a prototype.

Хотя нам всё же стоит начинать проекты с one-pager'а, чтобы прояснить идеи, поделиться ими и получить отзывы, — если дело не движется, один из вариантов — собрать и показать прототип.

Why prototypes work: They’re more concrete

Почему прототипы работают: они конкретнее

Prototypes make our vision more accessible. For non-technical laymen, ideas and designs can be too abstract. It’s hard to imagine the end-user experience from a document. In contrast, prototypes—especially those with a graphical user interface (GUI)—make it easier to understand the deliverable’s look and feel. By helping others understand our ideas better, we increase our chances of getting buy-in.

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

Prototypes also serve as proof of technology. What we claim to do with data and machine learning can be a stretch. (That said, the reverse, where we’re expected to do magic with a 500-row excel, also happens.) While trying to get buy-in, I’m occasionally met with skepticism—“Is that really doable?” By building a prototype, the proposal becomes real and achievable, making it easier to convince decision-makers.

Прототипы также служат доказательством технологии. То, что мы обещаем сделать с помощью данных и машинного обучения, может звучать как преувеличение. (Впрочем, бывает и обратное, когда от нас ждут чуда из Excel-таблицы на 500 строк.) Пытаясь заручиться поддержкой, я порой сталкиваюсь со скепсисом: «А это правда выполнимо?» Построив прототип, мы делаем предложение реальным и достижимым, и убедить тех, кто принимает решения, становится проще.

“It always seems impossible until it is done.” – Nelson Mandela

«Всё кажется невозможным, пока не будет сделано». — Нельсон Мандела

Last, prototypes make it easier to get feedback. Instead of attending a presentation or reading a proposal, people can interact with our app. They can test it with their data (e.g., product images, user interactions) and see the outcomes. By letting them interact with a prototype of our proposed idea, we increase our chances of getting feedback.

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

But prototypes don’t explain “Why”

Но прототипы не объясняют «зачем»

While prototypes can show “What does it look like?” and “How will it work?”, they don’t explain “Why should we build it?” Thus, if the “why” for the project is still unclear, we’re better off writing a one-pager to clarify the problem, intent, and success criteria. Else, it doesn’t matter how well our prototype works if it doesn’t solve the right problem.

Хотя прототипы могут показать «Как это выглядит?» и «Как это будет работать?», они не объясняют «Зачем нам это строить?» Поэтому, если «зачем» для проекта всё ещё неясно, нам лучше написать one-pager, чтобы прояснить проблему, замысел и критерии успеха. Иначе неважно, насколько хорошо работает наш прототип, если он не решает правильную проблему.

Also, depending on the scale of the project, a quick prototype may not be viable. Large scale projects (e.g., drone delivery, self-driving cars, in-house ML platform) will need significant resources and can’t be prototyped in a week or two. Getting a first prototype off the ground might require months, if not years.

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

How a prototype worked when a roadmap didn’t

Как прототип сработал там, где не сработала дорожная карта

In a previous role, I tried convincing stakeholders that our team should start working on computer vision. We had a massive catalog of product images and could use it to serve customers better. We would start with image classifiers to improve product categorization, before adapting them for image search and recommendation.

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

However, I failed to get buy-in. Some felt that our team lacked the expertise (read: “You won’t be able to do it”) and that it wasn’t a viable business opportunity.

Однако заручиться поддержкой мне не удалось. Некоторые считали, что нашей команде не хватает экспертизы (читай: «У вас не получится»), и что это нежизнеспособная бизнес-возможность.

I was disappointed but undeterred. If I couldn’t build it at work, I would have to build it in my free time. Using image data scraped from Amazon, I hacked together a Theano implementation (it was a while back) of ResNet and applied transfer learning for image classification. To build image search, I used embeddings from the penultimate layer and calculated cosine similarity. This took months to learn and build but it worked decently.

Я был разочарован, но не отступил. Если я не мог построить это на работе, мне пришлось бы строить это в свободное время. Используя данные изображений, собранные с Amazon, я наспех собрал реализацию ResNet на Theano (это было давненько) и применил transfer learning для классификации изображений. Чтобы построить поиск по картинкам, я взял эмбеддинги из предпоследнего слоя и рассчитал косинусную близость. На то, чтобы освоить и собрать это, ушли месяцы, но работало оно прилично.

Demo of image classifier and image search on fashion products

Демо классификатора изображений и поиска по картинкам на товарах моды

The effort was well worth it. Stakeholders were clearly excited when I demo-ed the prototypes. In particular, they found image-based search & recommendation to be a compelling use case, especially for visual shopping (e.g., fashion, furniture, toys). (A big chunk of transactions came from fashion.) This kickstarted our effort to invest in GPU clusters and work on computer vision applications.

Усилия определённо окупились. Стейкхолдеры были явно воодушевлены, когда я показал прототипы. В частности, они сочли поиск и рекомендации на основе изображений убедительным сценарием использования, особенно для визуального шопинга (например, мода, мебель, игрушки). (Значительная доля транзакций приходилась на моду.) Это положило начало нашим инвестициям в GPU-кластеры и работе над приложениями компьютерного зрения.

Image search on toys and furniture

Поиск по картинкам для игрушек и мебели

In 2018, the image search feature went live on the app.

В 2018 году функция поиска по картинкам вышла в приложении.

Now customers can visually search for products via photos (source)

Теперь клиенты могут визуально искать товары по фотографиям (источник)

How to build a prototype now?

Как собрать прототип сейчас?

Many libraries make it easier to build and deploy machine learning prototypes in Python. For web application frameworks, Flask and Bottle are widely used while FastAPI is gaining popularity. I recently switched to FastAPI and like it very much. Here’s a great comparison for Flask users by Amit Chaudhary.

Множество библиотек упрощают создание и развёртывание прототипов машинного обучения на Python. Среди веб-фреймворков широко используются Flask и Bottle, а FastAPI набирает популярность. Я недавно перешёл на FastAPI и он мне очень нравится. Вот отличное сравнение для пользователей Flask от Amit Chaudhary.

To build a basic front-end, we can use a combination of Jinja templates and CSS, and perhaps a framework like Bootstrap. Streamlit is also a popular option. (I haven’t tried Streamlit though and would love to hear your experience with it.)

Чтобы собрать базовый фронтенд, можно использовать сочетание шаблонов Jinja и CSS, а возможно, и фреймворк вроде Bootstrap. Streamlit — тоже популярный вариант. (Правда, я не пробовал Streamlit и был бы рад услышать о вашем опыте с ним.)

To serve our prototype, we can use Docker to wrap and deploy it in a container. For cloud servers, I tend to use Amazon Elastic Compute Cloud (EC2) spot instances as they’re cheap. There are also options such as Heroku and Digital Ocean.

Чтобы развернуть наш прототип, можно использовать Docker — обернуть его и развернуть в контейнере. В качестве облачных серверов я обычно использую spot-инстансы Amazon Elastic Compute Cloud (EC2) spot instances, потому что они дешёвые. Есть также такие варианты, как Heroku и Digital Ocean.

Not sure how to get started? Here are a couple of additional resources:

Не знаете, с чего начать? Вот пара дополнительных ресурсов:

Learn from my mistake with an early prototype: curl

Учитесь на моей ошибке с ранним прототипом: curl

One of my first machine learning projects was a title-based product classifier. I was able to build a system that achieved 95% accuracy and was looking to get user feedback. Thus, I wrapped it in a Flask app and deployed it on our internal servers.

Одним из моих первых проектов по машинному обучению был классификатор товаров по названию. Мне удалось построить систему, достигшую 95% точности, и я хотел получить отзывы пользователей. Поэтому я обернул её в приложение на Flask и развернул на наших внутренних серверах.

To use the product classifier, all you had to do was to update the product title in the curl command below. It was as simple as it could get (or so I thought). After sharing the curl command and API specs with business and ops stakeholders, I eagerly monitored the logs for my first users.

Чтобы воспользоваться классификатором товаров, нужно было всего лишь подставить название товара в команду curl ниже. Проще не придумаешь (по крайней мере, я так думал). Поделившись командой curl и спецификацией API с бизнес- и операционными стейкхолдерами, я нетерпеливо следил за логами в ожидании первых пользователей.

curl -d '{"title":"title of product"}' -H "Content-Type: application/json" -X POST http://internal-url/categorize

curl -d '{"title":"title of product"}' -H "Content-Type: application/json" -X POST http://internal-url/categorize

No one used it 😞. I learned that most of my stakeholders were on windows machines and didn’t have easy access to curl. They were also unfamiliar with using the terminal or a tool like Postman—I had to simplify it further.

Никто им не воспользовался 😞. Я узнал, что большинство моих стейкхолдеров работали на машинах с Windows и не имели простого доступа к curl. Они также не были знакомы с работой в терминале или с инструментами вроде Postman — мне пришлось упростить ещё сильнее.

To get around this, I spent some time building a simple front-end (the predecessor to the image classifier and image search UI) and shared my prototype again. This time around, instead of a curl command, stakeholders received a web url.

Чтобы обойти это, я потратил время на создание простого фронтенда (предшественника интерфейса для классификатора и поиска по картинкам) и снова поделился прототипом. На этот раз вместо команды curl стейкхолдеры получили веб-ссылку.

A simple GUI for product classification

Простой GUI для классификации товаров

The result? My tiny two-thread Flask server crashed from too many concurrent requests.

Результат? Мой крошечный двухпоточный сервер на Flask рухнул от слишком большого числа одновременных запросов.

I learned a valuable lesson from this experience: No matter how good your tech is, non-technical users are unlikely to try unless it has a GUI and is easy to use. Since then, I’ve always taken the time to add a simple GUI to my prototypes.

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

Try building a prototype early in your next project

Попробуйте собрать прототип в начале следующего проекта

Are you having difficulty communicating your vision and getting buy-in? Why not spend a week or two building a prototype? You’ll be surprised how effective they can be.

Испытываете трудности с тем, чтобы донести своё видение и заручиться поддержкой? Почему бы не потратить неделю-другую на создание прототипа? Вы удивитесь, насколько эффективными они могут быть.

Do you have stories and experiences of prototypes helping to push a project forward? I would love to hear about them in the comments below.

Есть ли у вас истории и опыт того, как прототипы помогали продвинуть проект вперёд? Буду рад услышать о них в комментариях ниже.

Why do prototypes get buy-in when well-written proposals backed by data fail?

Because they are:
• More concrete than abstract ideas
• A proof of technology
• Interactive and easier to give feedback on

But when do they fail? How should we build one?👇https://t.co/OTERqwkj4L

— Eugene Yan (@eugeneyan) October 14, 2020

Почему прототипы получают поддержку там, где хорошо написанные предложения, подкреплённые данными, терпят неудачу? Потому что они:• Конкретнее абстрактных идей• Доказательство технологии• Интерактивны, и по ним проще дать обратную связьНо когда они не срабатывают? Как стоит собирать прототип?👇https://t.co/OTERqwkj4L— Eugene Yan (@eugeneyan) 14 октября 2020

Thanks to Yang Xinyi for reading drafts of this.

Спасибо Yang Xinyi за прочтение черновиков.

If you found this useful, please cite this write-up as:

Если этот материал оказался полезным, ссылайтесь на него так:

Yan, Ziyou. (Oct 2020). How Prototyping Can Help You to Get Buy-In. eugeneyan.com. https://eugeneyan.com/writing/prototyping-to-get-buy-in/.

Yan, Ziyou. (Oct 2020). How Prototyping Can Help You to Get Buy-In. eugeneyan.com. https://eugeneyan.com/writing/prototyping-to-get-buy-in/.

or

или

@article{yan2020prototype, title = {How Prototyping Can Help You to Get Buy-In}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2020}, month = {Oct}, url = {https://eugeneyan.com/writing/prototyping-to-get-buy-in/} }

@article{yan2020prototype, title = {How Prototyping Can Help You to Get Buy-In}, author = {Yan, Ziyou}, journal = {eugeneyan.com}, year = {2020}, month = {Oct}, url = {https://eugeneyan.com/writing/prototyping-to-get-buy-in/} }



Join 11,800+ readers getting updates on machine learning, RecSys, LLMs, and engineering.

Присоединяйтесь к 11 800+ читателям, получающим обновления о машинном обучении, RecSys, LLM и инженерии.