Startup interno: como fizemos um produto em uma empresa de serviços

Eu trabalho para uma empresa de desenvolvimento personalizado. Ao mesmo tempo, estamos executando muitos projetos com diferentes atividades e volumes de trabalho. Todas as semanas, os gerentes de projeto ligam para verificar o estado atual das coisas, traçar um plano para a próxima semana e distribuir as tarefas entre os desenvolvedores. Quando me tornei líder de equipe, a participação nessas reuniões foi agregada às minhas responsabilidades.



Rapidamente percebi que os briefings não são muito eficientes, pois não havia uma imagem geral e integral diante dos meus olhos, qual dos desenvolvedores está sobrecarregado, e qual, ao contrário, está ocioso.



Usamos Redmine para gerenciamento de tarefas. Esta é uma ferramenta gratuita um tanto antiquada, mas prática e testada pelo tempo. Uma falha fatal em nosso caso foi a falta de um resumo geral claro das tarefas atuais.



Protótipo de mão



Conceito de projeto



Vale a pena esclarecer desde já que existe realmente uma oportunidade de mostrar um resumo geral, mas apenas para o administrador que tem acesso a todos os projetos. Na prática, cada gerente tem acesso a apenas uma determinada fatia de projetos e tarefas.



, , . , trello- , -.





, Redmine REST API - , . , - .



junior frontend , - , . «, », — .



, — Vue.js . , vue-cli vuex, API, . , Redmine , , .



, , , php- - 200 , . (/), .



, cURL file_get_contents(). :



$host = 'https://redmine.app';
$apiKey = '*****';
$context = stream_context_create([
    "http" => [
        "method" => "GET",
        "header" => "X-Redmine-API-Key: $apiKey"
    ]
]);

$projects = file_get_contents("$host/projects.json", false, $context);


? SPA, JSON Web Tokens? , cookie-based . POST-, , -. checkRedmineUser($login, $password), , -.



- :



$auth = base64_encode("$login:$password");
$opts = [
    "http" => [
        "method" => "GET",
        "header" => [
            "Authorization: Basic $auth"
        ],
        "ignore_errors" => true,
    ]
];

$context = stream_context_create($opts);
$response = file_get_contents("$host/users/current.json", false, $context);


API, . : MVP, .



?



— , . :



Primeira versão



, , / drag-n-drop' .



, , , , — . , , -, .





— PM-, . , . , — ?



, : « », , , CI/CD. - , - , : «, ...».



Laravel, Gitlab, issues.



(milestones Gitlab) — « » , — .



, , , , . , -, HTTP API.



Gitlab-CI. — .. , docker .



middleware. JSON-, — DTO. (enums) — spatie/enum. file_get_contents() guzzle.



. , , , . « » — -:



Minhas tarefas





, .



  1. — . , , , . , « MVP».
  2. . , , . , Unix: do one thing, and do it well.
  3. , , , . Issues , , pull request' , , , .
  4. — . - , , , production. , . , . code review, .


Estou feliz com o resultado, como aconteceu e já coletando ideias para novos projetos.




All Articles