Startup interno: como hicimos un producto en una empresa de servicios

Trabajo para una empresa de desarrollo personalizado. Al mismo tiempo, estamos ejecutando muchos proyectos con diferente actividad y volumen de trabajo. Cada semana, los jefes de proyecto llaman para comprobar el estado actual de las cosas, elaborar un plan para la próxima semana y distribuir las tareas entre los desarrolladores. Cuando me convertí en líder de equipo, la participación en estas reuniones se agregó a mis responsabilidades.



Rápidamente me di cuenta de que las sesiones informativas no son muy efectivas, porque no había una imagen general e integral ante mis ojos, cuál de los desarrolladores está sobrecargado y quién, por el contrario, está inactivo.



Usamos Redmine para la gestión de tareas. Esta es una herramienta gratuita algo anticuada, pero práctica y probada por el tiempo. Un defecto fatal en nuestro caso fue la falta de un resumen general claro de las tareas actuales.



Prototipo de mano



Concepto de proyecto



Vale la pena aclarar de inmediato que en realidad existe la oportunidad de mostrar un resumen general, pero solo para el administrador que tiene acceso a todos los proyectos. En la práctica, cada gerente tiene acceso solo a una determinada porción de proyectos y tareas.



, , . , 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, .



?



— , . :



Primera versión



, , / 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.



. , , , . « » — -:



Mis tareas





, .



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


Estoy contento con cómo resultó, cómo sucedió y ya estoy recopilando ideas para nuevos proyectos.




All Articles