简体   繁体   English

需求和技术设计是单方面的努力?

[英]Requirements and technical design as a single effort?

I've been working on a large, multi-year project as a web architect. 我一直作为Web架构师从事一个大型的多年项目。

So far, my responsibility has been to take requirements documentation provided by the customer's analyst and translate them into technical design documentation. 到目前为止,我的责任是获取客户分析师提供的需求文档,并将其转换为技术设计文档。

The 'powers that be' suggest that I take over the requirements documentation and combine them with my efforts on technical design. “存在的力量”建议我接管需求文档,并将其与我在技术设计上的努力相结合。

Is there a specific problem you see with combining requirements and technical design into one step? 将需求和技术设计整合到一个步骤中,您是否看到一个特定的问题?

Note that we are already well into development, so a lot of the technical choices (os, app framework, database, servers, etc) have already been set in stone. 请注意,我们已经处于开发阶段,因此许多技术选择(操作系统,应用程序框架,数据库,服务器等)已经确定。

"Is there a specific problem you see with combining requirements and technical design into one step?" “将需求和技术设计整合到一个步骤中,您是否看到一个特定的问题?”

Yes. 是。

Requirements have almost nothing to do with technical design. 需求几乎与技术设计无关。

Requirements define "what" must happen. 需求定义“必须”发生的事情。 Design explains "how" it will be built to make that happen. 设计解释了“如何”实现这一目标。

For instance, I want a beer -- that's my requirement. 例如,我要啤酒-这是我的要求。

Technical design could be 技术设计可能是

  1. Get off my chair and walk downstairs. 下我的椅子,走下楼。 Low cost. 低成本。 There's a risk here. 这里有风险。 There may be no beer. 可能没有啤酒。

  2. Get off my chair and walk to the pub. 从我的椅子上下来,步行到酒吧。 Higher cost. 成本较高。 There's little risk here. 这里没有什么风险。 Except Sundays when it's closed. 除周日关闭外。

  3. Ask my wife. 问我老婆 Huge risk here. 这里的风险很大。 Possible unintended consequences. 可能的意外后果。 However, I've delegated the problem and she now has to either find beer in the house, run to the store, or tell me to get my own. 但是,我已经下达了问题,她现在必须在屋子里找到啤酒,跑到商店,或告诉我自己买啤酒。 If she's going out anyway, we're back to low cost and no risk. 无论如何,如果她要外出,我们将回到低成本且无风险的状态。

One requirement. 一个要求。 Multiple designs for solutions. 解决方案的多种设计。 You can't work on both things in one step. 您不能一step而就。

You must document requirements (actors, use cases, conceptual data model, conceptual processing model) 您必须记录需求(参与者,用例,概念数据模型,概念处理模型)

You must then design a solution. 然后,您必须设计一个解决方案。 The solution may -- or may not -- involve creating new software. 该解决方案可能会(也可能不会)涉及创建新软件。

When studying requirements you often find situations where the users need to change the way they work. 在研究需求时,您经常会发现用户需要更改其工作方式的情况。 Requirements can be met a number of ways. 可以通过多种方式满足要求。

One person can both document the requirements and do the design. 一个人既可以记录需求又可以进行设计。 But you must do them separately. 但是您必须分别进行操作。 You must document the requirements in a way that they users understand and agree to the nature of the problem and what's required to declare the problem solved. 您必须以用户理解并同意问题性质以及声明已解决问题的要求的方式来记录需求。

Then -- separately -- you decide how best to optimize cost, risk, time-to-deliver, skills, available technology to offer some solutions to the problem. 然后-分别-决定如何最佳地优化成本,风险,交付时间,技能,可用技术,以提供针对该问题的一些解决方案。

If you're "well into development," I would hope that the majority of the requirements are pretty firmed up. 如果您正在“深入开发”中,我希望大多数要求都已经确定。 I don't argue that requirements need be set in stone before development begins (heaven forbid), but I'd hope it'd be pretty certain what kind of thing you're building by this point. 我不认为在开始开发之前就必须确定要求(禁止上天),但是我希望可以确定到现在为止您正在构建什么样的东西。 So if the point by now is just "requirements documentation" (rather than really digging into what the customer is looking for), I can't see any deep problem here. 因此,如果现在的重点只是“需求文档”(而不是真正地研究客户的需求),那么我在这里看不到任何严重的问题。

While there is a certain advantage to separating development from a "customer advocacy" role, a professional developer shouldn't have trouble keeping track of requirements without generating any conflicts of interest. 尽管将开发与“客户支持”角色分开具有一定的优势,但是专业的开发人员应该不遗余力地跟踪需求,而不会产生任何利益冲突。 Is there some other issue you were concerned about? 您还担心其他问题吗? Is requirements documentation even a large task at this point? 此时需求文档甚至是一项繁重的任务吗? Reducing the number of layers between the customer and the developer actually sounds like a pretty good thing. 减少客户和开发人员之间的层数实际上听起来不错。

Yes. 是。 Combining requirements and technical design clouds your thinking -- it prevents you from later coming up with new ideas about how to improve the system by doing a different technical approach/optimization. 将需求和技术设计相结合会笼罩您的思想-它阻止您以后提出关于如何通过执行不同的技术方法/优化来改进系统的新想法。

Especially in new technology areas, you may very well start off with the wrong approach. 特别是在新技术领域,您很可能会从错误的方法开始。 Combining the technical design and requirements induces you to think of your technnical approach as a requirement, when it could very well be scrapped and done differently. 将技术设计和要求结合在一起,可以使您将技术方法视为一种要求,而这种方法很可能会被废弃并以不同的方式进行。

Also, when it comes time to test (actually that time should be before design) then you may be testing your technical approach rather than what the porgram actually needs to do. 另外,当需要进行测试时(实际上应该在设计之前进行测试),那么您可能正在测试技术方法,而不是测试表实际需要做的事情。

I think there's great value in having requirements and design done by the same people. 我认为由同一个人完成要求和设计具有很大的价值。

If you're getting requirements, you'll actually be talking to the business. 如果您有需求,那么您实际上就是在与企业交流。 It'll give you a chance to learn the business and hear what they really need, unvarnished and unfiltered. 这将使您有机会学习业务,并了解他们真正需要的东西,不加任何装饰和过滤。 You'll have a chance to persuade them to talk about the problem in business terms instead of assuming a technical solution and jumping right to design (eg, "Add this column to this table and tie it to this text box on this page.") Maybe you'll be able to see ways of attacking a problem that they didn't even know existed. 您将有机会说服他们用商业术语谈论该问题,而不是假设采用技术解决方案并直接进行设计(例如,“将此列添加到此表中并将其绑定到此页面上的此文本框中。”)。 ),也许您将能够看到解决他们甚至不知道存在的问题的方法。

I do not have the opportunity to work in an agile team or scrum team, nor have I have the chance to apply them. 我没有机会在敏捷团队或Scrum团队中工作,也没有机会应用它们。 I do a lot of one-off development work for customers for 1~3 months. 我为客户做了很多一次性的开发工作,时间为1到3个月。 But one thing that I have learnt when in this kind of environment is: 但是在这种环境下,我学到的一件事是:

Sign off with the customer every stage of the project. 在项目的每个阶段与客户签署。

Which will answer your question as: Never mix requirements with design document. 这将回答您的问题: 不要将需求与设计文档混在一起。

Actually, it goes beyond that. 实际上,它不仅限于此。

  1. First off, sign off the Scope of Work (SoW). 首先,签署工作范围(SoW)。
  2. Then, sign off the Requirements. 然后,签署需求。

We have, in many times, seen unreasonable customers, who have ever changing requirements. 我们已经多次看到不合理的客户,他们的需求不断变化。 However, they do not expect to pay for these changes. 但是,他们不希望为这些更改付费。 If not managed properly, project cost will greatly outweigh and exceed the project income. 如果管理不当,项目成本将大大超过甚至超过项目收入。

Having a signed-off SoW protects you from out-of-scope requirements, eg. 签署的SoW可以保护您免受超出范围的要求,例如, "the vendor will install app xxx", and all of a sudden, "the client wants an entire PKI infrastructure installed to protect communication to app xxx". “卖方将安装应用程序xxx”,然后突然,“客户端希望安装整个PKI基础结构以保护与应用程序xxx的通信”。

Having a signed-off requirements protects you from sudden and unreasonable requirements, following a similar case from above, "there is no need to protect and encrypt communication to app xxx". 遵循已签署的要求,可以保护您免受突然的和不合理的要求,遵循上面类似的情况:“无需保护和加密与应用xxx的通信”。

Note that these are legal protection. 请注意,这些是法律保护。 It is still up to you to decide if a new requirement from the client should be done. 您仍然可以决定是否应该执行客户的新要求。 It is still good however to stress that they are not in the requirements and are purely done out of good will. 不过,仍然要强调,它们不在要求之内,纯粹是出于善意。

Merging the design document into the main requirements document prevent you from signing off the requirements document. 将设计文档合并到主要需求文档中可防止您签署需求文档。 The customer will be extremely happy about this, but I think your development team will hate the possible crunch time. 客户对此会感到非常高兴,但是我认为您的开发团队会讨厌可能的紧缩时间。

I did see an alternative approach people have (but not on merging design with requirements). 我确实看到了人们的另一种方法(但是没有将设计与需求合并)。

Split up the requirements document into a main file with seperate appendix files. 将需求文档拆分为带有单独附录文件的主文件。 Keep important and concrete things in the requirements document. 在需求文档中保留重要而具体的内容。 This allows you to sign off the requirements document, while allowing changes to the appendix be done at a later stage. 这使您可以签署需求文档,同时允许在以后的阶段对附录进行更改。 We mostly use this approach for support documents as the appendix. 我们主要将这种方法用于支持文档作为附录。 It might work with design doc as an appendix, but I have not seen a design doc as an appendix. 可以将设计文档作为附录使用,但是我没有看到设计文档作为附录。

Besides, in some projects, you might even want to sign off design doc before development starts. 此外,在某些项目中,您甚至可能要在开发开始之前签署设计文档。 Or these design/requirements/SoW are delivery or milestone payment. 或这些设计/要求/ SoW是交付或里程碑付款。

Really, try to avoid merging them. 确实,请尝试避免合并它们。

Requirements refer to what needs to be done. 要求是指需要做什么 Technical design refers to how the requirements can be fulfilled. 技术设计是指如何满足要求。

Disadvantages: 缺点:

  • One disadvantage of combining them is that, if you're a technical guy, you'll try to influence the requirements to make the technical task easier, focusing on how . 结合使用它们的一个缺点是,如果您是技术人员,则将着重于如何影响需求以简化技术任务。 In the end, you might develop a system that doesn't actually address (all) the problems of the user(s) of that system . 最后, 您可能会开发一个不能真正解决(所有)该系统用户问题的系统
  • Another disadvantage is that, while clarifying the requirements, the technical solution will need to be adapted to fulfill the new features/details that were clarified or discovered during requirements elicitation. 另一个缺点是,在澄清需求的同时,还需要对技术解决方案进行调整,以实现在需求获取过程中阐明或发现的新功能/细节。 That means modifying/rethinking the technical solution several times during requirements clarification . 这意味着在需求澄清期间多次修改/重新考虑技术解决方案

Possible advantage: 可能的优势:

  • Having an overview of the technical solution while discussing the requirements, you might "bend" or negotiate the requirements in order to avoid later discovery of technical issues (eg performance problems, unfeasible or costly features with added value not proportional with the cost of implementing them). 在讨论需求时对技术解决方案进行概述,您可以“弯曲”或协商需求,以避免以后发现技术问题 (例如,性能问题,不可行或昂贵的功能,增加的价值与实现成本成比例) )。 But you have to be careful not to invest too much on the technical design before the requirements are really clarified. 但您必须小心,不要在真正弄清要求之前在技术设计上投入过多。

Another difference in the two is that requirements development requires extensive contact with the client (external or internal client) and many good technical people simply don't have the people skills to manage client relationships well or to talk to actaul users without insulting them. 两者之间的另一个区别是,需求开发需要与客户(外部或内部客户)进行广泛的联系,而且许多优秀的技术人员根本没有很好的人际关系技能来很好地管理客户关系或与Actaul用户交谈而不会侮辱他们。 Only you can say if you do. 只有您可以说是否这样做。 You will find it is much harder and more complicated than you think if you haven't been doing it. 如果您没有做过,您会发现它比您想的要困难和复杂得多。 Plus you may find yourself asking the wrong questions because you are failing to see the viewpoint of the user since your expertise is in the viewpoint of the developer and designer. 另外,您可能会发现自己提出了错误的问题,因为您的专长是开发人员和设计师的观点,因此您看不到用户的观点。

Personally I also find that having multiple people involved in the design process (gather requirements and translate them into a design) is helpful in terms of idea generating and in terms of thinking of things the other person may have missed. 我个人还发现,在设计过程中涉及多个人(收集需求并将其转化为设计)对于产生想法和思考他人可能错过的事情很有帮助。 Moving from two people doing this to one may not a good idea from the standpoint of team synergy. 从团队协作的角度来看,从两个人转移到一个人可能不是一个好主意。 When the same person does both, it is easy to do things in only the way you are used to and there is no one else involved to challenge your assumptions until you are much farther along the path where it becomes more difficult to change. 当同一个人同时做这两种事情时,就很容易以您习惯的方式去做事情,并且没有其他人会挑战您的假设,直到您走得更远,这使得改变变得更加困难。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何根据需求或功能设计类 - How to design classes based on requirements or functionality 多个使用者和单个数据源的设计模式 - Design pattern for multiple consumers and a single data source 单页面webapp所需的设计建议 - Design recommendations needed for single page webapp Vim:技术方法 - Vim: Technical approach 为单点登录设计用户表以跨子域使用 - Design users table for single sign in to use across sub domains MySQL数据库设计-存储图像-单个表或多个表 - MySQL Database design - Storing Images - Single table or multiple tables 如何使用单个实体或单个存储库设计两个不同的项目? - How can I design two different projects with a single entity or a single repository? 什么是技术架构或三层架构 - what is Technical Architecture or 3 tier architecture 了解技术(Docker)容器架构 - Understanding the technical (Docker) container architecture 对于具有不同配置但代码库相同的应用程序,是否有一个技术术语? - is there a technical term for applications with different configurations but the same codebase?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM