6

假设您为一家突然决定进行定制内部软件开发的大公司工作。此外,他们还希望能够为客户提供成功的开发(如果有的话)。

现在你负责它。

您认为构建成功的软件开发基础架构最重要的是什么?

  • 灵活应对未来增长
  • 灵活使用技术(使用 c、java、.net、web、mobile 的项目......)
  • 什么样的工具(源代码控制、锻造……)、硬件(虚拟的、单独的开发和生产……)、流程(指南、代码审查……)等。

更新:请不要回答您需要合适的人员和合适的工具。这正是我正在寻找的。什么是正确的工具,你会首先雇佣什么样的人加入你的团队?想一想,您将成为该发展的领导者。

4

10 回答 10

10

让自己以至少 10 分的成绩通过Joel 测试。

于 2009-01-20T15:05:01.820 回答
5

我认为拥有合适的人将是最重要的。如果你的程序员很臭,其他的都无关紧要。

于 2009-01-20T14:55:15.787 回答
5

负责人知道他们在做什么。

于 2009-01-20T14:56:09.200 回答
3

显然,有很多因素,但我想说的是至关重要的因素:

  • 雇用聪明的人(并支付他们的价值)
  • 选择适合开发类型的好工具(不要选择便宜的工具)
  • 建立版本控制系统和政策
  • 建立测试机制和政策
  • 不要害怕外包你不知道怎么做的东西
于 2009-01-20T14:56:32.587 回答
2
  • 找到最适合工作的人。如果他们不愿意支付最好的费用,或者让你在人事预算方面遇到困难,那么你的开端就很糟糕。
  • 从您的供应商处获得合适的工具...软件、硬件、支持合同等。
  • 尽早为您的开发生命周期建立程序,并确保您有合适的人员来使用它。从您如何评估机会评估到开发、测试和后期制作支持,这一切都是如此。确保您拥有适用于生命周期每个部分的人员和工具。
于 2009-01-20T15:04:23.117 回答
2

不要试图在技术上保持灵活。首先从专注于一种技术(Java、.NET 等)开始,然后在需要时转向其他技术。您将能够使用任何技术解决问题,但是很难找到擅长多种技术的人。

在基础架构级别,源代码控制是必须的。持续集成是一个加分项。花时间制定一个标准的项目布局,您将能够发展。它使开发人员更容易切换项目。花时间建立一个良好的构建过程(Ant、Maven,在 Java 世界中)。将您的构建过程与您的 IDE 集成,这样开发人员每次想要测试代码更改时都不必等待 5 分钟来部署他们的项目。

于 2009-01-20T15:04:29.073 回答
2

我同意纪尧姆的观点:如果你想从头开始建立一个部门,你需要集中精力。你需要建立你的团队,让每个人都成长为他们的新职责,相互了解等等。试图同时进入太多的方向是走向失败的方向。

因此,请确定您想要开发的技术。由于您的示例中的主要目标是内部开发,因此内部需求将决定您的决定。以这个主要目标来建立你的团队。

对于内部开发,您至少需要两个已经了解公司及其流程的人。(两个是因为当第一次重大危机袭击你时,一个人肯定会生病或在度假)。另一方面,你需要一些局外人,他们不被“我们一直这样做”的思维定势,他们可以跳出框框思考。出于上述原因,这些人也应该至少是两个人。作为团队负责人,您的工作是平衡这两个团队并将他们整合到一个团队中。

对于未来的增长,始终考虑有机增长。不要将团队规模增加 200%,在这里雇佣一个新人,在那里雇佣另一个人(或女孩)。慢慢建立你的团队。当您承担一个新项目时,请始终考虑扩展您的团队专业知识。在每个项目中尝试新的东西。这可以是一个新的源代码库、一个自动化的日常构建过程、一个编写规范或文档的新系统,甚至是一种不同的技术(例如,当您通常使用 .Net、Delphi 或 C++ 进行开发时使用 Java)。只要确保你永远不会 尝试在一个重要项目中取得重大进展。(我曾经在一家公司工作,该公司决定从 VB 6.0 切换到 .Net 以完成他们之前尝试过的最大项目。他们幸存下来。勉强。)

这样,您的部门将缓慢但不断地扩展其能力。然后,当有机会为外部客户进行开发时,您将已经积累了完成它所需的大部分知识。

哦,是的,smacl 也是对的:如果您希望您的部门长期生存,您需要可靠的 QA/QM。

从第一天开始制定(并遵循)您的 QA 规则。使它们尽可能短而灵活。添加您发现丢失的内容,并丢弃证明不必要或不切实际的内容。

不确定这是你想知道的,但我觉得有必要说出来;-)

于 2009-01-20T16:06:10.230 回答
1

制定强有力的质量保证战略,包括验收标准和变更控制。最好保持轻量级以适应内部客户。此外了解如何进行需求分析、期望管理和资源管理。

换句话说,不要只是随意创建蹩脚的解决方案,浪费的时间多于节省的时间,而且无法维护。花时间想想你想要什么,需要什么,如何实现它,以及它的成本。

于 2009-01-20T15:39:04.870 回答
1

除了之前关于团队、版本控制、质量保证等的答案之外,我将提供一个更专注于编码和开发人员/架构师角色的答案,这些答案当然都很重要。

您的许多决定在很大程度上取决于您的特定业务和软件结构(单个产品代码库、SOA、许多项目等)。但总的来说,您应该始终花大量时间预先开发核心软件基础设施,这将在SDLC。

软件基础设施

  • 编码命名约定例外

  • 处理策略

  • 策略设置和配置

  • 基类和助手类

  • 一般架构和层

    (演示、外观、领域实体、数据存储等)

  • UML 2.0 要求等设计工具

  • 管理/最终用户交互

还有很多,但这些肯定是需要考虑的一些基础知识。我参与的所有成功项目都包含了不错的软件基础设施。我还要指出,许多失败的项目都有一个共同的主题……缺乏一个共同的基础设施。在大多数情况下,这些失败的项目是由一个非技术人员领导的,他们认为他们可以简单地向几个程序员提出一堆想法,并期望他们在几周内交付。

最重要的是,您需要进行一些前期规划和原型设计,以确保长期成功!

祝你好运。

莱福德
www.blacksaber.com

于 2009-07-11T19:05:51.170 回答
0

您应该雇用的第一批人应该是经验丰富的高级专业人员。然后从他们/他们的输入中建立起来。稍后添加初级人员。

于 2009-01-20T15:51:39.823 回答