Install ExtensionApp Store

How to Ship Side Projects

Working on side projects helps me learn new technologies, improve as an engineer and designer, and exercise my creativity. Through building side projects (which range from the mildly useful to the completely inane), I’ve learned that momentum is paramount to getting things across the finish line (too often my GitHub repos become ghost towns because I can’t decide what technology to move forward with or visualize the final user flow). Here are some valuable solo project management skills that have helped me stay focused to maintain momentum throughout.
从事业余项目可以帮助我学习新技术,提高工程师和设计师的水平,并锻炼我的创造力。通过构建副项目(从稍微有用的项目到完全无用的项目),我了解到动力对于完成任务至关重要(我的 GitHub 存储库经常成为鬼城,因为我无法决定采用什么技术)继续推进或可视化最终用户流程)。以下是一些宝贵的个人项目管理技能,它们帮助我始终保持专注并保持动力。

Ask Why?问为什么?

First and foremost, ask yourself why? What is your motivation behind working on side projects? Is it to learn new technologies and frameworks? To make something people want to use? Or just to troll your friend, Jake?
首先,问自己为什么?您从事业余项目的动机是什么?是为了学习新技术、新框架吗?制造人们想要使用的东西?或者只是为了恶搞你的朋友杰克?

Your objective shapes your approach to working on side projects. For example, if you want to learn new technologies, then maybe you shouldn't optimize on _shipping_ a complete product. Conversely, if you want to make something people use, then just choose the stack you're most productive in.
您的目标决定了您从事业余项目的方法。例如,如果您想学习新技术,那么也许您不应该优化_运输_完整的产品。相反,如果你想制作人们使用的东西,那么只需选择你最有生产力的堆栈即可。

For me, it's to troll Jake, so I stick to my stack of Koa and heavy, heavy jQuery (kidding, though not really).
对我来说,这是为了恶搞 Jake,所以我坚持使用我的 Koa 堆栈和沉重的 jQuery(开玩笑,虽然不是真的)。

Write it Down!写下来!

Everyone gets struck by inspiration at various times during the day. Get in the habit of writing down every random potential idea (sometimes not even a full idea, but an exploration: write down a sentence that'll inspire you to think of the full idea). Make sure the path from thinking of the idea to memorializing it in an easily accessible way is as frictionless as possible.
每个人在一天中的不同时间都会受到灵感的启发。养成写下每一个随机的潜在想法的习惯(有时甚至不是一个完整的想法,而是一种探索:写下一个会激发你思考完整想法的句子)。确保从思考想法到以易于理解的方式记住它的过程尽可能顺畅。

Some people like to email themselves or chat Slackbot on Slack.
有些人喜欢给自己发电子邮件或在 Slack 上与 Slackbot 聊天。

I use nvALT (it's a free, plain-text mac app that I can summon with a hotkey and jumps right into a blank note) with a Simple Note backend (also free; they have an iPhone app so I can use it on the go). I have this giant note of just "ideas" (also a separate note of "blog ideas"):
我使用 nvALT(这是一个免费的纯文本 Mac 应用程序,我可以用热键调用它并直接跳转到空白笔记)和 Simple Note 后端(也是免费的;他们有一个 iPhone 应用程序,所以我可以在旅途中使用它)。我有一个巨大的“想法”注释(还有一个单独的“博客想法”注释):

They don’t even have to make sense! Well, maybe just a little.
They don’t even have to make sense! Well, maybe just a little.
他们甚至不必讲道理!嗯,也许只是一点点。

This means that next time you have an empty morning or evening, you can review your ideas. Then, you can start planning the ones you like the most or are particularly inspired by.
这意味着下次你早上或晚上有空的时候,你可以回顾一下你的想法。然后,您可以开始计划您最喜欢或特别受启发的内容。

Wear One Hat at a Time
一次戴一顶帽子

One danger about side projects is wanting to jump into all aspects at once. You start creating wireframes, writing your server routing logic, and thinking about use cases. Stop! The amount of micro context switching and decision making will lead to mental and emotional fatigue, ultimately slowing you down.
副业项目的一个危险是想要同时涉足所有方面。您开始创建线框图,编写服务器路由逻辑,并考虑用例。停止!大量的微观环境切换和决策会导致精神和情绪疲劳,最终减慢你的速度。

Instead, do one thing at a time. This means wearing your Product Manager hat first and answering these questions:
相反,一次只做一件事。这意味着首先要戴上产品经理的帽子并回答以下问题:

  • what is the objective / end goal?
    目标/最终目标是什么?

  • what are the main use cases? (ideally, you should start with only one use case)
    主要用例是什么? (理想情况下,您应该只从一个用例开始)

  • what tools are available out there for me to use to build this?
    我可以使用哪些工具来构建这个?

  • who are my target users and how do I reach them on the inter webs?
    谁是我的目标用户?我如何在互联网上接触到他们?

  • what should I name this thing?!*
    我应该给这个东西起什么名字?!*

*For me, choosing a clever and hilarious name often motivates me to finish something in 1/10th the normal time. As such, I like to dwell on the name for a day or two. If I can't find something great, I just go with a vague project name with the hopes that later I'll uncover something great.
*对我来说,选择一个聪明又搞笑的名字通常会激励我在正常时间的 1/10 内完成某件事。因此,我喜欢花一两天的时间思考这个名字。如果我找不到一些很棒的东西,我只会使用一个模糊的项目名称,希望以后我能发现一些很棒的东西。

Other Product Management tasks include:
其他产品管理任务包括:

  • thinking about the ideal user flow
    思考理想的用户流程

  • creating a loose mock up of what it should look like, etc.
    创建一个松散的模型,看看它应该是什么样子,等等。

  • researching the APIs, documentation, etc. and preparing that info so that when you begin development, the resources are readily available
    研究 API、文档等并准备这些信息,以便在开始开发时可以随时使用资源

  • loosely plan when you'll wear your Engineer and Designer hats
    松散地计划何时戴上工程师和设计师的帽子

Since I have a full time job, it's easy to overlook these important steps when I come home in the evening. To keep myself on task, I like to add Google Calendar events with their descriptions as small, self-contained tasks to complete:
由于我有一份全职工作,当我晚上回家时很容易忽视这些重要的步骤。为了让自己专注于任务,我喜欢添加 Google 日历事件及其描述,将其作为需要完成的小型独立任务:

By writing it down in a calendar event, I can free up some of my mind to do other stuff, knowing that I can jump right into the tasks listed later when the time arrives.
通过将其写在日历事件中,我可以腾出一些精力来做其他事情,因为我知道当时间到来时我可以直接跳到稍后列出的任务。

Bonus Tip: Cut Scope Aggressively
额外提示:积极缩小范围

Since I like to optimize for shipping, it's important to me to cut scope aggressively. This philosophy usually guides me to first write a library or CLI, from which I can make a web service with a front-end UI (though many things I make end up just being a CLI).
由于我喜欢优化运输,因此积极缩小范围对我来说很重要。这种哲学通常引导我首先编写一个库或 CLI,从中我可以创建一个带有前端 UI 的 Web 服务(尽管我所做的很多东西最终只是一个 CLI)。

The cognitive overhead of thinking about how the final product should work, especially thinking about the pros and cons of the hundreds of ways an end user can interact with your finished project, can often destroy momentum and halt productivity on your project. It's important to think about your project in smaller pieces: how will Engineer you want to interact with your library? How will App Developer you want to interact with your API?
思考最终产品应该如何工作的认知开销,尤其是思考最终用户与已完成项目交互的数百种方式的优缺点,通常会破坏项目的动力并降低项目的生产力。将您的项目分成更小的部分来考虑非常重要:您希望如何与您的图书馆进行交互?您希望应用程序开发人员如何与您的 API 进行交互?

This approach means you're breaking problems into smaller and simpler pieces, which are often more manageable than tackling everything at once.
这种方法意味着您将问题分解为更小、更简单的部分,这通常比一次性解决所有问题更易于管理。

How your user (whether that is yourself or a specific audience you have in mind) uses your project should determine how it is structured. There is a ton of literature out there that defines the design exercise of coming up with story boards, etc. so I won't enumerate them here.
您的用户(无论是您自己还是您心目中的特定受众)如何使用您的项目应该决定项目的结构。有大量的文献定义了故事板等的设计练习,所以我不会在这里一一列举。

The key thing to remember is that these user flows can guide ways to manipulate necessary data so that your users to accomplish their jobs.
要记住的关键一点是,这些用户流可以指导操作必要数据的方法,以便您的用户完成他们的工作。

Working on a library? What are the minimum arguments necessary, with the fewest calls, for your user to do her job?
在图书馆工作?让您的用户以最少的调用完成其工作所需的最少参数是什么?

How about an API? What job is your developer accomplishing with your API? How does that determine what routes to provide and what parameters to expose?
API 怎么样?您的开发人员使用您的 API 完成什么工作?如何确定要提供哪些路由以及要公开哪些参数?

A web or mobile app? How does the UI need to communicate enough so that your user can easily navigate it without confusion or frustration?
网络或移动应用程序? UI 需要如何进行足够的沟通,以便您的用户可以轻松导航而不会感到困惑或沮丧?

In terms of actual design for a web app, I typically have a loose idea of how the final product will look at this stage. But I don't write any CSS or `margin: 0 auto;` until the very end. Plus I rely heavily on Twitter's Bootstrap, since I'm familiar and pretty quick with it.
就网络应用程序的实际设计而言,我通常对最终产品在这个阶段的外观有一个大致的了解。但直到最后我才写任何 CSS 或 `margin: 0 auto;`。另外,我非常依赖 Twitter 的 Bootstrap,因为我很熟悉它并且很快就能使用它。

By this time, I would break apart engineering tasks to discrete TODO's, then write those down (usually in a GitHub issue). This way, when I start developing, I don't have to revisit these decisions, which could impede my momentum.
此时,我会将工程任务分解为离散的 TODO,然后将它们写下来(通常在 GitHub 问题中)。这样,当我开始开发时,我就不必重新审视这些决定,这可能会阻碍我的动力。

Write First, Refactor Later
先编写,后重构

If you've ever had to write an essay or blog post, you know sometimes it's not easy. Something I've learned about writing that has helped me is to _not_ write and edit at the same time.
如果您曾经不得不写一篇文章或博客文章,您就会知道有时这并不容易。我在写作中学到的对我有帮助的一点是,不要同时写作和编辑。

The act of writing (creating content) and editing (refining and removing content) uses two parts of your brain. Doing both at the same time can be counter-productive: three hours and two cups of coffee later, you're still word smithing the same sentence.
写作(创建内容)和编辑(精炼和删除内容)的行为会用到大脑的两个部分。同时做这两件事可能会适得其反:三个小时和两杯咖啡之后,你仍然在拼凑同一个句子。

Same goes with writing code. If you're goal is to ship, then who cares (right now, at least) that you're copying code and not being DRY. Put that tenth callback in that single 400 line `index.js` file, get it to work, then refactor that later when you have your "Editing" hat on.
编写代码也是如此。如果你的目标是交付,那么谁在乎(至少现在)你正在复制代码而不是 DRY。将第十个回调放在那个 400 行的“index.js”文件中,让它工作,然后当你戴上“编辑”帽子时重构它。

If you’re interested in continuing to improve and/or maintain your code, then, for future you’s sake, revisit it later, clean it up, and make it human readable.
如果您有兴趣继续改进和/或维护您的代码,那么,为了将来您的利益,请稍后重新访问它,清理它,并使其易于人类阅读。

Bonus: Learn About Your Users
奖励:了解您的用户

If you do plan to put your side project in front of other people, then it helps to add some cursory tracking for analysis later. My go-to is Segment with Google Analytics enabled (both free!).
如果您确实计划将您的业余项目展示给其他人,那么添加一些粗略的跟踪以供以后分析会有所帮助。我的首选是启用了 Google Analytics 的 Segment(都是免费的!)。

This allows you to measure traffic and usage on your app, as well as find out where traffic is coming from (if it's a web app). You can also setup key conversion events to measure your funnel, see where people are dropping off, etc., so you can improve your product.
这使您可以测量应用程序的流量和使用情况,并找出流量的来源(如果它是网络应用程序)。您还可以设置关键转化事件来衡量您的渠道,查看人们在哪里流失等,以便改进您的产品。

If you want to be more thorough with your analytics and have the intent to grow your side project, here is a great article on using a $9/month marketing stack.
如果您想更彻底地进行分析并有意发展您的副业项目,这里有一篇关于使用每月 9 美元的营销堆栈的精彩文章。

Disclaimer: I work for Segment.
免责声明:我为 Segment 工作。

Ship it!装运它!

I would say this is the most difficult part of the product development lifecycle, when you've built it to 90%, it works mostly and looks half-decent. Again, this ultimately depends on your goal. If you just want to make something your friends can use, show it to them for feedback. Or, if you're trying to get it listed on Product Hunt, then take the extra week to polish the design, write tests, ensure analytics are in place.
我想说这是产品开发生命周期中最困难的部分,当你将其构建到 90% 时,它大部分都能工作,而且看起来还算不错。同样,这最终取决于您的目标。如果您只想制作一些您的朋友可以使用的东西,请将其展示给他们以获取反馈。或者,如果您想将其列入 Product Hunt,则需要额外花一周时间完善设计、编写测试、确保分析到位。

Typically, I have a user in mind when I build something. I would find out where those users like to hang out on the Internet (what tools they normally use, what forums they browse, which subreddits they read, what Slack channels they're in, what newsletters/blog they read) and share the finished product there. If I were serious about customer development, I would try to get as much feedback as possible.
通常,当我构建某些东西时,我会想到一个用户。我会找出这些用户喜欢在互联网上闲逛的地方(他们通常使用什么工具,他们浏览哪些论坛,他们阅读哪些子版块,他们在哪些 Slack 频道,他们阅读哪些时事通讯/博客)并分享完成的内容那里的产品。如果我认真对待客户开发,我会尝试获得尽可能多的反馈。

The main takeaway is to consider your motivations and then optimize for them. If you’re optimizing for shipping, then being intentional about planning, researching, designing, and building will help maintain focus and, more importantly, momentum, that can help get the finished product out the door and in front of your users.
主要的收获是考虑您的动机,然后针对它们进行优化。如果您正在优化运输,那么有意识地进行规划、研究、设计和构建将有助于保持专注,更重要的是保持动力,这有助于将成品推出并呈现在用户面前。