创业公司的产品设计 - 征询意见

时间:2016-12-15 00:39:21

标签: desktop-application startup application-design

我在一家小型创业公司工作,而且最近毕业的人对系统的设计和规划几乎没有经验。我们有一个旧的但设计合理的产品,我们从另一家公司那里获得了产品,该公司关闭并向我们提供产品以换取股票。该产品已过时,采用Java编写,有两个版本。 V1不是很好 - 意大利面条代码,大型代码库等.V2大大改进,设计简洁,更薄更快,但我们公司的功能愿望略有不同,我们完全不能使用V2。该应用程序是一个守护程序,在后台运行,只有在安装和配置期间对用户可见 - 非常小的GUI。

时间表也是一个问题:我们有两个月的时间,直到一个重要的里程碑。

选项1: 使用V2的核心并使用我们想要的内容进行更新。该程序是一个桌面客户端,可以完成一些工作,并将结果发送到我们的服务器API。它在Java中,而我们的服务器在NodeJS中。

优点:

  • 许多基础工作(Windows集成(注册表,会话等)更新,安装,分发)已经完成并且运行良好。
  • 我们实际可以重用的逻辑大约有70%存在。
  • Java已经成熟,拥有出色的数据库驱动程序支持,良好的打包和分发工具。我们不知道如何最好地分发Java应用程序,但使用NSIS安装程序似乎运行良好。即使将JRE与应用程序捆绑在一起也可以。

缺点:

  • Java需要一组不同的技能和堆栈。选项2(见下文)是使用Electron和JS。我觉得如果我们能避免这种情况 - 我们应该这样做。
  • 我们需要GUI,并且在不久的将来可能会有一个真实的桌面客户端,其完整的GUI与我们的Web应用程序相匹配。这在Java中并不容易,但可以在JS中完成(从网上迁移)。
  • 个人(这是非常主观的,并且从阅读科技新闻)Java的技术从长远来看可能有点过时,而且从长远来看,像Electron这样更现代的东西更好。我个人来自Java和C ++背景。

选项2: 使用JS和Electron从头开始构建。

优点:

  • 尽管Electron不是很成熟,但它可能会增长更多并且对它的支持正在增长。因为我们将为未来建立一个新的应用程序,因为新的东西是有意义的。这似乎是一个前瞻性的解决方案。
  • 与网络堆栈相同的技能:它只是JS。
  • 使用Electron进行分发的目的很简单(它现在不是很好,但很快就会出现)。

缺点:

  • 没有完成任何基础工作。我的研究表明,带有原生库的Electron在分发过程中很痛苦,更新器并不完美,而且很多模块都没有很好的生产准备。 Java感觉很坚固,但Electron现在感觉不稳定。我们没有像Slack或Atom这样的团队必须通过Electron来解决电子问题。
  • 所有应用程序都需要从头开始编写
  • NodeJS对SSPI和Windows身份验证的支持很糟糕(没有SSPI支持),而SQL-Server驱动程序也不像Java那样工作(因为这样)。
  • 电子还很不成熟(已经说过了)。

最后一个选项是考虑C#和所有Windows开发,但这基本上类似于选项2:我们也必须学习所有内容,同时我们在团队中提供Java和JS技能组,但没有C#技能。

这可能是一个奇怪的问题。如果有人有类似情况的经验或只是感兴趣,我真的很感激一些建议。

2 个答案:

答案 0 :(得分:3)

作为最近的毕业生,我建议你不要做出这些决定,并与组织的建筑师或治理专业人士(如果有的话)交谈。

如果很少有人担任该职位,请深入思考利弊并提出您的发现。这不是您应该做出的决定。提供指导,但让Business决定Cheap / Fast / Good三角形的风险/成本/时间平衡。

请记住,作为一个乐观的开发者(我认为我们通常都是),我们倾向于低估任何项目的生存时间。对我来说,我发现,如果我将我本能的估计乘以我之前所做的事情,我已经做了2.5倍,那么我最终会接近准确的估计。如果这是我可以想象的东西,但之前没有实现我采取本能的,乐观的估计并乘以7!

祝你好运!

答案 1 :(得分:0)

我不确定选项2是否可行。

电子是非常棒的,绝对是很多地方将来会使用的东西,但看看已经使用它的人,Slack,VScode。他们是有时间的大型服装和跨所有平台工作的人。我听了VScode的一个播客,他们有很多样板工作要做,以便在所有系统上运行。不知道电子家伙在此之前是否大量聚焦在窗户上。

然而,这不是主要问题。我想你必须考虑时间,我赞同蒙扎。把你的估计和时间至少计算为4.如果项目需要花费几个月的时间,那么你就麻烦了。我之前曾为创业公司工作过,如果你开始做任何新的事情,需要花费几个月的时间,他们会变得神秘,让你在遗留代码中做得越来越多。你也可以在制作一个新系统的时候永远推迟这个错误,所以你最终放弃了新项目,大多数重写都会在那里结束,除非你有很多钱。

我认为你拥有的最佳选择,以及之前的许多选择是迭代地改变项目。不确定它是否可能,但你可以从java应用程序创建一个视图,如下所示:https://docs.oracle.com/javase/8/javafx/embedded-browser-tutorial/overview.htm并调用以node / angular编写的后端(因为你有技能)并托管在网络上?然后,您可以缓慢地构建功能并在当前应用程序上进行迭代,直到您将其全部替换为止,并且还有一个通用的Web /桌面视图。

Facebook拥有大量用不同语言python,ruby和js编写的遗留代码。如果它对他们来说足够好......