在开始一个新项目时,有什么值得花时间的

时间:2010-11-28 10:31:14

标签: php mysql web-applications agile

更新

到目前为止,每个人都有很棒的答案!每个人都非常有助于找到问题的根源,并帮助确保我的合作伙伴和我在同一页面上。我认为很多事情是我们没有谈到我们对发布时间表和一般工作流程的实际意图。

在这样做的过程中,我遇到了一些我从未想过要解决的相关问题,可能会在以后发表更多帖子(可能在programmers-stack-exchange之后)


背景故事:

我和我的一位大学朋友在网络应用程序上工作。

我们正在使用MySQL和PHP开发我们的网站,并计划在前端使用一些jQuery。我们的目标是手机和平板电脑。它最终将涉及大量众包数据。我不想多说具体的项目想法。 (如果您认为我应该提供更多细节,请对此发表评论。)

我们有一个原型,并有一些GUI模型。我们的想法既抓痒,也似乎是以前从未尝试过的事情。

我们的问题:

我们希望遵循37signals的书“REWORK”中的原则。本书的一大部分是早期推出产品的想法。它讨论了为什么我们应该专注于我们产品的核心,我们应该忽略所有额外的东西。

基本上是为可销售产品尽可能降低成本的想法,以便我们可以发货并开始获得反馈。我们对这意味着什么都有不同的看法,它将我们拉向不同的方向。

我认为这本书只讨论最小功能,但他觉得这也是关于代码设计的。我认为有些事情现在值得做,以加快速度,但他希望我们赶时间我们尽可能快地完全跳过这些问题。

我想做一些准备工作,因为它会节省大量的时间。就像从OO开始,设计一个全面的数据库模式,花时间设置xCSS之类的东西,并将我们的问题分解为单独的步骤。

[我理解他的方式:]如果它意味着写出可怕的/草率的代码,只要它让设计出门,他就想赶紧。他不想在基本的代码基础设施上花费时间或者在我们采用或干燥原则时重构。他不想花时间来决定需要做什么,他只是想做。例如,他认为对svn进行小的改动只是开销。

我明白他不希望我们被浪费时间来制造一个完美的系统,但我认为这太过分了,而不是37signals所倡导的。 < / p>

这实际上是一个乌龟与野兔的问题而且我不知道如何向他解释如果他至少没有做一些简单的时间来保存代码他就会在脚下射击设计选择,并打破问题,并在小的离散块中进行处理。

他是一名优秀的开发人员,并且能够做得很好。

我的问题:

  1. 多少准备太多,多少太少?

  2. 在项目开始时,我们应该关注哪些高回报的事情?

  3. 在这个发展阶段,我们应该如何判断值得做的事情,代码明智(不是特征)?

  4. 是否值得花时间实施xCSS和其他系统之类的东西,以便从一开始就更容易编写干净的代码?

  5. 您如何向他解释细粒度任务的价值并进行小规模的原子变化。

  6. 您对代码执行了哪些操作? 导致更快的发货时间?

  7. 最佳答案:

    我会接受最能改变他/我心灵的答案。您可以随意回答我列出的任何问题,以及我们的目标语言中的示例奖励积分。参考其他37signals的工作可能会有所帮助。

6 个答案:

答案 0 :(得分:7)

很高兴看到另一位37signals粉丝!

以下是他们在线图书 Getting Real 的引用:

  

人们经常花太多时间   前面试图解决他们的问题   甚至没有。别。哎呀,我们   没有能力发动Basecamp   向客户收费!自产品   按月计费,我们知道   有30天的差距来计算出来

基本上,决定发布日期。将应用程序的总范围减少到该日期发布所需的最低限度。这将帮助您及时将应用程序提供给那里,并为您提供实时数据。

如果你已经找到了范围部分,并希望专注于编码问题,那么你应该特别关注这一部分,Managing Debt

  

一起讨厌一些坏事   来自的功能代码   不时。事实上,它通常是一个   需要的技术可以帮助你做到这一点   整个Get-Real-ASAP的事情。但是你   仍然需要承认它是债务和   通过清洁在某些时候还清它   毛茸茸的代码或重新设计   马马虎虎。

简而言之,在开始时放弃xCSS的实现,但确保您稍后再回到它。阅读“接口”和“代码”中的第9章和第10章。

最后,我最喜欢这本书的引用:

  

制作半个产品,而不是半个产品   产品。你真正想做的是   建立半个产品,踢屁股。

希望你们能够建立一个可以向世界展示的优质产品。快速解决这些问题也是节省时间的另一个好方法! :)

答案 1 :(得分:3)

我对你的点数没有具体的答案,但在我看来,“太多”不是什么让你得到'工作代码'

尽快获得最重要的,最重要的一点并尽快运行!

让代码变得丑陋 - 无论如何它都会被替换掉 让设计看起来像狗的底部 - 无论如何它都会被替换 让事情无效并且不安全 - 无论如何都会被替换

我们的想法是尽快启动并运行内部原型。如果它可以在浏览器中跳过并仍然“使用该想法的核心”,那么请跳过它。

一旦你某事工作,无论多么讨厌,那就完成了第一步。

第2步是循环的 - 回到你已经写过的东西,并使其更好。然后,转到步骤2

我在第1步中不会跳过的 部分是单元测试,这是因为我在编码之前使用单元测试来记录我应该做什么代码的想法。单元测试通过后,该部分完成 - 下一步!

第2步涉及重写代码以使其更清晰,处理更多边缘情况,并且更容易更新,维护和构建。这些都涉及单元测试(通常涉及重写单元测试)

基本上,你的朋友是对的 - 除了单元/集成测试

答案 2 :(得分:3)

答案 3 :(得分:2)

答案 4 :(得分:1)

找到您认为会对您网站感兴趣的5-10人进行试用。如果你不能这样做,你们两个就没有什么可争辩的。

将它放在用户面前应解决两个问题:

  1. 有足够的功能,以便用户获得&#39;你的程序会做什么。
  2. 让用户界面更具吸引力且性能足够好让他们相信你知道自己在做什么。
  3. 如果推迟,陌​​生人显然会更加关键并且永远不会回到您的网站。那些离你很近的人会给你第二次或第三次机会。如果您想创建FaceBook克隆,则至少需要上传照片并共享它们。等待20秒为主页加载你的猫的图片,要求用户手动输入完整的文件路径,并花5分钟上传一个100 KB的jpeg文件将发送用户点击。

答案 5 :(得分:1)

由于意图是快速发布并以此为基础,我想说使用您最了解的技术至关重要。如果你是一个伟大的OO程序员,那么使用OO。如果您真的了解数据库花费几个小时来设计架构。

您可以绝对保证的一件事是代码会改变。 IME抨击大量代码,然后扔掉一半代码,这比尝试为尚未完全理解的问题设计优雅代码要好得多。草率的代码将被替换,并且有两个目的:获取已发布的内容并帮助您了解您正在做的事情。

当您花费数小时/天查看某些内容并且找不到答案时,准备工作太多了。解决方案:继续第一印象。

要确定代码上的工作方式,代码与主要功能直接相关。

不值得学习任何你不熟悉的东西(例如xCSS)。最好使用你理解并随着时间的推移改进这些知识的东西,然后聘请真正的专家

说完以上所有内容后,我总是首先要考虑的是让数据库保持逻辑和UI分离。当我开始使用PHP时,我希望我有一个小框架来完成所有繁琐的工作(Db等)我没有,所以最终我将我的工作发布为opensource。我当然建议以how I'd build Db/Logic/UI using my framework为例。