我们如何创造技术产品并跌入谷底



我想与您分享一个曾经是大型房地产门户网站的美好生活以及漫长,缓慢和痛苦的死亡的故事。 为了适应不断变化的市场,它们还没有准备好改变并做出突然的动作。 十年来,该产品已从TOP-10降到最低。 这是一个关于线程的重要性的故事,该线程将开发人员与他们的理解和甜蜜之心以及经理/董事/经理与他们的项目管理方法联系起来。

开始


我在2014年加入一个简单的初级.net从事这项工作。 PN(以下称为房地产门户网站)是房地产的集合商,除公告数据库外,还有一个高质量的主题新闻版块。 新闻,文章,法律以及有关房地产的许多不同材料。 一个很大的很酷的记者部门写了很酷的文章,用户对此很感兴趣。

该网站本身可以自由放置广告,从而吸引了用户(私人卖家,房地产代理商)。 所有收入的产生是由于在该领域中通常由广告商投放文本图形块(TGB)来推广他们的新建筑物和住宅建筑物。

在鼎盛时期(2008年-2012年),该网站每月的独立访问量超过1,000,000。 他为广告客户带来了不错的转换。 鉴于PN仅在莫斯科和圣彼得堡有效,因此这些指标非常出色。 工作人员由2位程序员以及许多新闻记者和编辑组成。 实际上,PN的所有维护,支持和完善工作仅由2名员工完成(最初设计和开发PN历史的人数是沉默的)。

这就是故事的积极部分结束的地方。

跌倒


在第一波危机过后,该站点开始出现交通问题,而且非常严重。 他刚开始跌倒。 市场开始迅速变化。 竞争对手开始暗恋,因为 尽管我们的PN固步自封,没有在任何地方发展,但其他产品使他们的产品更加现代化并满足了用户的期望。

另外,搜索引擎开始越来越像我们的网站,顺便说一句,它实际上没有任何首席执行官。 是的,有一些关于h1,标题,描述的模板,还有一些重新链接,但总的来说,就是所有这些(在秋天开始之后,直到垄断君主的头开始了CEO之战,而我们已经进行了将近5年)。

随着2014年危机的第二波冲击,每月的独立访客访问量下降到30万以下。 大约在这个时候,我找到了工作。

这是我故事的技术部分的起点

浸入


我担任初级开发人员的前两年。 他做了他们给我的一切。 我必须从头学习很多东西。 但是,我很幸运能与我的开发经理一起工作。 他是40多岁的老程序员,他知道很多,也知道怎么做。 也许他的主要信条是-它行之有效而且很好(我非常感谢他,因为我采用了很多知识和各种发展方法)。

我们的技术栈如下: MS SQL Server 2012 + ASP.NET MVC 3 。 基地保留了一切。 即使是二进制格式的照片,也可以设置3种大小(大,大,小)。

后端包括几个模块:

  • 周一网站
  • 一般行政区
  • SEO管理员
  • 机器人解析器KLADR
  • XML提要导入机器人

一直以来,我只是在做任务,以便代码正常工作,并且没有错误。 尤其是无需研究或考虑进一步发展。 但是,时机已到,它已成为必要。

在工作的第二年,我的经理离开了该项目。 我与这个古老的巨像面对面,这是我强制执行的代码的3%。

那是野性的压力 。 首席执行官问我所有事情,有时我不知道它的作用和作用方式。 自然地,生活使我逐渐进入了所有过程,并意识到那种“行之有效的”方法对我而言并不适合。 这时,我阅读了很多设计材料,受到流行技术和框架领域的教育。 我下班开车回家,想着明天我会做什么。 当我开车去上班时,我想到了昨天的决定是否正确。 我想了解如何正确,方便地进行所有操作。 为了不必费力,重复代码,实时测试所有内容,手动部署所有内容,并由于过去的一些设计错误而放弃了好主意。

到这个时候,我们已经在SEO上做了大量工作,放弃了旨在改善UI的任务。 但是,流量越来越低。 在某个时候项目被冻结了。 我开始只处理错误的支持和更正。因此听起来很正式。

实际上,我几乎从0开始完全重写系统。我不得不从手册中秘密地进行操作。 毕竟,他们从来没有给我们时间。 他们总是说我们需要更快,更快。 我们如此落后。 而且,您需要用4只手制造出具有竞争力的产品,并且要比其他产品更好。 因此,如果我说我打算重做所有事情,那么您自己就会明白我会听到什么答案。

虚幻的崛起


因此,我rolling起袖子开始构思。 我选择了经典的三层体系结构。 .Net Core + SQL + Mongo后端,前端是Bootstrap + JQuery + KnockoutJS

组织了一个数据层。 接口,抽象,存储库都可以。 该层适用于存储过程(幸运的是,我开始非常了解SQL)。 对于映射,我选择了Dapper。 它很简单明了。 拒绝InMemoryCache以支持Redis,以便将缓存带到单独的服务器。 接下来是业务逻辑级别。 所有相同的接口,服务,DI。 因此,基础以数据层(存储过程+ Dapper + Redis)和逻辑层的形式出现。 花了大约3个月的时间。

在这里,经过近一年的工作,我设法独自为我找了一个助手,坚持要完成很多任务(其中有很多)。 在一起,一切都变得更快,更好,最重要的是更加合理。

  1. 首先,我们开发了用于照片API 。 这是一个简单的WebApi,在Get-request上可以从磁盘上获得所需质量和大小的图片。 我们改用SSD,却忘记了映像数据库的噩梦。 很难描述为此分配一个单独的池后,网站平均页面开始加载的速度。
  2. 我们放弃了KLADRA,而选择了FIAS 。 他们编写了一项高质量的服务,以考虑到我们的功能,将数据从FIAS解析到我们的数据库。 他们给他拧了一个为房屋编码的服务。 一切工作几乎像一个时钟。 仅偶尔在FIASA数据库中存在与重复的位置或街道相关的错误。
  3. 然后,他们写了很长时间的新个人帐户 ,并从网站上共享了该帐户 。 它的设计和规划时间很长,因此非常易于使用。 以及快速和功能。 他们搞砸了给他的付款,然后将支票财政化(是的,我们负担不起使用现成的集成解决方案)。 总体取得了良好的用户服务。 他们对他很满意。
  4. 最后,我们进入了用于导入XML feed机器人 。 为客户提供了方便的验证器和良好的日志记录。 事实证明,新服务已经过优化,如果旧服务(使用EF)工作约6-8小时,那么新服务将在2-3小时内处理相同数量的数据。
  5. 毕竟,他们提出了包含所有内容的文档领域 。 他们为门户网站的用户和客户列出了所有要点,还描述了文档的一部分,这将对开发人员有用。 这真的很重要!
  6. 最后一步是优化基础 。 我们完全对其进行了重新设计。 我们清理了所有不必要的东西。 他们将搜索速度从4-5秒提高到了300毫秒 。 他们创建了索引,编写了复杂的查询,使用了提示,甚至对统计表进行了分区。

不幸的是,人们并没有设法到达现场。 因为 该网站的几乎所有任务都与SEO有关,这花费了大量的时间。 新页面,新集合,新规则。 更多,更多,更多页面。 我不得不不断地在站点引擎中进行编辑,这不允许我同时将其转移到创建的基础上。

技术故事到此结束,悲哀的结尾开始。


值得一提的是,该站点的首席执行官未与IT领域建立联系。 因此,他们做出了许多错误且个别的决定。 很多时候,讨论陷入僵局,因为 我们的新想法未被接受,因为
“这不是必须的,我是作为房地产专家告诉您的”
“所以没有人在寻找,我敢肯定这是一个低频查询”
过了一段时间,当他本人来到这里时,我们的想法被提出来了,声称是为什么我们以前没有说过,或者真心惊讶
“我不能这么说,这很荒谬”
我们无法达成共识,因此,我们(开发人员)简直逊色。 他们按照要求做了。 程序员的痛苦-为任何人提供无用的“功能”。



我想提一提,金融一直存在问题。 除SEO外,没有任何投资 。 即使聘请2个程序员也很昂贵。 在如此高的融资和管理水平下,与TOP-10中的新门户竞争显然是不可能的。

结果,我们有了一个用于房地产聚合器门户的平台。 可扩展,可扩展,快速且在技术上可应对任何灾难。 潜力巨大。 良好的代码,最少的拐杖和很少的瓶颈。

但是,这并未产生积极的结果。 在上一个工作日,尽管搜索引擎中存在400万个唯一页面,但门户网站流量每天仍在1400个左右唯一页面上波动。 在我看来,这表明死亡。

PS:就整个故事而言,我个人可以得出一个主要结论。 从开发人员的角度来看,您可以制作出优质的产品,但是绝对不需要,因为 没有适当的管理。 如果员工之间维持业务持续发展的线程被撕毁,那么您的产品肯定会走到最底层。

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


All Articles