如何使用未知的未来修改和功能对应用程序进行编程?

Jes*_*sse 2 php client web-applications future-proof

背景

我不是编程的新手,但是我在处理客户及其需求方面.这是我当前客户端的历史记录:我继承了一个PHP应用程序,它已经完成了2/3,继续完成100%,直到客户端需要(主要)功能导致应用程序和数据库需要重写.我花了两周的时间来起草新应用程序如何与新的更改以及其他所需功能一起工作,并在批准之后再次开始构建应用程序.我现在被要求添加在新版本之前未讨论的新功能 - 而且它们非常重要.此外,整个应用程序现在有超过300个用户 - 使其更难.

忽略客户端要求最初未讨论的功能的事实.如何使我构建的应用程序功能证明?在一个完美的世界中,客户端会确切地知道应用程序应该具有哪些功能,这将使我的工作变得更加容易.但事实并非如此,我所谈论的这些主要功能是在起草应用程序时应该包含的功能,而不是在应用程序处于活动状态时 - 尽管这个问题对于应用程序的任何未来修改或功能都是通用的.

我不喜欢告诉我的客户他要求的功能或更改是如此重要,以至于我必须重写整个应用程序(再次).然而,在写这篇文章的时候,我想到,如果没有重新启动就无法添加该功能可能不是我的错.但这似乎几乎是他想要的任何新功能,因为有些东西已被硬编码用于应用程序并且现在更改它们以便新功能无法正常工作.

任何有关这种情况的个人经历都会很棒 - 我希望我不是唯一一个处理这种情况的人,因为它可能非常令人沮丧.谢谢!

Bil*_*win 5

请放心,这是一个老问题.大多数程序员不得不与每天对应用程序有新视野的经理或决策者打交道.他们似乎并不明白,自动化某些东西需要花费更多的工作,而不是高水平地描述它.他们似乎也不明白,要告诉他们拆掉你刚才努力工作的东西,会损害他们工人的士气.

试图预测可以要求重新设计软件的所有方法是一个难题.有些人建议使用钩子,以便您可以在工作流程的任何给定步骤添加新功能,而无需拆除应用程序.但是你应该添加哪些钩子?如果工作流本身需要改变怎么办?

许多软件开发人员使用敏捷软件开发极限编程或其他迭代方法等方法.

迭代开发的一个常见想法是,您不应该试图预测未来的所有变化.你预期的一些变化当然会发生,但它们中很多都不会发生变化,因此你预测可能发生变化的工作就是浪费精力.

所以你应该编写今天所需的软件.当事情发生变化时,你将不得不重写其中的一部分,但这是正常的,不可避免的.并且它的大部分可能不会改变,因此更简单的设计更好.我们的假设是,只关注当前的需求,就可以减少整体工作量,从而实现净赢.

当然,他们还说你应该优雅地做出反应,以便在事情发生时做出改变,并通过经常与客户(或经理)沟通来减少浪费的时间.在这种情况下,模型和原型是有用的工具.另外,不要害怕真实地告诉您的经理需要多长时间才能重新设计软件以满足他的描述.您可以通过提出一些妥协来提供帮助.例如,他要求的单一功能通常是您需要重新架构的原因,否则更改将会更加轻微.因此,请公开谈论这一点,并进行对话,看看是否有另一种方法可以在没有这么多工作的情况下解决相同的需求.如果他能够更快,更便宜地满足这种需求,那么这也符合他的利益.

但最终,你可能面临一个完全没有意义的经理.在这种情况下,无论是协商还是改进方法都无济于事.不要为那些一直不尊重你,你的时间和工作成果的人工作.不要让他们走遍你或者内疚 - 让你长时间工作.

另请阅读这篇幽默作品,这可能反映了您的情况:如果建筑师必须像程序员一样工作.