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

On commercializing nbdev – Hamel’s Blog - Hamel Husain

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

Хамель Хусейн объясняет, почему он решил не коммерциализировать nbdev — инновационный фреймворк для Python в духе грамотного и исследовательского программирования, над которым он работал в 2020–2023 годах вместе с Jeremy Howard и Wasim Lorgat. Главным препятствием для внедрения была сложность убедить других инженеров пользоваться nbdev: трение при онбординге и конфликты со стандартным стеком разработки (например, невозможность нормального код-ревью ноутбуков на GitHub без платного ReviewNB). Команда рассматривала идею «WordPress для разработчиков» — хостинговую платформу для nbdev, но взрыв генеративного ИИ (Stable Diffusion, а затем ChatGPT) сместил фокус fast.ai и самого автора в сторону консалтинга и работы с языковыми моделями. Хамель вынес ключевые уроки: любовь к проекту не равна готовности к коммерциализации, нужна сильная убеждённость хотя бы у одного человека, важно слушать интуицию, не бояться пивотов и строить собственный бренд. Он не исключает возвращения к nbdev и сейчас консультирует Posit, куда перешёл Wasim, по продукту и стратегии.

nbdev is a software development tool based on Jupyter that feels like its from the future.

A few friends have asked me why I decided not to commercialize nbdev, especially after putting lots of work into the project, including leaving my full-time job to work on it. So I thought I would write a short post to explain my reasoning.

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

Background

Предыстория

nbdev is an innovative software development framework for Python that embraces literate and exploratory programming. I worked on nbdev from 2020-2023 with Jeremy Howard and, later, Wasim Lorgat. I had the privilege and excitement of exploring the boundaries of developer tools and exploratory programming while working with very talented software engineers. In addition to creating a tool many people enjoyed, I enjoyed using nbdev for personal and professional projects.

nbdev — это новаторский фреймворк разработки ПО для Python, опирающийся на грамотное и исследовательское программирование. Я работал над nbdev с 2020 по 2023 год вместе с Jeremy Howard, а позднее и с Wasim Lorgat. Мне выпала честь и радость исследовать границы инструментов для разработчиков и исследовательского программирования, работая с очень талантливыми инженерами. Помимо создания инструмента, который многим пришёлся по душе, я и сам с удовольствием использовал nbdev в личных и рабочих проектах.

Opportunities

Возможности

While conducting product research, I interviewed many developers from different backgrounds to understand their pain points and needs. All developers I talked to struggled with one key challenge: it was difficult, if not impossible, to convince other engineers to use nbdev.

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

The following are the biggest reasons that prevented adoption:

Вот главные причины, мешавшие внедрению:

  • Friction in onboarding engineers. In many companies, there are often existing Python projects, and it can be detrimental to maintain different ways of doing things when a company has already settled upon one way that it has built processes and tools around.
  • Collisions with the rest of the software development stack: it was (and still is) a pain to version control notebooks in a way that’s conducive to collaboration. For practical purposes, you cannot perform code reviews of notebooks on GitHub without purchasing a tool called ReviewNB. So instead of convincing people to use nbdev, you have to convince them to use nbdev and ReviewNB. This makes the barrier to initial adoption considerably high - as procuring software in many organizations is a non-trivial process involving security review, compliance, legal and other stakeholders.
  • Трение при онбординге инженеров. Во многих компаниях уже существуют Python-проекты, и поддерживать разные способы работы бывает вредно, когда компания уже остановилась на одном подходе, вокруг которого выстроены процессы и инструменты. Конфликты с остальным стеком разработки: вести версионный контроль ноутбуков так, чтобы это было удобно для совместной работы, было (и до сих пор остаётся) мучением. На практике вы не можете проводить код-ревью ноутбуков на GitHub, не купив инструмент под названием ReviewNB. Поэтому вместо того чтобы убеждать людей пользоваться nbdev, приходится убеждать их пользоваться nbdev и ReviewNB. Это существенно повышает барьер для первоначального внедрения — ведь закупка ПО во многих организациях это нетривиальный процесс, в который вовлечены проверка безопасности, комплаенс, юристы и другие заинтересованные стороны.

    I viewed solving the above problems as potential opportunities for commercializing nbdev.

    Решение перечисленных выше проблем я рассматривал как потенциальные возможности для коммерциализации nbdev.

    Shifting Focus

    Смена фокуса

    Jeremy, Wasim, and I eventually settled on the idea of “WordPress for developers,” a hosted site allowing people to create and share nbdev projects. We thought this would be an excellent way to get people to try nbdev without installing anything. The idea was to narrow the audience to people interested in hosting projects on a platform that promoted exploration and sharing, similar to Glitch that was as easy to use and pragmatic as Wordpress.

    В конце концов Jeremy, Wasim и я остановились на идее «WordPress для разработчиков» — хостингового сайта, позволяющего людям создавать и делиться nbdev-проектами. Мы думали, что это отличный способ дать людям попробовать nbdev, ничего не устанавливая. Замысел состоял в том, чтобы сузить аудиторию до тех, кому интересно размещать проекты на платформе, поощряющей исследование и обмен, — похожей на Glitch, но такой же простой и практичной, как WordPress.

    Around the same time we began discussing hosted tools, the machine learning world experienced a tectonic shift due to the explosion of Generative AI, namely Stable Diffusion. fast.ai, the organization that created nbdev, was also changing its focus. fast.ai’s prime directive was to make deep learning accessible to as many people as possible, and generative AI was too important to ignore. Accordingly, Jeremy placed his full attention on a Stable Diffusion course.

    Примерно в то же время, когда мы начали обсуждать хостинговые инструменты, мир машинного обучения пережил тектонический сдвиг из-за взрыва генеративного ИИ, а именно Stable Diffusion. fast.ai, организация, создавшая nbdev, тоже меняла свой фокус. Главной задачей fast.ai было сделать глубокое обучение доступным как можно большему числу людей, и генеративный ИИ был слишком важен, чтобы его игнорировать. Соответственно, Jeremy сосредоточил всё своё внимание на курсе по Stable Diffusion.

    This pivot caused some turbulence as we navigated the different priorities of nbdev, generative AI research, and making money. We eventually settled on offering consulting services for everything related to fast.ai in the form of fast.ai partners, which would allow us to bootstrap ourselves financially and embrace the larger mission of fast.ai (including generative AI and research). Eventually, I found the splintered focus across so many areas to be unproductive1 and decided to step away from everything except consulting to regain my footing.

    Этот разворот вызвал некоторую турбулентность, пока мы балансировали между разными приоритетами: nbdev, исследованиями в области генеративного ИИ и зарабатыванием денег. В итоге мы остановились на предоставлении консалтинговых услуг по всему, что связано с fast.ai, в формате fast.ai partners — это позволило бы нам обеспечить себя финансово (bootstrap) и взять на себя более масштабную миссию fast.ai (включая генеративный ИИ и исследования). В конце концов я обнаружил, что раздробленный фокус по множеству направлений непродуктивен1, и решил отойти от всего, кроме консалтинга, чтобы вновь обрести опору.

    Soon after that, ChatGPT emerged onto the scene and caused further shifts in machine learning that were orders of magnitude larger than their text-to-image predecessors. Pretty soon, all of my clients were interested in language models, and I found myself working exclusively on operationalizing them (a skill that I have cultivated by working in machine learning for 20+ years). Additionally, LLMs profoundly changed the nature of software development, especially the kind of software development that nbdev was designed to support2. These factors and those discussed earlier suggested it was a good time to step away from nbdev and focus on other things.

    Вскоре после этого на сцену вышел ChatGPT и вызвал в машинном обучении ещё более масштабные сдвиги — на порядки больше, чем его предшественники в области text-to-image. Очень быстро все мои клиенты заинтересовались языковыми моделями, и я обнаружил, что занимаюсь исключительно их операционализацией (навык, который я оттачивал, работая в машинном обучении более 20 лет). Кроме того, LLM глубоко изменили саму природу разработки ПО, особенно того рода разработки, для поддержки которой и был задуман nbdev2. Эти факторы вкупе с рассмотренными ранее подсказывали, что настало подходящее время отойти от nbdev и сосредоточиться на другом.

    What I learned

    Чему я научился

    I learned some important lessons during this process:

    В ходе этого процесса я усвоил несколько важных уроков:

  • Just because you love a project and find it useful, that doesn’t necessarily imply that it’s ripe for commercialization. I always struggled to gain conviction that there was a good business model for nbdev.3 Instead, I pursued this path because I was drawn to the idea of starting a business with people I really liked. Ultimately, I learned that at least one person needs strong conviction in addition to being excited about the people you are working with - not just one or the other.4 I also learned that it’s important to be honest with yourself about your (and your team’s) level of conviction and not try to force something that isn’t there.
  • Listen to your instincts. I ignored my instincts on multiple occasions throughout this journey. As I’ve grown older, I’ve learned to make this mistake much less often, but I could have done better here.
  • Don’t be afraid to pivot. I think we avoided unnecessary churn by steering clear of a situation that wasn’t promising. I’m much more excited about the work I’m doing now.5
  • Own your own brand. My professional brand became increasingly tied to fast.ai and my friend Jeremy Howard. I’m grateful for the growth I’ve experienced under this mentorship – but I believe it is important to build your own distinct brand and identity. I discovered it can be challenging to build your own brand when you are working on someone else’s project6, and is something I struggled with. I’m looking forward to working on this more.
  • То, что вы любите проект и считаете его полезным, ещё не означает, что он созрел для коммерциализации. Мне всегда было трудно обрести уверенность в том, что у nbdev есть хорошая бизнес-модель.3 Я пошёл по этому пути потому, что меня влекла идея начать бизнес с людьми, которые мне по-настоящему нравились. В итоге я понял, что хотя бы у одного человека должна быть сильная убеждённость в дополнение к радости от людей, с которыми работаешь, — а не что-то одно из двух.4 Ещё я понял, что важно быть честным с самим собой насчёт своего (и командного) уровня убеждённости и не пытаться выдавить то, чего нет. Прислушивайтесь к своим инстинктам. На этом пути я несколько раз игнорировал свои инстинкты. С возрастом я научился совершать эту ошибку гораздо реже, но здесь я мог бы поступить лучше. Не бойтесь пивотов. Думаю, мы избежали лишней суеты, держась подальше от ситуации, которая не выглядела перспективной. Я гораздо больше воодушевлён той работой, которой занимаюсь сейчас.5 Владейте собственным брендом. Мой профессиональный бренд всё сильнее связывался с fast.ai и моим другом Jeremy Howard. Я благодарен за рост, который пережил под этим наставничеством, — но я считаю важным выстраивать собственный, отличимый бренд и идентичность. Я обнаружил, что строить собственный бренд бывает непросто, когда работаешь над чужим проектом6, и с этим я как раз боролся. Жду с нетерпением, когда смогу заняться этим основательнее.

    Future Directions

    Дальнейшие направления

    I suspect that I’m not completely finished with nbdev. I may revisit the project or related ideas when the time is right. I’m excited by the work Posit is doing in the areas of literate and exploratory programming, which include many of the ideas explored in nbdev. Wasim has even joined the team at Posit, so I’m excited to see what they come up with.7

    Подозреваю, что я ещё не до конца закончил с nbdev. Возможно, я вернусь к проекту или связанным с ним идеям, когда придёт время. Меня воодушевляет работа, которую Posit ведёт в области грамотного и исследовательского программирования, включающая многие идеи, проработанные в nbdev. Wasim даже присоединился к команде Posit, так что мне любопытно, что они придумают.7

    Regarding what I’m working on next – I’ll have to save my thoughts on that for another post 😊.

    Что касается того, чем я займусь дальше, — свои мысли на этот счёт мне придётся приберечь для другого поста 😊.

    Footnotes

    Сноски

  • I burned out several times during this process, but I didn’t realize why at the time. Not surprisingly, trying to focus on too many things at once was the root cause.↩︎

  • See this demo for ideas on how coding with LLMs might look like, especially with notebooks.↩︎

  • The problem with the hosted solution is that this is not something I would want to use. I can’t picture myself trying to host code on something other than GitHub/GitLab.↩︎

  • Without shared conviction, there is no glue holding everyone together and people can drift apart.↩︎

  • I’ll share more about this in a future post.↩︎

  • I don’t believe this is always the case, but it can be true depending on the dynamics of the group.↩︎

  • We previously partnered with Posit and JJ Allaire and built nbdev on top of Quarto. I’m currently advising Posit on their product and strategy. They have additional projects on their roadmap that I cannot disclose now.↩︎

  • За время этого процесса я несколько раз выгорал, но тогда не понимал почему. Неудивительно, что корнем проблемы была попытка сосредоточиться на слишком многих вещах одновременно.↩︎ Посмотрите эту демонстрацию, чтобы получить представление о том, как может выглядеть программирование с LLM, особенно с ноутбуками.↩︎ Проблема с хостинговым решением в том, что я и сам не хотел бы им пользоваться. Не могу представить, чтобы я стал размещать код где-то, кроме GitHub/GitLab.↩︎ Без общей убеждённости нет того клея, что держит всех вместе, и люди могут разойтись.↩︎ Я расскажу об этом подробнее в одном из будущих постов.↩︎ Я не считаю, что так бывает всегда, но это может быть верно в зависимости от динамики внутри группы.↩︎ Ранее мы сотрудничали с Posit и JJ Allaire и построили nbdev поверх Quarto. Сейчас я консультирую Posit по их продукту и стратегии. У них в дорожной карте есть и другие проекты, которые я пока не могу раскрыть.↩︎