No final de 2017, decidi firmemente que queria passar para um cargo gerencial.
A programação em si me atraiu muito menos do que o que acontecia em um nível superior, ou seja, pensar sobre os processos de negócios, planejar a arquitetura de aplicativos e organizar o trabalho.
Eu me sentia menos como um jardineiro que cultiva um pequeno pedaço de terra dia após dia, vendo os brotos emergirem do solo, como um agricultor que tem que colher e depois vender a safra de um campo gigante do tamanho de um país europeu.
A escala e a eficiência me inspiraram.
Eu queria fazer o que quisesse, mas isso era impossível até que me tornasse um líder.
Nesse ínterim, minha carreira em meu emprego atual atingiu claramente o teto. Durante dois anos levantei vários projetos, me tornei desenvolvedor sênior ... Além disso aqui dava para progredir apenas no futebol de mesa.
Portanto, quando me ofereceram um emprego no Sberbank, fiquei feliz em sair. Especificamente - em DomClick.
DomClick
Quando cruzei o limiar do novo escritório, me encontrei em uma posição única: descobri que eu seria o único desenvolvedor Ruby na empresa.
Em uma equipe de trezentos funcionários, simplesmente não havia um departamento fisicamente adequado. Não havia nenhum lugar para me colocar. Quando essa pergunta surgiu, o diretor de TI da empresa pensou por exatamente dois segundos e apontou para uma mesa próxima, que estava vazia por um motivo óbvio. É tão inspirador quando a gerência pode ver a tela do seu laptop com um leve movimento de cabeça (não).
Eu era necessário para uma tarefa específica. A gerência estava decidindo se compraria uma startup bancária americana para complementar a linha de produtos da DomClick. Os gastos foram planejados para serem grandes, por isso foi necessário adaptar e lançar o projeto para mostrar às pessoas quem vai tirar esse dinheiro do bolso.
O início foi em Ruby, então eu era necessário. Foi uma chance. Se o comprassem, seriam necessários mais rubistas. e com um alto grau de probabilidade eu me tornaria seu chefe. Uma pequena larva alienígena presa em um organismo gigante DomClick. Gosto de pensar assim, imaginar que a partir deste momento começa a minha conquista deste universo.
Mas dois meses depois, no novo local, descobriu-se que o violinista não era mais necessário. Os tops olharam para o projeto em que eu estava trabalhando e decidiram esperar.
Rubistas não pertencem aqui
Eu me descobri sem trabalho, um único programador Ruby cercado por dezenas de equipes bem coordenadas de javists, pythonists e desenvolvedores front-end. Não foi planejado recrutar nenhum outro rubista.
Felizmente, minha gerência em geral gostou da maneira como eu fazia o trabalho, então não havia dúvida de demitir. Eles também não sabiam o que fazer comigo. “Tchau, pense em como você pode ser útil para a empresa. Talvez você possa tentar algum código Go? " - o chefe me disse. Eu era tão desnecessário que em algum momento parou de parecer uma má ideia. Para imaginar o desespero da minha situação, você precisa entender o que estava acontecendo na empresa naquela época e o que é DomClick em geral.
Se nos últimos 5 anos comprou / vendeu um imóvel, então com um alto grau de probabilidade deve conhecer este site. Em particular, por causa dele, a NTV não remove mais publicações sobre corretores de imóveis sangrentos e não ouvimos essas histórias arrepiantes sobre como alguém foi sequestrado / torturado / morto quando decidiu trocar o pedaço de copeque de sua avó no centro. A DomClick ofereceu ao mercado uma maneira conveniente e segura de comprar / vender imóveis.
O projeto ainda era jovem, mas já naquele momento todos perceberam que estavam presentes na véspera de um grandioso nix. Nasce um gigantesco site com dezenas de serviços que serão utilizados em todo o país e além. Serão necessários milhões de linhas de código, o que significa que muitos programadores serão capazes de alimentar suas famílias por anos, comprando vales para sogras em um sanatório e selos para esposas.
Mas primeiro foi necessário decidir sobre o que esses serviços seriam escritos. Infelizmente para mim, a discussão foi encerrada quando cheguei - a xícara foi dividida entre os desenvolvedores em Java e Python. Javists estavam principalmente envolvidos em serviços internos e carregados, integrações com o banco, e os pythonists receberam tarefas mais orientadas para o cliente e novos lançamentos. Cada um deles estava se preparando para comprar um apartamento e um bloco de ações da Tesla nos próximos 5 anos, ir para Ba̒li e encontrar uma garota modelo.
Separar-se deles com alguma outra tecnologia não era realista.
Normalmente, o nascimento de um novo projeto acontecia assim: o negócio tinha uma ideia, procurava o diretor de TI e ele já estava selecionando uma equipe de programadores vaga para o projeto, ou recrutando uma nova.
O que um Rubista poderia fazer em tal situação? Posso levantar minha mão e dizer: "Mas Ruby já tem joias prontas para tudo isso"? Este seria um caso completamente perdido por três razões:
- Todos achavam que Ruby era simplesmente desnecessário. Python e Java são suficientes para os olhos.
- Além do fato de que Ruby é desnecessário, também é apenas uma linguagem de programação ruim. Absolutamente não esfregando.
- O terceiro motivo, talvez o mais sério: eu sou o único programador Ruby da empresa, o que significa que não vou puxar trabalho em nada mais ou menos sério.
Em geral, de uma forma ou de outra, mas havia um consenso na empresa: não há lugar para Rubistas. Minha aparência foi um acidente, confirmando a regra - fui fortemente aconselhado a começar a programar em outra coisa.
Mas uma pessoa que aprendeu o poder dos trilhos não pode ser interrompida facilmente.
Rubi
Apesar do status quo de "Ruby é ruim", todos sabiam de sua força - velocidade de desenvolvimento. Resolvi aproveitar e sugeri aos patrões que fizessem protótipos dos serviços que estavam planejados para serem lançados. Mais ou menos como "deixe-me escrever rapidamente um exemplo de sua startup, e então ficará claro com certeza se vale a pena reescrevê-lo em uma linguagem" normal "ou, melhor, apenas para rascunhos".
A ideia foi apreciada e abençoada. Esta foi minha segunda chance. O pássaro azul da sorte estava praticamente vibrando em minhas mãos quando senti que estava perdendo a corrida. Depois de um pequeno MVP, o negócio me lançou a funcionalidade que eu queria ver na versão de teste do CRM, e foi uma quantidade de trabalho completamente opressiva, apesar da velocidade do lançamento inicial. Pelas minhas próprias forças, mesmo acusado de relutância em entrar em pythonists, era impossível fazer a investigação necessária em um futuro previsível.
Sentei-me na frente do meu laptop e observei melancolicamente enquanto chegava mais e mais tarde. Juntamente com a última esperança de permanecer um rubista, as ambições de carreira também se foram: um Monstro da Pasta sabe quanto tempo levará para alcançar em um novo idioma a competência necessária para gritar seu nome novamente na eleição de um novo Kraken.
Isso sem contar o fato de que mudando a linguagem, por exemplo, em Python, recebo automaticamente mais 150 rivais merecidos para promoção.
Foi um beco sem saída.
A tarefa foi removida de mim e voltou a pensamentos ansiosos sobre meu futuro. Assisti às batalhas Versus, ouvi música deprimente e bebi Dr. Pepper. Aparentemente, devido à abundância de açúcar, a solução apareceu rapidamente.
Aprendi uma lição com o último fiasco: você não pode morder um pedaço que não pode mastigar. As pessoas veem como você foi feito de idiota e se lembram. Mais uma ou duas dessas tentativas e eles desistirão de mim aqui, decidindo que sou um fracasso.
Agora precisamos de uma tarefa sobre a qual saberei com certeza que nenhum erro de ignição acontecerá. Grande o suficiente para ser impressionante, mas pequeno o suficiente para estar ao meu alcance. Mas onde posso conseguir um e como posso atribuí-lo a mim?
A maneira mais fácil de encontrar tal tarefa era dentro da estrutura de um projeto já desenvolvido. O plano era fingir ser um desenvolvedor Java.
Perturbador
Os javistas estavam indo bem. No início, pareceu-me que havia entrado em uma equipe de verdadeiros programadores, trabalhando com padrões e interfaces claros. Nunca antes me senti tão programador como naquelas semanas.
Devido ao meu conhecimento superficial de quase todas as linguagens populares da web, me adaptei rapidamente e comecei a ser útil. O trabalho estava em andamento. O projeto foi até lançado em várias regiões para começar a pegar bugs. O problema era que o movimento era muito lento, apesar de sermos cinco. Fiz um desconto no fato de que deveria ser assim, porque isso é um empreendimento, você precisa entender, mas rapidamente ficou claro que tudo é muito mais sério.
A equipe estava em forte conflito com o product owner. Eles praguejaram, quase sem escolher as expressões.
A primeira linha de código foi escrita há um ano e meio, mas o projeto ainda não funcionou de verdade. Uma boa ideia de negócio encontrou problemas inexplicáveis durante a fase de implementação. A principal reclamação de PO, agindo como intermediário entre a empresa e os programadores, era a impossibilidade de fazer mudanças rápidas. Quando questionado sobre qualquer revisão, ele ouviu: "Mês, mês, mês." E muitas edições foram necessárias. O sistema era tão inconveniente que um operador podia processar no máximo uma ou duas solicitações por dia. A funcionalidade parecia funcionar, mas havia tantos bugs que, lançando-o em todo o país, era possível simplesmente se afogar em reclamações. Algumas operações foram realizadas apenas após uma chamada para o programador, que alterou manualmente os dados no banco de dados ou deu voz às informações necessárias. A interface do usuário estava torta. Não havia dúvida de qualquer automação.
E, tendo como pano de fundo todos esses problemas, os programadores conseguiram inventar bicicletas como um análogo de mesa autoescrito ou um serviço de lista de mala direta. As menores modificações levaram ao fato de que algo em algum lugar deve cair. Todo prazo concebível há muito foi desperdiçado.
E você sabe como os programadores explicaram a si mesmos o que estava acontecendo? "PO é estúpido e todas as suas sugestões são sobre nada."
Pareceu-me que a questão não estava no PO, mas no código. Quando a próxima tarefa urgente chegou, percebi que era hora de arrancar as máscaras. Foi necessário fazer um sistema de questionários, de acordo com os resultados do trecho do qual será formado um documento acabado. Os programadores de minha nova equipe, após consultoria, expressaram o PO que farão o necessário em três meses com os esforços de dois desenvolvedores.
Três meses e dois programadores!
O sofá embaixo do PO estava soltando fumaça. Ficou verde, mas, ensinado pela amarga experiência, calou-se, sabendo que era inútil pedir, implorar ou reclamar. A perspectiva de demissão pairava à frente. Mas a mobília fumegava não apenas embaixo dele. Eu sabia com certeza que a funcionalidade que acabei de anunciar surge no Ruby com o clique de um dedo.
“Vou escrever isso em uma semana”, fiz um movimento. - E ainda tenho tempo para revisar todas as batalhas com Oksimiron.
A tarefa era exatamente o que eu esperava para entrar neste jogo de tronos.
PO não acreditou. A equipe também. No Universo deles, a unidade de tempo mínima era um mês, mas os prazos estavam realmente queimando, então após um breve acerto das formalidades, uma semana foi concedida para mim.
Como você provavelmente sabe, Ruby é divino para o desenvolvimento de velocidade. Eu torceria meu coração se dissesse que estou tentando muito ou de alguma forma preocupado com minha terceira chance. A joia que resolveu meu problema foi aperfeiçoada em Ruby e funcionou como um relógio.
Depois de uma semana, mostrei o resultado.
- Por que não fazemos tudo em Ruby então? O product owner perguntou. Para ser sincero, ainda não sei a resposta.
Tivemos uma conversa franca naquele dia. Ostap sofreu e me revelou a verdadeira situação. O projeto se transformou em uma construção infernal de longo prazo. Os chefes imediatos do PO já haviam sugerido diretamente sua demissão. Ele parou de dormir. Eu me solidarizei com ele e pedi que descrevesse toda a lógica que o aplicativo precisava executar. Quando ele terminou, ficou claro para mim que, com dois camaradas, eu reescreveria todo o projeto em três meses.
Os programadores do projeto não eram pessoas más ou sabotadores. Eles realmente tentaram. Só que sua ferramenta não era adequada para a tarefa. Eles cavaram um poço de fundação com colheres. Mas eu tinha uma escavadeira.
Quarta chance
Quando PO e eu procuramos o CIO, ele parecia já ter começado a entender que não havia funcionado para me batizar de novo e, curiosamente, esperava o que eu tinha descoberto dessa vez.
Sugeri reescrever o projeto. Em três meses com dois assistentes, repetirei completamente a funcionalidade que 5 programadores fizeram em um ano e meio, e também colocarei chips por cima. Por sua vez, RO confirmou que isso era necessário: o código do projeto começou a viver sua própria vida, praticamente não reage às tentativas de fazer mudanças e, ao que parece, em breve começará a exigir sacrifícios humanos na forma de virgens.
Ficou decidido que a decisão final sobre o assunto será feita na próxima comissão de arquitetura - uma reunião especial onde diretores se reúnem com arquitetos e aprovam algum tipo de processo.
Como você pode imaginar, o fato de estar lendo estas linhas sugere que tive permissão para reescrever o projeto. Com uma maioria mínima de votos, o Archcom Committee deu sinal verde para esta aventura. Entre outras coisas, tive permissão para recrutar dois rubistas como assistentes.
Eu finalmente me tornei um líder.
Pelo que entendi, um papel importante na aprovação da minha iniciativa foi desempenhado pelo facto de a direcção começar a perceber o relaxamento e a confiança excessiva no futuro de algumas equipas de programação da empresa.
Eles precisavam de um chicote, uma ameaça, para motivá-los a trabalhar melhor. Uma palavra gentil e uma arma podem alcançar muito mais do que apenas uma palavra gentil, como Al Capone costumava dizer.
E eu coloquei essa pistola na mão deles.
Dando sinal verde para reescrever o projeto, os chefes pareciam dizer aos programadores da empresa: "Se você errar, chamaremos esse cara e eles o reescreverão."
Mas, primeiro, eu precisava não falhar na tarefa, que se tornou minha quarta chance. Quando voltei da reunião, era uma empresa completamente diferente. Agora eles me odiavam. Meu conflito com o ecossistema de software DomClick, que começou desde o início, atingiu seu clímax. Eles não falavam comigo, não se sentavam à mesma mesa da sala de jantar. Assim que entrei na sala, todos os presentes começaram a me examinar. Eles sussurraram nas minhas costas. Eu me encontrei em completo isolamento.
Para ser honesto, essa reação me deu forças. A vida fica cheia de significado quando você se sente como a mão cortante do Senhor. Decidi que seria uma pistola muito boa.
Literalmente naquela noite, liguei para um velho amigo que estava programando em Ruby e tive certeza de seu profissionalismo. Ele concordou em se juntar sem mais delongas. Algumas semanas depois, o segundo desenvolvedor veio e revelou-se um cara realmente duro que fortaleceu muito nosso pequeno distanciamento.
O organismo de programação da empresa nos rejeitou. Eles não se comunicaram conosco. Todos estavam esperando nosso fracasso. E, paradoxalmente, nos uniu e nos fez crescer.
Uma característica do Ruby é sua alta velocidade de desenvolvimento. Por alguma razão, acredita-se que isso prejudique a qualidade. Tipo, um projeto executado perfeitamente em Ruby será pior do que um projeto ideal em qualquer outra linguagem.
Mas onde você viu os designs ideais?
Os desenvolvedores quase sempre não têm tempo suficiente para escrever códigos de alta qualidade, seguir estritamente os padrões, fazendo tudo como nos livros didáticos. Como resultado, esse código ideal, que todos ameaçam, nunca aparece.
Mas o Ruby, devido à sua velocidade, permite que você obtenha o mesmo tempo excedente que pode ser gasto pensando em arquitetura e procurando por melhores abstrações. O código resultante, paradoxalmente, também é da mais alta qualidade.
Quando lançamos uma nova versão do projeto três meses depois, além de pequenos bugs, funcionou perfeitamente. Os usuários finais do projeto - os advogados de Domclick - ficaram inicialmente insatisfeitos, porque as interfaces do usuário haviam mudado, mas depois de algumas semanas suas vozes morreram. O projeto funcionou como um relógio. Foi implantado quase imediatamente em toda a Rússia.
RO estava feliz. A velha equipe do projeto foi dissolvida.
Pude recrutar mais dois programadores.
Meu pequeno pelotão de barragem se transformou em uma empresa de pleno direito. Eles nos odiavam, mas não havia nada que pudessem fazer.
Meu pessoal sentiu a peculiaridade de sua posição. Eles correram e tiveram sucesso. Havia uma sensação de fluxo - um estado de concentração máxima e prontidão para a ação. Poderíamos reescrever todos aqui de forma rápida e eficiente.
Isso estimulou toda a empresa.
Além do medo de ser sobrescrito, havia um saudável senso de competição. Se esses recém-chegados podem trabalhar com tanta rapidez e eficiência, por que estamos piores? Defenderemos nossa própria empresa! Vamos jogar esses novatos de volta no submundo de onde vieram!
Parte da equipe pegou a luva lançada pelos rubistas, e isso beneficiou toda a empresa. Na verdade, a equipe se dividiu em irmãos e lachers.
Irmãos pulam os padrões, estão sempre prontos para ajudar, pensam nos benefícios da empresa e no sucesso de seu projeto. Lachers joga para ganhar tempo, não admite erros, não quer reaprender e negociar. Você faz isso claramente - irmão. Você é burro, você põe um raio nas rodas, você prejudica, você quer ganhar muito, mas fazer pouco é um lacher.
Fizemos um ótimo trabalho e colocamos o banner Ruby sobre o DomClick conquistado quando o chefe final desta história saiu sobre mim.
Em uma das reuniões em altos cargos, após uma longa história sobre um novo projeto, um homem muito inteligente perguntou em voz baixa: "Mostre-me isto na segunda-feira."
E não havia nada para mostrar. Era sexta-feira à noite. Quando fui chamado para a sala de reunião, rostos tensos estavam sentados e segurando as cabeças com as mãos, pensando no que fazer. O período mínimo durante o qual os outros estavam prontos para concluir o projeto era “não menos de duas semanas”, mas era três dias. Eu concordei.
A empresa inteira estava esperando como isso iria acabar. Funcionários comuns com curiosidade, chefes com uma sensação de desastre iminente. E quando o sol nasceu na segunda-feira, ninguém precisou escrever uma carta de demissão, atirar em si mesmo ou fugir pela fronteira do estado.
Tudo funcionou na produção. Os botões foram pressionados, as páginas foram atualizadas e todos ficaram felizes. E em algum lugar de Moscou, três programadores com a barba por fazer dormiam como a morte.
Quando peguei o telefone à noite, disseram-me as três principais palavras da minha vida: “Contrate mais programadores”.
A partir de hoje, o departamento de Rubistas tem cerca de 20 pessoas, 6+ projetos de complexidade variada, e continuamos a expandir.
E agora a moral da história.
Certa vez, em uma das reuniões trimestrais, foi feita uma pergunta ao nosso líder permanente: “Como posso me tornar um líder?”, Ao que foi feita a citação: “eles não dão poder - eles tomam o poder”. Seja eficaz, esforce-se pelo sucesso e, se estiver realmente disposto a melhorar a cada dia, terá sucesso.
Em geral, a vida é muito curta para escrever códigos longos. Use joias, amigos!
PS Além disso, aqui está um vídeo com nossas performances, a partir do qual você pode entender o que nos permite ser rápidos e eficientes: