
Quero compartilhar com você a história de uma vida boa e a morte longa, lenta e dolorosa de um portal imobiliário outrora grande. O qual não estava pronto para mudar e fazer movimentos bruscos para se adaptar a um mercado em mudança. Um produto que em 10 anos passou do TOP 10 para o fundo. Esta é uma história sobre a importância do encadeamento que conecta os desenvolvedores, com sua compreensão e boa mente, e os gerentes / diretores / gerentes com sua abordagem ao gerenciamento de projetos.
Iniciar
Eu vim para este trabalho em 2014, um simples .net junior. O PN (doravante denominado portal imobiliário) era um agregador de imóveis, no qual, além do banco de dados de anúncios, havia uma seção de notícias temáticas de qualidade. Notícias, artigos, leis e muitos materiais diferentes no setor imobiliário. Um grande departamento de jornalistas legais escreveu artigos muito legais, cujo interesse era muito alto entre os usuários.
O site em si era livre para colocar anúncios, o que atraía usuários (vendedores particulares, agências imobiliárias). Toda a renda foi gerada devido ao habitual nesta área de colocação de blocos de texto e gráfico (TGB) de desenvolvedores que promovem seus novos edifícios e edifícios residenciais.
No auge (2008 - 2012), o site tinha tráfego de mais de 1.000.000 de visitantes únicos por mês. E ele deu uma boa conversão para os anunciantes. Esses foram excelentes indicadores, já que o PN funcionou apenas para Moscou e São Petersburgo. A equipe consistia em 2 programadores e muitos jornalistas e editores. De fato, toda a manutenção, suporte e refinamento do PN foi realizada por apenas 2 funcionários (quantas pessoas originalmente projetaram e desenvolveram a história do PN são silenciosas).
É aqui que a parte positiva da história termina.Outono
Após a primeira onda da crise, o site começou a ter problemas de tráfego e problemas muito sérios. Ele apenas começou a cair. O mercado começou a mudar rapidamente. Os concorrentes começaram a esmagar, porque enquanto nosso PN descansava sobre os louros e não se desenvolvia em lugar algum, outros tornaram seus produtos mais modernos e atendem às expectativas dos usuários.
Além disso, os mecanismos de pesquisa começaram a ficar cada vez menos parecidos com o nosso site, que por sinal praticamente não possuía nenhum tipo de CEO. Sim, havia alguns modelos de h1, título, descrição, um pouco mais de recolocação e, em geral, isso é tudo (após o início do outono e até o fim, o chefe do mosteiro iniciou uma batalha de CEO, o que estávamos fazendo há quase 5 anos).
Com a segunda onda da crise em 2014, o desempenho caiu abaixo de 300.000 visitantes únicos por mês. Nessa época, consegui um emprego.
É aqui que minha parte técnica da história começa .
Imersão
Nos primeiros 2 anos, trabalhei como desenvolvedor júnior. Ele fez tudo o que eles me deram. Eu tive que aprender muito do zero. No entanto, tive sorte com meu gerente de desenvolvimento. Ele tinha pouco mais de 40 anos, um programador da velha escola, que sabia muito e sabia como. Provavelmente, seu principal credo era - funciona e é bom (sou muito grato a ele, porque adotei muito conhecimento e várias abordagens de desenvolvimento).
Nossa pilha de tecnologia era a seguinte:
MS SQL Server 2012 + ASP.NET MVC 3 . A base mantinha tudo em si. Até fotos em formato binário, para 3 tamanhos definidos (grande, grande, pequeno).
O back-end incluía vários módulos:
- Seg site
- Área de administração geral
- Administrador de SEO
- Analisador de robô KLADR
- Robô de importação de feed XML
Todo esse tempo eu estava apenas realizando tarefas para que o código funcionasse e não houvesse erros. Especialmente sem se aprofundar ou pensar em novos desenvolvimentos. Mas chegou a hora e tornou-se necessária.
No segundo ano de trabalho, meu gerente deixou o projeto. E fiquei cara a cara com esse colosso antigo, no qual era 3% do meu código à força.
Foi um estresse selvagem . O CEO me perguntou tudo e, às vezes, eu não fazia ideia do que e como funcionava. Naturalmente, a vida me fez e, gradualmente, mergulhei em todos os processos e percebi que essa abordagem “funciona - bom” não é para mim. Neste momento, eu li muitos materiais de design, fui educado no campo de tecnologias e estruturas populares. Eu estava voltando do trabalho para casa e pensando sobre o que e como faria amanhã. E quando eu estava dirigindo para o trabalho, pensei se o que decidi ontem estava certo. Eu queria entender como fazer tudo de forma correta e conveniente. Para não precisar fazer muletas, duplique o código, teste tudo ao vivo, implante tudo manualmente e recuse boas idéias devido a alguns erros de design no passado.
Nessa época, tínhamos feito muito em SEO, abandonando tarefas destinadas a melhorar a interface do usuário. No entanto, o tráfego caiu cada vez mais baixo. E em algum momento o projeto foi congelado. Comecei a lidar apenas com o suporte e a correção de bugs ... Então parecia oficial.
De fato, comecei a reescrever completamente o sistema a partir de quase 0. Eu tinha que fazer isso secretamente no manual. Afinal, eles nunca nos deram tempo. Eles sempre disseram que precisamos mais rápido, mais rápido. Que estamos por trás de tudo isso. E você precisa criar um produto competitivo em 4 mãos e melhor que o resto. Portanto, se eu dissesse que planejava refazer tudo, então você mesmo entende qual resposta eu ouviria.
Ascensão imaginária
Então, arregaçando as mangas, comecei a conceber. Eu escolhi a arquitetura clássica de três camadas.
O back-end .Net Core + SQL + Mongo, o front-end é Bootstrap + JQuery + KnockoutJS .
Organizou uma camada de dados. Interfaces, abstrações, repositórios estão bem. A camada funcionou nos procedimentos armazenados (felizmente, comecei a entender SQL muito bem). Para o mapeamento, escolhi o Dapper. É simples e direto. Recusou o InMemoryCache em favor do Redis para trazer o cache para um servidor separado. Em seguida foi o nível da lógica de negócios. Todas as mesmas interfaces, serviços, DI. Portanto, a fundação apareceu na forma de Camada de dados (procedimentos armazenados + Dapper + Redis) e Camada lógica. Demorou cerca de 3 meses.
E aqui, depois de quase um ano de trabalho, consegui um assistente para mim sozinho, insistindo que havia muitas tarefas (e havia muitas). Juntos, tudo correu muito mais rápido e melhor, e mais importante ainda, mais racionalmente.
- Primeiro, desenvolvemos uma API para fotografias . Era um WebApi simples, que na solicitação Get fornecia a imagem da qualidade e tamanho desejados do disco. Mudamos para o SSD e esquecemos o banco de dados de imagens como um pesadelo. É difícil descrever com que rapidez a página média do site começou a carregar após a alocação de um pool separado para isso.
- Abandonamos a KLADRA em favor do FIAS . Eles criaram um serviço de alta qualidade para analisar dados do FIAS em nosso banco de dados, levando em consideração nossos recursos. Eles lhe deram um serviço de geocodificação de casas. Tudo funcionou quase como um relógio. Ocasionalmente, havia bugs associados a locais ou ruas duplicados no banco de dados FIASA.
- Eles escreveram uma nova conta pessoal por um longo tempo, compartilhando-a no site. Ele foi projetado e planejado por um longo período de tempo, para facilitar o uso. Bem como rápido e funcional. Eles estragaram o pagamento e, em seguida, fiscalizaram os cheques (sim, não podíamos dar ao luxo de usar soluções integradas prontas). No geral, fez um bom serviço ao usuário. E eles ficaram satisfeitos com ele.
- Finalmente, chegamos ao robô para importar feeds XML . Criou um validador conveniente e um bom registro para os clientes. O novo serviço mostrou-se tão otimizado que, se o antigo (usando EF) funcionou por cerca de 6 a 8 horas, o novo processou a mesma quantidade de dados em 2 a 3 horas.
- Afinal, eles criaram um domínio com documentação para tudo o que é. Eles expuseram todos os pontos para usuários e clientes do portal e também descreveram uma parte da documentação que será útil para os desenvolvedores. E isso é realmente importante!
- O último passo foi otimizar a base . Nós o reformulamos completamente. Limpamos tudo desnecessário. Eles alcançaram uma aceleração da velocidade de pesquisa de 4-5 segundos a ~ 300 ms . Eles criaram índices, escreveram consultas complexas, usaram dicas e até fizeram partições de tabelas estatísticas.
Infelizmente, as mãos não conseguiram chegar ao próprio site. Porque quase todas as tarefas do site foram relacionadas ao SEO, o que levou um tempo decente. Novas páginas, novas coleções, novas regras. Mais, mais, mais páginas. Eu tive que editar constantemente algo no mecanismo do site, o que não me permitiu transferi-lo simultaneamente para a base criada.
Aqui a história técnica termina e o triste epílogo começa.
Vale a pena começar pelo fato de o CEO do site não estar conectado à esfera de TI. Portanto, muitas decisões foram tomadas por eles incorretamente e individualmente. Muitas vezes, as discussões pararam, pois nossas novas idéias não foram aceitas, porque
"Isso não é necessário, estou lhe dizendo como especialista em imóveis"
ou
"Então, ninguém está olhando, esta é uma consulta de baixa frequência, tenho certeza"
E depois de algum tempo, quando ele mesmo chegou a isso, nossas idéias foram oferecidas a eles com uma alegação, por que não tínhamos dito antes ou com sincera surpresa
"Eu não poderia dizer isso, isso é um absurdo"
Não conseguimos chegar a um consenso, como resultado, nós (desenvolvedores) éramos simplesmente inferiores. E eles fizeram conforme solicitado. A dor do programador - tornar inúteis "recursos" para ninguém.

Gostaria de mencionar que o financiamento sempre teve problemas.
Não houve investimentos, exceto em SEO . Mesmo mantendo 2 programadores era caro. Obviamente, era impossível competir com os novos portais do TOP-10 com esse nível de financiamento e gestão.
Como resultado, temos uma plataforma para um portal agregador de imóveis. Escalável, expansível, rápido e tecnicamente pronto para qualquer desastre. Com grande potencial. Bom código, muletas mínimas e poucos gargalos.
No entanto, isso não deu um resultado positivo. Na época do meu último dia útil, apesar da presença de 4 milhões de páginas exclusivas nos mecanismos de pesquisa, o tráfego do portal flutuava em torno de 1.400 páginas únicas por dia. E isso, me parece, afirma a morte.
PS: De toda a história que pude pessoalmente, fiz uma conclusão principal. Você pode fazer um bom produto do ponto de vista do desenvolvedor, mas ele não estará absolutamente em demanda, porque não possui gerenciamento adequado. Se a linha entre os funcionários que mantém os negócios à tona for rasgada, seu produto certamente irá para o fundo.