hopper_零到150万编码人员:构建蚱hopper时吸取的九个教训

hopper

by Laura Holmes

劳拉·福尔摩斯(Laura Holmes)

零到150万编码人员:构建蚱hopper时吸取的九个教训 (Zero to 1.5 Million coders: nine lessons learned while building Grasshopper)

Two and a half years ago, I set out to teach people to code from scratch on their phones. As of today, 1.5 million people have downloaded Grasshopper. Even with 10 years of Product Management experience at Google, I was in uncharted territory building Grasshopper. Here are some of the things I’ve learned along the way:

两年半以前,我开始教人们从头开始在手机上进行编码。 截止到今天,已有150万人下载了Grasshopper 。 即使在Google拥有10年的产品管理经验,我还是在未知的领域建造Grasshopper。 这是我在此过程中学到的一些知识:

建立你所知道的 (Build what you know)

I arrived at learning to code by accident. I went to a public high school in California where computer class was learning to type. When I arrived at Stanford, I heard about “computer science”, but had no idea what it was. My freshman Resident Assistant recommended taking a class called “CS106A”. I took it on faith. I found out later that it was Stanford’s introductory Computer Science (CS) class.

我偶然地开始学习编码。 我上了加利福尼亚的一所公立高中,在那里计算机课正在学习打字。 当我到达斯坦福大学时,我听说过“计算机科学”,但不知道它是什么。 我的新生常驻助理建议参加一门名为“ CS106A”的课程。 我本着信念来接受它。 后来我发现这是斯坦福大学的入门计算机科学(CS)课程。

As soon as I started the class, I loved computer science but got straight Bs. A lot of folks were surprised I was even taking the class since I was a “girl who liked to talk”. There were so many things I didn’t understand. I remember asking a member of my dorm staff for help one time, and them scoffing saying, “You don’t know Unix?! How can you not know Unix?”

我刚上课,就喜欢计算机科学,但获得了Bs的直接认可。 因为我是一个“喜欢说话的女孩”,所以很多人都对我什至上课感到惊讶。 有很多我不理解的事情。 我记得曾经一次向我的宿舍职员中的一个成员求助,他们嘲笑地说:“您不知道Unix吗?! 你怎么不知道Unix?”

There were so many barriers to feeling comfortable learning to code: jargon, the tools, people’s perception of what a coder looked like. All these obstacles made me feel like I didn’t belong. I ended up getting my degree in Computer Science. I landed a job at Google, but hundreds of times I doubted if I could do it.

舒适地学习编码有很多障碍:专业术语,工具,人们对编码器外观的理解。 所有这些障碍使我感到自己不属于自己。 我最终获得了计算机科学学位。 我在Google找了份工作,但是数百次我怀疑我能否做到。

Fast forward to about a decade of working at Google. I wanted to figure out what I could do to help with more diversity and inclusion in the tech industry. There’s a lot of amazing work out there. Based on my own experience, I wanted to change one thing: I wanted more people to feel like they could code. I wanted people to have an easier time than I did getting into the software industry.

快进Google大约十年了。 我想弄清楚该如何做才能帮助技术行业实现更多多样性和包容性。 那里有很多很棒的工作。 根据我自己的经验,我想改变一件事:我希望更多的人觉得自己可以编码。 我希望人们比进入软件行业时过得更轻松。

I ended up pitching Google’s Area 120 on a gamified learn-to-code app, with minimal instruction and on mobile (so that more people could use it).

我最终在一个游戏化的学习编码应用程序上以最小的指示和在移动设备上投放了Google的Area 120从而使更多的人可以使用它

与伟大的人为伴 (Surround yourself with great people)

“Alone we can do so little, together we can do so much.” — Helen Keller

“我们一个人可以做的很少,在一起我们可以做的那么多。” —海伦·凯勒

A bunch of great people who care about making coding education more accessible built Grasshopper. In the beginning, it was a few of us. Over the last two years, folks have joined and some have moved on. Through every iteration, people decisions were at the very heart of the app.

一群伟大的人关心如何使编码教育更易于使用。 刚开始时,只有少数几个人。 在过去的两年中,人们加入了,有些人继续前进。 在每次迭代中,人们的决定都是应用程序的核心。

I’ve learned over the last 2 years that you can be smart, you can be lucky, and you can have folks with deep expertise on your team. That’s not enough. You need to surround yourself with folks who are going to be team players. Skills can be learned. At the end of the day, I was wrong a lot of the time. It was my teammates’ hard work and patience that allowed us to pivot to where Grasshopper is today.

在过去的两年中,我了解到您可以变得聪明,可以走运,也可以拥有在团队中拥有深厚专业知识的人。 这还不够。 您需要与将要成为团队合作伙伴的人们在一起。 可以学习技巧。 归根结底,我很多时候都错了。 正是由于我的队友们的辛勤工作和耐心,才使我们得以迈向今天的蚱hopper。

尽快在用户面前展示一些东西 (Get something in front of users as quickly as possible)

We started building Grasshopper in September 2016 and did our first user tests in October. We didn’t have anything built yet, we just had hand-drawn paper prototypes.

我们于2016年9月开始构建Grasshopper,并于10月进行了首次用户测试。 我们还没有建造任何东西,我们只有手绘的纸制原型

By November, we had our first prototype and sent 10 folks home with it over Thanksgiving (only 2 people used it).

到11月,我们有了我们的第一个原型,并在感恩节期间将10个人送回了家(只有2个人使用了它)。

At each iteration, we learned what worked, and what didn’t. We realized early on that coding puzzles were delightful. We had to make sure the games didn’t feel too kid-like (e.g. no turtle graphics). We learned where users wanted to click to add a new line in our code editor (and that our initial controls were confusing).

在每次迭代中,我们了解了哪些有效,哪些无效。 我们很早就意识到编码难题是令人愉快的。 我们必须确保游戏不会显得太像孩子(例如,没有乌龟图形)。 我们了解到用户想要在代码编辑器中单击以添加新行的位置(并且我们的初始控件令人困惑)。

By June, we had a rough app that had 13 puzzles and we put it up on the Play Store. We bought some traffic. We kept a low profile and kept learning.

到了六月,我们有了一个粗糙的应用程序,其中包含13个谜题,并将其投放到Play商店中。 我们买了一些交通。 我们保持低调,不断学习。

好的指标可以帮助您拒绝 (Good metrics help you say no)

We weren’t sure what success would look like when we started Grasshopper. I knew metrics would help us but wasn’t sure which numbers mattered. I read a lot of blogs about growth. Then I started looking at the following metrics to gauge Grasshopper’s success: active users, onboarding success, week 1 retention, cost per acquisition, curriculum completion, and content creation per week.

我们不确定启动Grasshopper时会取得什么样的成功。 我知道指标会帮助我们,但不确定哪个数字重要。 我读了很多关于增长的博客。 然后,我开始查看以下指标来评估Grasshopper的成功:活跃用户,入职成功,第1周保留,每次购买成本,课程完成和每周内容创建。

That’s a lot of different metrics.

有很多不同的指标。

Having a lot of metrics made it hard to make decisions.

拥有大量指标使决策变得困难。

Did we want to build a feature to increase our daily active users? Or reduce the cost of acquisition? Did we want people to spend more time in the app or get through our lessons? What did it mean when one metric went up and another one went down? Which metrics were the most important?

我们是否想构建一个功能来增加我们的日常活跃用户? 还是降低购置成本? 我们是否希望人们在应用程序上花费更多的时间或完成我们的课程? 一个指标上升而另一个指标下降时,这是什么意思? 哪些指标最重要?

It took a few months until I realized I needed to narrow. We decided to focus on only two metrics: Day 1 retention and Graduation Rate. We held ourselves accountable to student learning (Graduation Rate), while also building an engaging product that would keep users coming back (Day 1 retention). And we focused on Day 1 retention because it was our first opportunity to measure a user coming back. All other retention goals are downstream of Day 1.

我花了几个月的时间才意识到自己需要缩小范围。 我们决定只关注两个指标:第一天保留率和毕业率。 我们使自己对学生的学习负责(毕业率),同时还开发出一种有吸引力的产品,以使用户回头(保留第一天)。 我们专注于第1天的保留时间,因为这是我们衡量用户返回的第一个机会。 所有其他保留目标都在第1天的下游。

Noticeably absent is any user growth metric. We didn’t need to grow until we’d nailed these other two metrics. If we weren’t keeping users interested and we weren’t teaching our students, we weren’t ready to pour more gasoline on the fire.

显然没有任何用户增长指标。 在确定其他两个指标之前,我们不需要增长。 如果我们不让用户感兴趣,也不在教我们的学生,那我们就不准备在火上倒更多的汽油。

Narrowing down to two success metrics was clarifying. We didn’t spend time on marketing beyond some simple paid campaigns. We could look at our list of ideas and focus on the best ones based on whether they helped with retention or graduation. Things like tablet support, making the code editor support more use cases, and referrals were no longer important.

缩小到两个成功指标正在澄清。 除了一些简单的付费广告系列,我们没有花时间在营销上。 我们可以查看我们的想法列表,并根据它们对保留或毕业有帮助而将重点放在最佳想法上。 平板电脑支持,使代码编辑器支持更多用例以及引用不再重要。

Once we had a shared set of goals, we were able to start making some hard decisions.

一旦有了共同的目标,我们就可以开始做出一些艰难的决定。

您的用户是对的 (Your users are right)

From June to December 2017, things were rough. We had agreed on our success metrics, but we weren’t making either of these numbers go up.

从2017年6月到2017年12月,事情很艰难。 我们已经就成功指标达成了共识,但我们并没有使这些数字都上升。

We made a lot of changes to the app. We expanded our curriculum to create a better “end-point”. Nothing seemed to improve our metrics. I kept hoping the next change would be the one, but it wasn’t.

我们对该应用程序进行了很多更改。 我们扩展了课程,以创建更好的“终点”。 似乎没有什么可以改善我们的指标。 我一直希望下一个更改会是,但是不是。

We continued hearing from users that our curriculum was confusing and that they really wanted a progress bar. I didn’t get it. We’d designed our curriculum to be dynamic so that the *perfect* next lesson was picked for the user based on their performance. That way lessons could also be swapped in and out, too. And we’d just added a progress bar. Why weren’t users getting it? Couldn’t they see the progress bar?

我们继续从用户那里听到我们的课程令人困惑,并且他们确实想要进度条。 我没听懂 我们将课程设计为动态的,以便根据用户的表现为用户选择“完美”的下一课。 这样,课程也可以交换进出。 我们刚刚添加了进度条。 用户为什么没有得到它? 他们看不到进度条吗?

At the same time, some folks on my team had started to note that they didn’t feel comfortable with the dynamic curriculum. It was confusing to them, and it was computationally expensive.

同时,我们团队中的一些人开始注意到他们对动态课程并不满意。 这使他们感到困惑,并且计算量很大。

That’s when I realized: Our users were right. They’d been telling me all along that our app was confusing, but I just wasn’t understanding. And my teammates had heard them too, and I still wasn’t listening. I was too attached to how we’d been doing things and the investments we’d made.

那时我才意识到:我们的用户是对的。 他们一直在告诉我我们的应用程序令人困惑,但我只是不明白。 我的队友也听过他们,但我仍然没有听。 我对我们的工作方式和所做的投资非常满意。

So we made a pivot to make our curriculum a linear path, with clear progression and progress. We stopped trying to be too smart, and listened. And that’s when everything started to change for the better: all our numbers started to go up and to the right.

因此,我们制定了一个枢纽,以使我们的课程成为一条直线的道路,并具有清晰的进度。 我们不再试图变得太聪明,而是去听。 那时一切都开始好转:我们的所有数字开始向右移动。

坚持核心,其余只是细节 (Stick to your core, the rest is just details)

When we made the pivot from a dynamic curriculum to a linear one, I was super concerned. Our investors thought that the dynamic curriculum was cool, so did people on our team. Was this new strategy interesting enough to keep our team excited? And this new model had us using points and achievements. Was that cheating?

当我们从动态课程转向线性课程时,我非常担心。 我们的投资者认为动态课程很酷,我们团队中的人也是如此。 这个新策略是否足以使我们的团队兴奋不已? 这个新模型使我们可以利用点和成就。 那是作弊吗?

That’s when I reminded myself of why I wanted to build Grasshopper: I wanted to teach more people to learn to code. The dynamic curriculum wasn’t working; swap it out for a curriculum that did work. Who cares if you’re using a points system, as long as more people learn?

那是当我提醒自己为什么要构建Grasshopper的时候:我想教更多的人学习编码。 动态课程无效。 将其换成有效的课程。 只要更多的人学习,谁在乎您是否使用积分系统?

Building Grasshopper has been a learning journey in letting go and empowering the people on my team to make decisions (and it’s a journey I’m still on). It turns out that if you have a great team, the best ideas will come from them. My job as the lead is making sure that we’re all arriving at the same place: teaching more people to learn to code.

建立Grasshopper一直是一个学习过程,它是放开手脚并赋权团队中的人做出决定的过程(这是我仍在进行的过程)。 事实证明,如果您有一支出色的团队,最好的想法将来自于他们。 我作为负责人的工作是确保我们都到达同一个地方:教会更多的人学习编码。

Since making our pivot last year and realizing that I was too attached to a version of the app that wasn’t working, I’ve been more open to suggestions and experimentation. I’ve let go a little, and it’s been great to see what my team has done when given more responsibility. My team has built features, developed new courses, and made changes to Grasshopper that I wasn’t initially sold on. But it turned out I was wrong, and the features my team developed increased our core metrics. We’ve also unlaunched some things. But the most important thing has been staying true to our mission and never wavering. The rest is just details.

自从去年成为我们的重点之后,我意识到我对无法正常使用的应用程序版本的重视程度很高,因此我对建议和实验更加开放。 我已经放手了,很高兴看到我的团队在承担更多责任时做了什么。 我的团队建立了功能,开发了新课程,并对Grasshopper进行了更改,而这些更改我最初并未被出售。 但是事实证明我错了,我的团队开发的功能增加了我们的核心指标。 我们还推出了一些功能。 但是最重​​要的是始终忠于我们的使命,永不动摇。 剩下的只是细节。

在正确的指标下寻求增长 (Go for growth when the metrics are right)

Through my years at Google, I had learned that you don’t want to overpromise and get it wrong. You can never recover user trust. When I worked on Project/Google Fi, we onboarded users slowly until we knew our customers would have a great experience, and it went well. I wanted to follow a similar model with Grasshopper, and not do marketing and press until we knew we had a great product.

在Google工作的那几年,我了解到您不想过度承诺并弄错了。 您将永远无法恢复用户信任。 当我在Project / Google Fi上工作时 ,我们缓慢地加入了用户,直到我们知道我们的客户将会有很好的体验,并且进展顺利。 我想在Grasshopper上遵循类似的模式,在我们知道自己拥有出色的产品之前,不做市场营销和媒体宣传。

After months and months of flatlined metrics, we returned from the holidays to graphs that went up and to the right. We were so excited. The pivot to the linear curriculum paid off!

经过数月的扁平化指标后,我们从假期返回到向上和向右的图表。 我们非常激动。 线性课程的关键得到了回报!

In September 2017, we had set some goals for Day 1 Retention and Graduation Rate, and we hit them by February 2018.

在2017年9月,我们为第1天的保留和毕业率设定了一些目标,并在2018年2月之前实现了这些目标。

In addition to seeing our success metrics go up, we actually saw organic growth taking off. Starting in January, we saw a larger and larger percentage of our growth coming organically.

除了看到成功指标提高外,我们实际上还看到了有机增长。 从1月开始,我们看到有机增长的比例越来越大。

By February, we knew we were onto something that was working, so we decided to put announcement plans into action. We were surprised that no one had paid attention to Grasshopper even though it was public for months. Because we kept a low profile, we gave ourselves the opportunity to announce and tell our own story once we knew the product was right.

到2月,我们知道我们正在采取一些可行的措施,因此我们决定将公告计划付诸行动。 令我们惊讶的是,即使它连续数月都没有人关注草Grass。 因为我们保持低调,所以一旦我们知道产品是对的,我们就给了自己机会来宣布和讲述自己的故事。

监控和扩展支持收益 (Monitoring and scaled support pay off)

On announcement day, we got into the office at 5 am PT. TIME Magazine did an exclusive on Grasshopper, and it was going to hit the site at 6 am PT. Nothing was open, so we brought a waffle iron to the office and cooked some bacon in our microwave.

在公告日,我们于太平洋时间凌晨5点进了办公室。 《时代周刊》在Grasshopper上做了独家报道 ,并将于太平洋时间上午6点发布。 什么都没开,所以我们带了华夫饼铁到办公室,用微波炉煮了一些培根。

Once the story launched, we saw our metrics start to climb. It was super exciting! TechCrunch did an article. And then a bunch of other outlets started to pick us up. By 3 pm, things had leveled out and we decided to go out and grab a beer to celebrate. We’d launched, gotten a lot of new users and nothing broke. Growth was modest, but we were out there in the wild. A job well done. We went home that night feeling good.

故事启动后,我们看到指标开始攀升。 太刺激了! TechCrunch发表了一篇文章 。 然后一堆 其他 网点开始来接我们。 到下午3点,事情已经趋于平稳,我们决定出去喝啤酒庆祝。 我们已经启动了,吸引了很多新用户,但丝毫没有动摇。 增长适中,但我们在野外。 做得好。 那天晚上我们回家感觉很好。

The next morning, things were on fire. Asia had picked up our launch. Our engineering team was alerted just in time, and they turned off non-essential services (like our dashboards) before our server load prevented Grasshopper from functioning.

第二天早晨,事情着火了。 亚洲已经开始了我们的发射。 我们的工程团队及时得到了警报,并且在服务器负载阻止Grasshopper正常运行之前,他们关闭了不必要的服务(例如仪表板)。

Once we got our data back, we found out that we had 63xed our previous 24-hour record. We had been hoping for 10x. The next few weeks were hard. Our engineering team worked to rewrite our backend to be scalable, and our curriculum and support team handled user issues. We survived because we’d invested in monitoring, in building toggles to turn off services quickly, and in a forum and in-app feedback system that scaled for massive user growth.

取回数据后,我们发现我们已将之前的24小时记录提高了63倍。 我们一直希望达到10倍。 接下来的几周辛苦了。 我们的工程团队努力将我们的后端重写为可扩展的,而我们的课程和支持团队则处理了用户问题。 我们之所以能够幸存下来,是因为我们投资于监控,用于快速关闭服务的切换开关,以及可大规模扩展用户规模的论坛和应用内反馈系统。

If you’re ever in a similar situation, I can’t emphasize enough how helpful it was to have all these things in place *before* we announced.

如果您遇到过类似的情况,那么在我们宣布之前*,将所有这些事情放在适当的位置,我将无法强调足够的帮助。

工作与生活之间没有平衡。 工作与生活存在妥协 (There is no such thing as work-life balance; there is a work-life compromise)

Fast forward to today, and we have 1.5M users now using Grasshopper. I’m so proud of the team and what we’ve accomplished, and proud of our students for how much they’ve learned to code. But time to get a little personal:

快进到今天,我们已有150万用户使用Grasshopper 。 我为团队和我们所取得的成就感到非常自豪,并为我们的学生为他们学到了多少编码而感到自豪。 但是该花点时间了:

During all this, I also had my first baby. I was going through first-trimester exhaustion while executing our pivot. I was 35-weeks pregnant when we did our public announcement in April. And I still feel like I’m ramping back from maternity leave, even though I’ve been back at work for a couple of months. Adjusting to parenthood + working on Grasshopper has been filled with unexpected challenges.

在这一切中,我也有了我的第一个孩子。 在执行我们的数据透视时,我正经历着三个月的精疲力尽。 当我们在四月份发布公告时,我怀孕了35周。 即使我已经回到工作了几个月,但我仍然觉得自己正在休产假。 适应父母身份+在蚱hopper上工作充满了意料之外的挑战。

I wish I had advice for folks here. I wish I could tell you that with a successful career and lots of resources, work-life balance snaps into place. I can’t. But what I can offer is being real about what it’s like, balancing between being a leader and a mom: It’s f-ing hard. Work-life balance implies that there’s some sort of ideal state of goodness that can be achieved if one works hard enough. Instead, I’m constantly trading off between taking care of my family and my company.

我希望我能为这里的人们提供建议。 我希望我能告诉你,有了成功的职业生涯和大量资源,工作与生活之间的平衡就可以实现。 我不能 但是我所能提供的是真实的感觉,在领导者和妈妈之间取得平衡:这很辛苦。 工作与生活之间的平衡意味着,只要人们努力工作,就可以实现某种理想的善良状态。 相反,我经常在照顾家人和公司之间进行权衡。

I leave work at 5 pm so that I can have some time with my daughter before putting her to bed. Some nights, I skip time with my husband to work on Grasshopper, only to have my daughter wake up unexpectedly early the next day. I’ll do my best to feed her, but because I’m so tired, we don’t smile as much together before I head to work. And then I’m less creative when thinking about Grasshopper strategy during the day.

我在下午5点下班,这样我就可以和女儿在一起,然后再让她上床睡觉。 某些晚上,我与丈夫跳过时间在蚱hopper上工作,只是让我的女儿隔天第二天突然醒来。 我会尽力养活她,但由于我很累,所以在上班之前我们在一起笑得不多。 然后,我在白天思考草strategy策略时没有那么多创造力。

Being a working parent feels like I’m doing a complex ROI analysis on every activity, for work and family. All I can hope is that I’m making the right choices along the way, and be humble about the challenges. I hope that being honest about the challenge gives the working parents reading this post permission to celebrate all the amazing daily compromises you make. And if you’re reading this and aren’t a parent, but work with folks who are, maybe think about telling them how great a job you think they’re doing in both their roles.

作为一个工作父母,我感觉我正在为工作和家庭的每项活动进行复杂的投资回报率分析。 我所希望的是,我在此过程中做出了正确的选择,并对挑战保持谦卑。 我希望诚实面对挑战能使正在工作的父母阅读此职位,以庆祝您做出的所有令人惊奇的日常妥协。 而且,如果您正在阅读本书并且不是父母,而是与有亲戚的人一起工作,则可以考虑告诉他们,您认为他们在两个职位上都做得多么出色。

If you’ve made it this far, thanks so much for reading! Hope you’ve found some of the lessons valuable, and hope to be back to the freeCodeCamp blog soon to share some more insights from Grasshopper. And if you’re looking for a way to get started on your coding journey, download Grasshopper. I’d love to hear your thoughts and feedback.

如果您已经做到了这一点,非常感谢您的阅读! 希望您发现了一些有价值的课程,并希望尽快回到freeCodeCamp博客,以分享Grasshopper的更多见解。 如果您正在寻找一种入门的编码方法,请下载Grasshopper 。 我很想听听您的想法和反馈。

I also write and tweet about diversity and inclusion topics. To follow me, here’s my Twitter and my blog.

我还写和推特有关多样性和包容性主题。 跟着我,这是我的Twitter我的博客

翻译自: https://www.freecodecamp.org/news/zero-to-1-5-million-coders-nine-lessons-learned-while-building-grasshopper-3f8fc96acff7/

hopper

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值