回顾性耙。 自制解决方案如何比付费解决方案更好

你好 我叫Alexey Pyankov,我是Sportmaster的首席程序员。 我马上要说“主要”并不意味着“所有程序员中最重要的”,不,这只是一个名字,对“高级+”如此迷人的翻译。


自2012年以来,我一直在Sportmaster工作,在这段时间内,开发团队做出了许多从技术角度来看很有趣的决定。 但是今天我想谈谈我们的工作,重点是在某些模棱两可的情况下我们如何推理。


本文不会包含应在您的项目中应用的特定技术解决方案(实际上是某种技术上的解决方案)。 相反,它反映了已完成的工作。 有如此特殊的时刻影响着我们作为一个团队-集会,磨练并测试了力量。 我会尽力告诉您这些时刻,团队合作的气氛,我们的耙子以及一些有时会导致自己陷入的心理陷阱。


图片


我将从2012年开始。


2012年,我当时的主要目标是在我们的旗舰网站上工作。 当时是“弗兰肯斯坦怪兽”:团队的一部分使用了我们的旧系统,该系统无法很好地处理负载(Bitrix),而团队的另一部分(包括我在内)则尝试实施新系统,该系统是根据“一次这是世界上最昂贵的电子商务。” 是他们“尝试实施”-因为该系统极力抵制,而且每当它被整理出来的每一刻,都会出现“惊喜”。 他们做了很多工作,但以蜗牛的速度进步了。


就我个人而言,最后一根稻草已经熟悉了这个“世界上最昂贵的电子商务”中的一种方法的代码,当时花了几个小时集中精力处理一个复杂的错误,导致一个事实,那就是在自定义标签的某个地方找到了原因, jsp中的html生成。 此自定义标签的任务是显示某些值的总和。 这还不错;自定义标签就是为此目的而设计的。 但是令人惊讶的是,事实是数据库中的某些数据发生了更改,以下页面上的行为都与之相关,并且如果按F5键,则重复调用,这违反了数据的一致性。 而且,它以仅在几步后就出现在序列的第三页上的方式受到侵犯。 不,我不介意团队中有这样的“忍者大师”,他的代码支持状态良好的同事的注意力。 但是就像那样,在最昂贵的系统中!


那是星期五。 我和一位同事在星期六和星期日在办公室里度过,以弄清公司今天对系统提出的任务以及一年中可以完成的任务。 因此,如果我们不被迫使用这个最昂贵,最经济的系统的框架,我们将如何解决它们。


言归正传。 我们进行了试点,为新Sportmaster网站的开发奠定了基础。 这些想法中的许多已经扎根,并且现在它们的延续正在现场积极进行。


试行阶段和时间表


2天 我们做了一个微型原型-周末,我们超过了ElasticSearch的基础,我们在进行方面搜索。 哇! 在相同的购买系统中,这样的设置“吃”了2周。 在这里-只需几个小时! 是的,它的运行速度更快。 并更快地获得订单。


2个星期 我们看到了一个原型,并添加了功能以实现适当的个性化交付。


例如,用户有几个与他特别相关的折扣和促销活动-然后在产品的搜索结果中,您需要准确显示可以使用所有可用的面包以最有利可图的方式获得的价格。


有了股票,一切都不是那么简单。 例如,我买了滑雪板,现在一顶帽子有40%的折扣,但同时取消了整个订单的10%的欢迎折扣。 是的,是的,这是一个真实的案例:)为了在采购系统中建立这样的促销活动,与供应商进行了3次协商,因此我们获得了许多如何进行其他促销活动的示例。 非常外交,考虑到咨询费用,在经济上也很不错。


向企业展示了详细的演示。 他们承诺迅速组装飞行员并立即开始工作。


2个月 试点项目-我们以带有目录搜索的实时站点的形式进行。 进行方面搜索,搜索结果-享受个人折扣,飞行员看上去几乎像Sportmaster的网站,并且我们填写了相同的产品。 亲爱的!


我们添加部门负责人的“口才:100”,并在Hooray上进行业务介绍! 他们使我们完全可以自行开发电子商务平台。


这就是说,保持,伙计们,团队,保持,伙计们,预算。 好酷!


2年 网站退出生产。 是的,很长一段时间。 那时我们所知道的,仅在原型的规模上进行了尝试。 两个人很容易组成一个凝聚力强的团队。 我们“抓紧”完成的任务-基本上都是新技术中“ Hello World”的小型文档。 我们很容易产生新的假设,迅速对其进行了检验,没有时间去坚持,因此,没有遗憾,他们就“杀死了”它们。 当我们成为10个人时,我们惯性地将工作速度推算给其他所有人。 他们承诺完成任务的最后期限,这等于美丽的想法,再加上我们的热情。


熟悉的情况? :)


然后,您已经知道接下来会发生什么吗?


1号陷阱 “强硬的外推器”


显然,新技术在演示中看起来非常酷,并且在“ Hello World”类别应用程序中显示出出色的结果。 但是现实通常离这还有些远。


所以在这里。 我们带库,编写了一堆应用程序代码。 我们认为单元测试是一个负担(我们很酷,我们在这里研究超音速,代码是现代的,依此类推)。 我们会在旅途中不断更改和修改API-认真,认真地进行了哪些测试。 所有这一切都以“冷静地优化开发过程”为旗号(是的,现在甚至很难描述它)。


然后一切都显而易见。


我们在uat上推出了一个新版本。 公司里的人兴高采烈地去测试这件事,然后按下按钮。 有时他们会很有创造力地按下-有些东西会掉下来。 然后去看看他们为此做了什么。 但是,在显示器的另一侧,并不是考虑到该地区的天气情况而向您推出所有环境特征的繁琐测试仪,但是客户已经倒闭了。 他只是“不工作”。 所以,他很不高兴。 问他-他将非常不高兴!


图片


然后,为了重现该错误,您必须去解决所有问题。 当然,我们并没有忽略任何投诉,而是解决了所有问题。 他们抛出了计划中的任务,但“扑灭了大火”。


因此,我们挖了下一个洞。


陷阱编号2。 “ Stakhanovets”


您没有得到最令人愉快的错误。 您开始了解。 它无法解决-愤怒-试图再次解决问题-另一个笨蛋-您指定了所有可能的方法-再次不是您考虑自己已经老了,每个人都有孩子和抵押的事实-您要再次尝试-不能再次尝试。 几杯咖啡,一切都会重复。 连续12-14小时几乎是正常现象。 而现在,当一切都已经达到极限时,爆炸,灵感!


图片


从外面看,也许可以正确,正确地评估这一天的有效性。 但是从内部看-可能会有所不同。


就我而言,这种工作的印象是“我做完了,我很酷,我退出了。” 并非总是有意识地,而是无意识地-总是!


坐下来,不要开玩笑。 事实证明,运动成功的内部指标已从结果转移到应用的努力数量上,以及您为解决问题而取得的成就,所受的苦难程度。


这可能是最糟糕的陷阱。


进一步,它将变得更加容易和有趣:)


陷阱号3。 “ Hello world的力量”


我们那个时期的技术栈:ElasticSearch,Hazelcast,Pentaho,freemarker(以及成熟的Java,Spring,Tomcat,nginx)。 Freemarker没有非常丰富地报告错误消息。 但是,ElasticSearch,Hazelcast,Pentaho必须进行几次修补-我们才华横溢地发现了在某些情况下它们无法按照文档中的说明工作。


使用新技术容易上手和快速烤制姜饼是好的,但它们会引起欣快感并降低机敏性。 因为新技术包含错误,所以它必然包含错误。 而且,如果您还没有写过关于它们的文章-很高兴,您有责任成为成为捡拾反正弯曲的东西并在Google或Google上搜索的先驱者。 当然,“弯曲的”可以在经过验证的产品中找到,但是在新产品中则容易得多。


图片


尽管有种种困难,我们还是投入了生产。 是的,有滞后。 是的,不是很稳定。 但总的来说-没有灾难。


总的来说,我再一次注意到陷阱,在这些陷阱中,人们对工作过程的健康认识被扭曲了。


  1. “强硬的外推器” 。 当前的成功给我们留下了深刻的印象,我们乐意将开发速度推算为即将到来的项目。
  2. “ Stakhanovets 我们为磨损而努力,我们对自己感到满意,但我们没有注意到我们解决的问题是我们个人错误/缺点/疏忽的结果。 尚未完成的工作。
  3. “你好世界的力量 我们赶紧介绍所有最新和最有趣的产品。

为什么会成功


当然,我并没有列出我们在这段时间内遇到的所有错误,而是列出了最常见的任何特定项目的错误。 此错误修复有助于避免将来发生这种情况。


关于我们通常如何在公司内部创建这样的小型初创公司并说服业务从已经购买的系统过渡到自己的某种方式的一些知识。


条件编号0 。 公司气候健康。 这不仅是员工的“灼眼”和在提取饼干的压力条件下的社交能力,没有。 这是关于所有交互的。


条件1 。 相信你所做的。 严重的是,我认为,如果我们不必在不了解所购系统的情况下进行试验,就不会有至少机会。换句话说,退后一步,不知不觉中就知道该系统更凉爽,并且被我们所占据。


我们的工作:1)我们找到了购买系统,以此解决了企业的基本要求2)列出了不仅现在存在而且可以预见的任务清单3)我们选择了更适合的解决方案。 然后,我们对决策进行评估-这是对专家的评估。


如果我们只是来说:“伙计们,所有这些垃圾,我们不想处理这个问题,并决定从头开始做我们的事情”,他们会给我们一些东西吗? 几乎没有 并且答案会以一种很容易记住的形式收到:)


条件2 。 第一步很小。 我们生成第一个假设并进行验证。 您可以在此花费自己的时间。 如果您不想浪费时间,那么您根本不应该处理这样的事情。 而且,如果您不想检验一个小的假设,但又想立即冷静而出色地进行操作,请远离此类人!


我们很幸运,第一个假设成立了。 但这并不总是会发生。 例如,在以下项目之一中,当管理员被提升为类似飞行员的一部分时,只有第18个选项对我们有效。 并且浪费了前17种射弹方法。 顺便说一句,在创建管理区的故事中,情节的曲折在巴西系列赛的水平上发生,因为该团队由当时已经是退伍军人的家伙组成,是真正的“磨碎的卡拉奇”。


条件编号3 。 我们做MVP,并在决策者身上寻找痛苦。 当然,从您第三十次给他带来某种冒险的事实就可以在他的脸上反映出恐惧。 但是还是。 并且一定要显示我们如何用我们的产品解决他的问题。


条件编号4 。 在膝盖上,我们迅速建立了一个看起来像最终结果的飞行员。 使所有内容真正酷起来是很诱人的,但是您会遇到完美主义,因为事实证明,您想要展示一个已经理想的产品的试用版而不是试用版。 但是它们不存在。 因此,至少要做成棍子。


条件5 。 产品。 该项目正在不断发展,获得了资金,专家们拥有了丰富的经验。
如果您是一家经典的创业公司,那么这正是您需要吹口哨的时刻。 因为最顶层的轻快飞行和所发生事情的总体感觉很快消失了。


进入该产品是与实际负载的冲突,与十几个系统的集成,并且当您创建新功能时,您将最终确定旧版本作为维护的一部分。 所有这些挑战比提出一个想法和解决方案(尽管很好,但仅仅是一个客户问题)要严重得多。


这些都是挑战,而技能的增长正是在这个阶段发生的。


感谢您的阅读。 祝新密码!

Source: https://habr.com/ru/post/zh-CN485088/


All Articles