<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>prueba</title><link>https://devtia.com/</link><description>Llevamos empresas a la nueva era digital. Te ayudamos a mejorar tus procesos a través de las métricas.</description><language>es</language><pubDate>Sat, 02 May 2026 09:54:30 +0200</pubDate><lastBuildDate>Sat, 02 May 2026 09:54:30 +0200</lastBuildDate><generator>DEVTIA</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><ttl>3600</ttl><item><title>Prueba personal: criterios de evaluación</title><link>https://devtia.com/post/prueba-personal-criterios-de-evaluacion</link><description><![CDATA[<p>Nuestra prueba personal parte de la premisa de que nosotros no somos profesionales de recursos humanos y por lo tanto tenemos bastantes dificultades a la hora de evaluar un candidato. Cuanto m&aacute;s tiempo llevo en esto de la selecci&oacute;n de candidatos m&aacute;s me doy cuenta de lo dif&iacute;cil que resulta evaluar a una persona en algo m&aacute;s de una hora.</p><p>De forma inconsciente, es mucho m&aacute;s probable que valores positivamente a personas con las que tengas una afinidad personal, mismos gustos, misma filosof&iacute;a de vida, o incluso inclinaciones pol&iacute;ticas parecidas. Pero que te pudieras ir a tomar algo con una persona no significa que vaya a ser un buen compa&ntilde;ero de fatigas.</p><p>Seguro que te ha venido a la mente esa persona, con la que encajabas al cien por cien, pero en el d&iacute;a a d&iacute;a no daba la talla por cualquier motivo.</p><h2>Qu&eacute; valoramos</h2><p>&iquest;De qu&eacute; va la entrevista personal? &iquest;Qu&eacute; se busca realmente? o, al menos, &iquest;qu&eacute; buscamos nosotros? En mi opini&oacute;n mucha gente hace entrevistas sin tener muy claro qu&eacute; es lo que se est&aacute; buscando. Si te paras un poco a pensar qu&eacute; es lo que buscas en una entrevista, es mucho m&aacute;s f&aacute;cil que puedas encontrar las respuestas.</p><p>A continuaci&oacute;n, vemos los elementos que buscamos nosotros.</p><h3>Responsabilidad</h3><p>Creemos que los errores penalizan mucho. Puedes hacer un trabajo genial con un dise&ntilde;o incre&iacute;ble implemetando mediante el Driven Development de turno, que si en la demo le das a guardar y sale un 500, quedas como el culo. Valoramos que el candidato pueda responsabilizarse del trabajo que realiza, tom&aacute;ndose la molestia por entender las necesidades, as&iacute; como de realizar unas comprobaciones b&aacute;sicas.</p><p>Algunas preguntas que nos pueden ayudar a evaluar esto son: Describe el proceso desde que te asignan una issue hasta que la das por cerrada. &iquest;Cu&aacute;l es el error que m&aacute;s frecuentemente cometes?</p><h3>Encaje a largo plazo</h3><p>Incorporar a una persona supone un peque&ntilde;o drama para un equipo peque&ntilde;o como nosotros. Tenemos que dedicar mucho tiempo y energ&iacute;as a realizar el proceso de selecci&oacute;n: entrevistas, pruebas t&eacute;cnicas, etc. Despu&eacute;s, realizar una oferta, esperar el tiempo que el candidato se toma para decidir, gestionar todo el papeleo y, finalmente, incorporarle al equipo, con un mont&oacute;n de tareas que esto conlleva. Todav&iacute;a quedan unas cuantas semanas, sino meses, en los que necesitamos dedicarle mucho tiempo: explicarle el negocio, c&oacute;mo trabajamos, etc.</p><p>Si despu&eacute;s de todo este trabajo el candidato decide que quiere irse al poco tiempo, ser&iacute;a un absoluto fracaso. As&iacute; que est&aacute; bien tener claro desde el principio que el candidato tiene potencial para permanecer varios a&ntilde;os en la compa&ntilde;&iacute;a.</p><p>Para evaluar esto, realizamos preguntas del tipo: &iquest;Por qu&eacute; quieres trabajar con nosotros? &iquest;Por qu&eacute; quieres cambiar de trabajo? &iquest;C&oacute;mo te ves dentro de 5 a&ntilde;os?</p><p>Tambi&eacute;n evaluamos su historial, para ver si tiene tendencia a cambiar f&aacute;cilmente de empleo.</p><h3>Inquietud por aprender</h3><p>Para el equipo es importante incorporar a candidatos que tengan potencial para incluir cosas nuevas dentro del stack. Tenemos un stack que dominamos, muy consolidado, y con el que nos sentimos muy c&oacute;modos. Sin embargo, es bueno, tanto para nosotros como para la compa&ntilde;&iacute;a, que tengamos capacidad de innovar. Es por esto que buscamos candidatos que muestren inquietud por aprender.</p><p>Buscamos evidencias de ello. &iquest;Qu&eacute; libros ha le&iacute;do &uacute;ltimamente?, &iquest;En qu&eacute; proyectos open source ha colaborado?. &iquest;Qu&eacute; tecnolog&iacute;as ha aprendido en los &uacute;ltimos a&ntilde;os?.</p><p>Ojo, no sirve decir estoy aprendiendo XX. Casi todo el mundo dice estar aprendiendo algo. Si te preguntamos qu&eacute; cosas te gustan de XX y cu&aacute;les no te gustan, esperamos una respuesta que nos permita hacernos una idea de que realmente est&aacute;s profundizando en ello. Si das una respuesta poco clara, no lo tendremos en cuenta.</p><h3>Flexibilidad</h3><p>Los programadores somos por lo general bastante cabeza cuadrada. Entramos en conflictos por las m&aacute;s absolutas nimiedades. &iquest;espacios o tabulaciones? Por esto tenemos en cuenta c&oacute;mo de bueno es el candidato adapt&aacute;ndose a un nuevo entorno o a un entorno que no est&aacute; al cien por cien a su gusto.</p><p>Quiero alguien que entienda que nos pagan por solucionar problemas y mejorar procesos. Habitualmente lo hacemos poniendo software que funciona en producci&oacute;n.</p><p>Algunas preguntas que nos pueden ayudar, son: &iquest;Qu&eacute; es lo que m&aacute;s te gusta y lo que menos de tu trabajo actual? &iquest;Qu&eacute; dificultades tienes en tu trabajo actual?</p><h3>Alto rendimiento</h3><p>Somos un equipo de alto rendimiento. Obviamente no somos los mejores ingenieros del mundo, esos ya trabajan en Google, Amazon, Meta, ect.</p><p>Pero, dentro de nuestras posibilidades, tratamos de que salga trabajo a buen ritmo. No estamos hablando de que trabajar con nosotros sea un infierno y vayas a acabar quemado a la primera de cambio. Estamos hablando de buscar candidatos que, en una medida razonable, sean capaces de poner nuevas caracter&iacute;sticas en producci&oacute;n de forma consistente y a un ritmo razonablemente bueno.</p><p>Este apartado es muy dificil de evaluar, se eval&uacute;a en conjunto con la prueba t&eacute;cnica. Algunas preguntas que nos pueden ayudar con esto son: &iquest;C&oacute;mo de dif&iacute;cil fue la prueba t&eacute;cnica? &iquest;Qu&eacute; partes se te hicieron m&aacute;s dif&iacute;ciles?</p><h2>Escucha y toma notas</h2><p>Antes de seguir, un consejo: <strong>ESCUCHA</strong>. Nunca debes interrumpir a un candidato. Incluso aunque est&eacute; contestando algo totalmente diferente de lo que se le ha preguntado. Simplemente lanza la pregunta y deja que &eacute;l mismo empiece a hablar. Lo m&aacute;s importante durante la entrevista personal es que el candidato hable tanto como sea posible. Tampoco debes entrar en controversia con un candidato. Si el candidato realiza un comentario con algo totalmente intolerable, simplemente acaba la entrevista y agrad&eacute;cele su tiempo.</p><p>Si el candidato expresa una opini&oacute;n con la que no est&aacute;s de acuerdo o detectas alguna cosa que quieres matizar, an&oacute;talo y aprovecha los &uacute;ltimos minutos de la entrevistas para estas aclaraciones.</p><p><strong>TOMA NOTAS</strong>. Muchos entrevistadores simplemente tienen un cara a cara con el candidato, pero no toman notas durante la entrevista. Yo les pido disculpas al comienzo de la entrevista a los candidatos por tomar notas. Hacerlo, puede que haga que la entrevista tenga algunos tiempos muertos, mientras acabas de escribir lo que quieres y lanzas la siguiente pregunta. Pero, al cabo del tiempo, lo agradecer&aacute;s. Seguramente tengas que entrevistar a bastantes candidatos por cada puesto que tengas y los procesos probablemente se prolonguen durante algunas semanas, a veces durante algunos meses. Si no tomas notas, ya me dir&aacute;s como vas a ser capaz de recordar los detalles de lo que te dijo el primer candidato con el que hablaste hace una hora hace dos meses.</p><h2>El gui&oacute;n</h2><p>Vayamos al grano. A continuaci&oacute;n, te muestro el gui&oacute;n con las preguntas que hacemos a todos los candidatos. Como he dicho no somos profesionales de recursos humanos, as&iacute; que hemos seleccionado este conjunto de preguntas. Todas ellas son muy abiertas, por lo que cada candidato podr&aacute; interpretarlas libremente.</p><p>El gui&oacute;n solo nos sirve para tener un sendero por el que conducir la entrevista, pero cada entrevista es diferente y puede que tome senderos diferentes. Ninguna de las preguntas tiene una respuesta correcta. Simplemente son un sendero para conocer mejor al candidato.</p><h3>Describe brevemente tu carrera profesional</h3><p>No me gusta empezar por esta pregunta. Sin embargo, los candidatos tienden a explicar su carrera profesional en la primera pregunta que le hagas. Debe ser que estamos programados para ello. As&iacute; que directamente le pregunto al principio del todo y as&iacute; nos lo quitamos de en medio.</p><p>Normalmente proyecto el perfil de linkedin del candidato durante esta pregunta. As&iacute; le facilitamos el trabajo. En esta pregunta tratamos de dirigirle hacia los trabajos que ha realizado en los &uacute;ltimos a&ntilde;os. Esto nos puede hacer una idea de en qu&eacute; punto de su carrera est&aacute;.</p><h3>Introd&uacute;cete a ti mismo: &iquest;Qui&eacute;n es <em>pepito p&eacute;rez</em>?</h3><p>Esta pregunta es muy abierta. Lo que buscamos es tener una impresi&oacute;n general del candidato. &iquest;Qu&eacute; opina de s&iacute; mismo? &iquest;C&oacute;mo se relaciona en sociedad?</p><h3>&iquest;Qu&eacute; te motiva?</h3><p>De nuevo es una pregunta muy abierta. Normalmente los candidatos relacionan esta pregunta con un nivel puramente profesional: &iquest;Qu&eacute; te motiva en el trabajo?</p><h3>&iquest;Por qu&eacute; quieres cambiar de trabajo?</h3><p>Esta pregunta suele poner un poco inc&oacute;modos a los candidatos. En muchos casos el candidato tiene que explicar por qu&eacute; motivos no se encuentra c&oacute;modo en su actual puesto de trabajo.</p><h3>&iquest;C&oacute;mo es un d&iacute;a en tu trabajo ideal?</h3><p>Tambi&eacute;n es una pregunta que suele incomodar. Buscamos sobre todo saber si su trabajo ideal se parece a nuestro d&iacute;a a d&iacute;a, o si estamos dispuestos a adaptarnos a algo similar. Nos ayuda a detectar que tipo de cosas valora el candidato en una oferta de empleo. &iquest;Flexibilidad? &iquest;Prefiere trabajar en equipo o de forma m&aacute;s individual? &iquest;Qu&eacute; tipo de buenas pr&aacute;cticas de las que estamos utilizando nosotros incluye?</p><h3>&iquest;Tienes alguna habilidad que te gustar&iacute;a destacar?</h3><p>Casi todos los candidatos suelen tirar por el lado profesional. Pero siempre es interesante escuchar las habilidades que tiene un candidato. Aquello que &eacute;l considera que destaca fuera del &aacute;mbito profesional.</p><h3>&iquest;Por qu&eacute; quieres trabajar con nosotros?</h3><p>Pregunta t&iacute;pica de recursos humanos donde las haya. Suele sacar los colores a los candidatos, por qu&eacute; no saben qu&eacute; contestar. Obviamente no vas a descartar un candidato por que no se haya estudiado a qu&eacute; se dedica la compa&ntilde;&iacute;a, es algo que hemos hecho todos, apuntarnos a una oferta sin mirarla demasiado. Sin embargo, si el candidato tiene alg&uacute;n motivo para querer trabajar con nosotros como, por ejemplo, que le gusta el sector o que hay alguien dentro con el que quiere trabajar, es algo que valoramos positivamente.</p><h3>Tu turno. &iquest;Qu&eacute; te gustar&iacute;a preguntarnos?</h3><p>Siempre la &uacute;ltima pregunta es para darle un espacio al candidato a que nos muestre sus dudas. Quiz&aacute; quiere conocer m&aacute;s a fondo el stack o quiere conocer detalles como las facilidades que se dan en cuanto a flexibilidad laboral. Dejamos que el candidato exprese todas sus dudas y respondemos con tanta honestidad como sea posible. Las preguntas que nos hace tambi&eacute;n nos ayudan a conocer mejor al candidato. Si no pregunta nada, es que probablemente no est&eacute; interesado en el puesto de trabajo. Si pregunta por muchos detalles probablemente es por que realmente se est&aacute; planteando venir a trabajar con nosotros.</p><h3>Cierre</h3><p>Siempre agradecemos al candidato el tiempo que nos ha dedicado, le explicamos los siguientes pasos del proceso y le invitamos a que, si le surgen dudas en los siguientes d&iacute;as, tengamos otra reuni&oacute;n para poder resolverlas.</p><h2>Crea una base de datos</h2><p>Como hemos visto, un proceso de selecci&oacute;n es un mont&oacute;n de trabajo. Es por esto que merece la pena trabajar un poco m&aacute;s, e ir recopilando toda esta informaci&oacute;n sobre candidatos en alg&uacute;n tipo de base de datos. Si has hecho un proceso de selecci&oacute;n como dios manda, habr&aacute;s dejado un buen sabor de boca en todos los candidatos, y alguien que no te encaj&oacute; en un puesto determinado, podr&iacute;a ser la persona correcta para otra posici&oacute;n. &iquest;Para qu&eacute; volver a hacer el trabajo si ya lo hiciste en el pasado?</p>
]]></description><guid>https://devtia.com/post/prueba-personal-criterios-de-evaluacion</guid><pubDate>Thu, 21 Apr 2022 12:05:58 +0200</pubDate></item><item><title>Prueba técnica: Criterios de evaluación</title><link>https://devtia.com/post/prueba-tecnica-criterios-de-evaluacion</link><description><![CDATA[<p>A continuaci&oacute;n queremos detallar c&oacute;mo valoramos la prueba t&eacute;cnica que realizamos en nuestro proceso de selecci&oacute;n.</p><p>Como candidatos nos ha tocado hacer multitud de pruebas, y nunca hemos recibido ning&uacute;n tipo de feedback, as&iacute; que ahora que nos toca a nosotros, creemos que es un buen momento para tratar a los dem&aacute;s como nos gustar&iacute;a que nos hubieran tratado.</p><p>Lo primero, esto no es un examen: es una opini&oacute;n. Algunos candidatos entran en controversia con nosotros, y esto es algo bastante desagradable. Por supuesto siempre estamos abiertos a que alguien nos explique algo, y muchas veces hemos aprendido cosas con las pruebas de los candidatos, pero entiende que es muy desagradable cuando un candidato quiere convencerte de algo que no es.</p><p>Al final, si crees que estamos equivocados, es posible, simplemente somos programadores como tu, y por supuesto a veces nos equivocamos.</p><h2>Candidato</h2><p>Una prueba t&eacute;cnica tiene que estar muy orientada al tipo de candidato que est&aacute;s buscando. No tiene mucho sentido hacer una prueba de algoritmia y patrones de dise&ntilde;o para un perfil que va a trabajar con wordpress.</p><p>En nuestro caso buscamos perfiles con varios a&ntilde;os de experiencia, con un conocimiento razonablemente bueno del framework con el que trabajamos, pero que todav&iacute;a tenga un buen margen de crecimiento junto a nosotros. Es decir buscamos a alguien que pueda ser productivo en un corto plazo, que pueda trabajar la mayor parte del tiempo de forma independiente, pero que el desarrollo profesional y el aprendizaje que puede adquirir con nosotros sea algo importante para &eacute;l.</p><h2>Descripci&oacute;n de la prueba</h2><p>Nuestra prueba es realmente sencilla. No voy a describirla aqu&iacute;, porque la cambiamos con cada proceso, pero b&aacute;sicamente pedimos que se instale un proyecto con symfony y que se programen un par de acciones, y alg&uacute;n comando. Todo ello sin dar ning&uacute;n tipo de instrucci&oacute;n acerca de c&oacute;mo hacerlo. Si acaso se insin&uacute;a ligeramente al candidato que sea creativo.</p><h2>Consejos iniciales</h2><div class="row"><div class="col-sm-8"><p>Siempre que te enfrentes a una prueba t&eacute;cnica deber&iacute;as leer el texto con calma al menos un par de veces y quiz&aacute;s una vez m&aacute;s una vez que has acabado.</p><p>No creer&aacute;s la cantidad de candidatos que olvidan realizar alguna parte.</p></div><div class="col-sm-4"><div class="reference"><p>Si tienes una hora para cortar un &aacute;rbol, deber&iacute;as dedicar la primera mitad para afilar tu hacha.</p></div></div></div><h2>Criterios de evaluaci&oacute;n</h2><p><img alt="Criterios de evaluaci&oacute;n" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/d844c65025a3956a11f8981d40732b220e2f6014.jpg" title="Criterios de evaluaci&oacute;n loading="></p><p>Como ver&aacute;s en las cosas que evaluamos a continuaci&oacute;n. es una prueba tan sencilla en la que buscamos es que seas muy detallista en las peque&ntilde;as cosas.</p><p>Asignar&iacute;amos una puntuaci&oacute;n 1-10 para cada uno de los siguientes apartados, de forma que pudi&eacute;ramos valorar de forma justa y a la vez sencilla para nosotros. Los criterios de evaluaci&oacute;n no est&aacute;n en orden de importancia. Tampoco hacemos una media artimetica del resultado, simplemente es una gu&iacute;a para saber cuales son tus puntos fuertes y cuales son tus puntos debiles. El resultado de la prueba t&eacute;cnica, junto con la evaluaci&oacute;n personal que hagamos, ser&aacute; lo que nos ayude a decantarnos por uno u otro candidato.</p><div class="row"><div class="col-sm-4"><div class="reference mt-5"><p>El diablo est&aacute; en los detalles.</p></div></div><div class="col-sm-8"><h3>Ficheros INSTALL.md y README.md</h3><p>Son dos requisitos de la prueba. El primero debe contener las instrucciones de instalaci&oacute;n del proyecto y el segundo una breve explicaci&oacute;n de las decisiones que has tomado y por que.</p></div></div><p>El README.md es una de las partes m&aacute;s importantes de la prueba, ya que te da la oportunidad de explicar y justificar las decisiones que has tomado.</p><p>Pon atenci&oacute;n a las faltas de ortograf&iacute;a. No pasa nada, el que est&eacute; libre de pecado que tire la primera piedra, pero mi recomendaci&oacute;n es que si sueles cometer faltas de ortograf&iacute;a, lo pases por un corrector antes de enviarlo.</p><h3>Versiones</h3><p>Valoramos positivamente que utilices las &uacute;ltimas versiones disponibles, especialmente del lenguaje y del framework.</p><h3>Docker</h3><p>Valoramos positivamente que presentes tu prueba dentro de un contenedor.</p><h3>Coding Style</h3><p>Valoramos positivamente que presentes un coding style consistente y especialmente que lo definas expl&iacute;citamente de alguna forma, por ejemplo indicandolo en el README.md o incluyendo alg&uacute;n tipo de fichero de configuraci&oacute;n como .php-cs-fixer.dist.php indicando tus reglas de estilo.</p><h3>Alcance</h3><p>Como ya he dicho anteriormente. Aseg&uacute;rate de leer bien, lo que se pide. Muchos candidatos olvidan alguna peque&ntilde;a cosa. Es obvio que es un despiste. Pero no dice algo bueno de ti, que seas despistado en una prueba sencilla.</p><h3>Bundles</h3><p>Muchos candidatos utilizan bundles de la comunidad. Valoramos positivamente que puedas usar los bundles m&aacute;s conocidos. Nos indica que conoces el ecosistema.</p><h3>Comandos</h3><p>La prueba probablemente te pida que ejecutes un sencillo comando. Evaluaremos que hagas un uso eficaz de los comandos. Valoramos que el candidato demuestre que conoce c&oacute;mo funciona el componente configurando correctamente tanto los par&aacute;metros de entrada, como haciendo un uso correcto de la salida.</p><h3>Formularios</h3><p>Valoramos que el candidato demuestre que entiende bien c&oacute;mo funcionan, que sea capaz de crear un formulario y a&ntilde;adirle algunas validaciones.</p><h3>Doctrine</h3><p>Valoramos que el candidato entienda c&oacute;mo funciona doctrine. Declare entidades, repositorios y realice algunas queries sin cometer errores.</p><h3>Servicios</h3><p>Aunque la prueba no lo pide expresamente, se valora que el candidato trate de crear servicios y llevar la l&oacute;gica desde los controladores a estos.</p><h3>Assets / Frontend</h3><p>Se valora que el candidato haga un uso correcto de webpack o que incluya alg&uacute;n otro recurso de frontend.</p><h3>Pruebas</h3><p>Se valora que el candidato entregue una bater&iacute;a de pruebas de alg&uacute;n tipo, unitarias, funcionales y sea capaz de justificar en el README.md su elecci&oacute;n.</p><h2>&iquest;Qu&eacute; te ha parecido?</h2><p><img alt="&iquest;Qu&eacute; te ha parecido?" loading="lazy" src="/cache/thumb_1200_0600/uploads/content/image/image/7ecc9ad0cd5f24b7b50268654c9059b98035c48c.jpg" title="&iquest;Qu&eacute; te ha parecido?"></p><p>Por supuesto, queremos saber tu opini&oacute;n, &iquest;qu&eacute; te ha parecido la prueba y el proceso en general?, &iquest;hay algo que cambiar&iacute;as? &iquest;Crees que has tenido la oportunidad de demostrar tus capacidades? &iquest;Qu&eacute; te hubiera gustado poder hacer?</p>
]]></description><guid>https://devtia.com/post/prueba-tecnica-criterios-de-evaluacion</guid><pubDate>Fri, 04 Feb 2022 11:22:04 +0100</pubDate></item><item><title>Nuestro proceso de selección</title><link>https://devtia.com/post/nuestro-proceso-de-seleccion</link><description><![CDATA[<p>Contar con un personal capacitado y comprometido con el trabajo de tu empresa es esencial para poder triunfar en cualquier sector que se precie. La b&uacute;squeda del candidato o candidata perfecta no es para nada una tarea f&aacute;cil. Intentamos que nuestros procesos de selecci&oacute;n sean sencillos y faciliten el trabajo a nuestros reclutadores, simplificando en la medida de lo posible el proceso y haci&eacute;ndolo lo m&aacute;s din&aacute;mico posible.</p><p>Ciertas empresas suelen considerar que el candidato m&aacute;s cualificado para ocupar un puesto vacante es aquel que cumple con todos los requisitos y cuyas expectativas salariales son lo m&aacute;s bajas posibles, nosotros consideramos que enfocar as&iacute; la busqueda es un error que puede traer consecuencias a larga. Pensamos que para que un empleado pueda exprimir sus capacidades en nuestra empresa, <strong>ha de existir una estrecha relaci&oacute;n entre los requisitos que exigimos por su parte y las expectativas de trabajo que el candidato espera que la compa&ntilde;&iacute;a ofrezca.</strong></p><p>A lo largo de este art&iacute;culo te contaremos c&oacute;mo es nuestro proceso de selecci&oacute;n con todo lujo de detalles.</p><h2>La preselecci&oacute;n</h2><p><img alt="selecci&oacute;n" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/b0f80e8cbbf8691cf700c44f4cd69afc80292969.jpg" title="selecci&oacute;n"></p><p>Solemos recibir candidaturas a trav&eacute;s de dos canales:</p><ol><li>A trav&eacute;s de portales de empleo.</li><li>Nos contactan de manera directa al haber visto la oferta publicada a trav&eacute;s de nuestra p&aacute;gina web o de alguna redes sociales.</li></ol><p>No nos gusta tener que depender de una plataforma o herramienta de terceros para comunicarnos, por lo que a partir de la toma de contacto <strong>nos comunicamos siempre de manera externa a ellas.</strong> Creamos en nuestro CRM una ficha con los datos relevantes del candidato y comprobamos si cumple los principales requisitos, aunque no los cumpla al 100%, pueden existir detalles que nos motiven a incluirlo en el proceso de selecci&oacute;n como por ejemplo, una buena carta de presentaci&oacute;n o una buena actitud.</p><p><strong>Somos una empresa que trabaja 100% en remoto</strong> por lo que da igual en qu&eacute; punto del globo se encuentren los candidatos, siempre que se conecten con nuestro hor&aacute;rio y hablen nuestro idioma ;)</p><h2>Llamada telef&oacute;nica</h2><p><img alt="telefono" loading="lazy" src="/cache/thumb_1200_0200/uploads/content/image/image/4cc464a39863e432ed6abec4a065d09de24ed91b.jpg" title="telefono"></p><p>Lanzamos a trav&eacute;s de redes sociales los puestos que necesitamos cubrir y adjuntamos una encuesta que nos ayudar&aacute; como primera criba, es importante para nosotros contar con un punto de partida &oacute;ptimo que garantice conocimientos o estandares fijados as&iacute; como conocer si el candidato o candidato est&aacute;n familiarizados con metodolog&iacute;as &aacute;giles. Por lo general los primeros descartes se realizan por expectativas econ&oacute;micas que no van a acordes a lo que el candidato puede ofrecernos, por ejemplo, si buscamos a alguien que tenga experiencia en symfony, y el candidato tiene unos conocimientos m&iacute;nimos, no vamos a poder ofrecer los 40k que nos exija, no podemos pagar esa cantidad para acabar ense&ntilde;ando a utilizar una herramienta que exigimos como esencial.</p><h2>Entrevista personal</h2><p><img alt="entrevista-personal" loading="lazy" src="/cache/thumb_1200_0200/uploads/content/image/image/551291c75cb2045ac4ceca6460080ad8fca5953f.jpg" title="entrevista-personal"></p><p>Es el plato fuerte de cualquier proceso de selecci&oacute;n, es realizada por todo el equipo y se divide en dos partes:</p><p>El objetivo de <strong>la primera parte</strong> es buscar la sinton&iacute;a entre lo que el candidato busca y lo que podemos ofrecerle entendiendo, entre otras cosas:</p><ul><li>Qu&eacute; tipo de candidato es.</li><li>Cu&aacute;les son sus motivaciones.</li><li>Cu&aacute;l ser&iacute;a su trabajo, pretendemos conocer si el desempe&ntilde;o deseado por el entrevistado se aproxima a lo que hacemos en nuestro d&iacute;a a d&iacute;a.</li></ul><p><strong>En la segunda parte</strong> dejamos preguntar al candidato y mostramos qu&eacute; es lo que hacemos, esta parte de la entrevista es la m&aacute;s libre y abierta, suelen surgir preguntas de todo tipo y que dependen &uacute;nicamente de la curiosidad del entrevistado. Intentamos mostrar la mayor transparencia posible sea cu&aacute;l sea la pregunta.</p><p>La tasa de descartes en esta fase suele ser del <strong>50%.</strong></p><h2>Prueba t&eacute;cnica</h2><p><img alt="prueba-t&eacute;cnica" loading="lazy" src="/cache/thumb_1200_0200/uploads/content/image/image/23648606d956dc8db057777e9edd51b8cec6a77b.jpg" title="prueba-t&eacute;cnica"></p><p>La prueba t&eacute;cnica nos sirve para saber si el candidato posee los conocimientos t&eacute;cnicos adecuados. No es una prueba complicada y aunque existan algunas partes en las que no se disponga de un conocimiento adecuado, se podr&aacute; superar poniendo un poco de empe&ntilde;o.</p><p><strong>Se puede resolver de diversas formas</strong>. La forma en la que se resuelva nos dar&aacute; las claves para saber con qu&eacute; tipo de programador hemos topado. <strong>No solemos descartar a casi nadie en esta fase ya que evaluamos seg&uacute;n factores que nos ha contado el candidato anteriormente.</strong></p><h2>Reuni&oacute;n del equipo</h2><p>Todo el proceso esta dise&ntilde;ado para que al final llegue un peque&ntilde;o grupo de personas a las que, tras una reuni&oacute;n de equipo, ordenaremos de mayor a menor <strong>teniendo en cuenta una ponderaci&oacute;n realizada a trav&eacute;s de los siguientes factores:</strong></p><ol><li>Feeling personal / soft skills.</li><li>Objetivos a medio-largo plazo.</li><li>Conocimientos t&eacute;cnicos requeridos.</li><li>Conocimientos t&eacute;cnicos adicionales del candidato.</li><li>Expectativas salariales.</li></ol><p>Cada parte de nuestro equipo tiene opiniones diferentes al resto, por ello esta especie de ranking ponderado nos aporta una visi&oacute;n general de los entrevistados teniendo en cuenta las opiniones subjetivas de todo el equipo.</p><h2>Oferta al candidato</h2><p><img alt="correo" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/1a9ea944d457eb2593b576b6208a499393b42d64.jpg" title="correo"></p><p>Una vez ordenados de mayor a menor seg&uacute;n la preferencia del equipo, nos ponemos en contacto con el candidato que m&aacute;s nos ha gustado para hacerle la oferta final y recordarle las condiciones pactadas. Le enviaremos la oferta por correo.</p><p><strong>Normalmente aceptan la oferta</strong>. Si han llegado hasta aqu&iacute; es porque existe &ldquo;buen feeling&rdquo; entre ambas partes. En caso de no aceptar, pasar&iacute;amos al siguiente candidato, llevando a cabo el mismo proceso.</p><h2>&iquest;Y los no seleccionados?</h2><p>Todos los candidatos que no han superado alguna de las pruebas como podr&iacute;a ser la entrevista personal y la t&eacute;cnica, no se convierten en candidatos descartados, simplemente no han sido seleccionados y se lo comunicaremos explicando el motivo. <strong>De esta manera podemos ayudarle a mejorar en futuros procesos de reclutamiento.</strong></p>
]]></description><guid>https://devtia.com/post/nuestro-proceso-de-seleccion</guid><pubDate>Fri, 01 May 2020 11:12:44 +0200</pubDate></item><item><title>Código limpio: Pruebas automáticas</title><link>https://devtia.com/post/codigo-limpio-pruebas-automaticas</link><description><![CDATA[<p>En la &uacute;ltima entrada repasamos qu&eacute; deber&iacute;as tener en cuenta a la hora de realizar una correcta <a href="/post/codigo-limpio-gestion-de-errores">gesti&oacute;n de errores</a>. En esta entrada vamos a realizar una peque&ntilde;a intruducci&oacute;n a las pruebas autom&aacute;ticas, &iquest;qu&eacute; son? &iquest;para qu&eacute; sirven? y sobre todo que caracter&iacute;siticas tienen que tener para ser realmente &uacute;tiles.</p><h2>&iquest;Pruebas autom&aacute;ticas?</h2><p>Las pruebas o la bater&iacute;a de pruebas es un software que debe escribirse en paralelo a nuestro propio software y cuya responsabilidad es comprobar que nuestro software funciona correctamente. B&aacute;sicamente es <strong>software que prueba nuestro software</strong>.</p><p>Puede que intuitivamente pienses que construir una bater&iacute;a de pruebas, es trabajo adicional, ya que probablemente tardar&aacute;s m&aacute;s tiempo y por lo tanto tu trabajo ser&aacute; m&aacute;s caro para tus clientes pero esto no es as&iacute;.</p><p>Cuando tienes una buena bater&iacute;a de pruebas, la primera "derivada" es que vas a cometer menos errores. Menos errores supone menos tiempo arreglando errores y m&aacute;s tiempo programando. Adem&aacute;s supone menos frustraci&oacute;n en los usuarios.</p><p>La segunda derivada es que puedes hacer cambios con mayor confianza, y esto te hace ir m&aacute;s r&aacute;pido. Las pruebas detectar&aacute;n que has roto, y simplemente tendr&aacute;s que arreglarlo, un equipo con una buena bater&iacute;a de pruebas termina trabajando mucho m&aacute;s r&aacute;pido que un equipo que no las tiene.</p><p>Hay una tercera derivada y es que al desarrollar tu bater&iacute;a de pruebas te va a permitir dise&ntilde;ar mejor software, pero esto es algo en lo que profundizaremos en una entrada m&aacute;s adelante.</p><h2>&iquest;Si es tan bonito por que no todo el mundo hace pruebas autom&aacute;ticas?</h2><p>Cuando escribes pruebas debes ser tan cuidadoso c&oacute;mo con el c&oacute;digo de producci&oacute;n. Todo lo que hemos comentado ya en esta serie sobre elegir buenos <a href="/post/codigo-limpio-nombres">nombres</a>, <a href="/post/codigo-limpio-funciones">funciones</a>, <a href="/post/codigo-limpio-argumentos">argumentos</a>, etc son cosas que tambi&eacute;n aplican a las pruebas autom&aacute;ticas.</p><p>Escribir buenas pruebas requiere cierta t&eacute;cnica y ocurre que muchos programadores o equipos comienzan haciendo pruebas, y al no ser pruebas de calidad terminan teniendo una bater&iacute;a de pruebas que supone m&aacute;s un problema que una soluci&oacute;n. Tras esta mala experiencia desisten, por eso en esta entrada vamos a explicarte c&oacute;mo escribir buenas pruebas.</p><h2>Escribe tus pruebas "PRIMERO"</h2><p><img alt="Escribe pruebas r&aacute;pido" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/dcc63077554f52edf72fcc4d5c15300636e851dc.jpg" title="Escribe pruebas r&aacute;pido"></p><p><em>FIRST</em> o PRIMERO es un acr&oacute;nimo que se utiliza para describir las caracter&iacute;sticas que deber&iacute;a tener una prueba.</p><h3><em>Fast</em> o R&aacute;pidas</h3><p>Una prueba, as&iacute; como la bater&iacute;a de pruebas a la que pertenecen deber&iacute;an ser tan r&aacute;pidas c&oacute;mo sea posible. &iquest;Cu&aacute;nto? Pues depende del tipo de prueba y del proyecto. El autor no se moja en este aspecto, pero en mi opini&oacute;n deber&iacute;as mantener cada prueba por debajo de 1 segundo.</p><h3><em>Independent</em> o independientes</h3><p>Unas pruebas no deber&iacute;an depender de otras. Esto te permitir&aacute; ejecutar aisladamente las pruebas que fallen en lugar de tener que ejecutar toda la bater&iacute;a o un conjunto de pruebas.</p><h3><em>Repeatable</em> o repetibles</h3><p>El resultado de una prueba deber&iacute;a ser siempre el mismo y no variar si la ejecutas varias veces. De esta forma, podr&aacute;s ejecutar una prueba una y otra vez, hasta que arregles el error. De lo contrario tendr&iacute;as continuamente errores que luego no vas a poder reproducir.</p><h3><em>Self-validating</em> o validaci&oacute;n autom&aacute;tica</h3><p>Lo que quiere decir esta regla es que las pruebas no deber&iacute;an depender de una revisi&oacute;n, por ejemplo que el resultado fuera un texto que luego necesitar&aacute;s leer para saber si es correcto o no. La prueba debe pasar o no pasar, no deber&iacute;a haber otro resultado posible.</p><h3><em>Timely</em> o en el momento correcto</h3><p>El autor introduce en este cap&iacute;tulo las reglas del ciclo de TDD: rojo, verde y refactorizaci&oacute;n, pero no quiero profundizar mucho sobre este aspecto aqu&iacute;, porque tendremos el libro "Test Driven Development: By Example" por en este blog y en el canal de youtube m&aacute;s pronto que tarde.</p><h2>Show me the code</h2><p>Supongamos que tenemos la clase rectangulo que vimos en el cap&iacute;tulo de <a href="/post/codigo-limpio-estructuras-vs-objetos">estructuras vs objetos</a>.</p><pre><code class="php">class Rectangle
{
    private $height;
    private $width;

    public function __construct(float $height, float $width)
    {
        $this-&gt;height = $height;
        $this-&gt;width = $width;
    }

    public function area(): float
    {
        return round($this-&gt;height * $this-&gt;height, 2);
    }
}</code></pre><p>Escribir una prueba es una tarea muy sencilla, normalmente es simplemente una clase que tiene que extender de alg&uacute;n tipo de framework de pruebas, as&iacute; es como se hace con <code>phpunit</code></p><pre><code class="php">class RectangleTest extends \PHPUnit\Framework\TestCase
{
    public function test_area()
    {
        $rectangle = new Rectangle(1.11, 2.22);
        $this-&gt;assertSame(2.46, $rectangle-&gt;area());
    }
}</code></pre><p>F&aacute;cil, pero &iquest;que ocurre al ejecutarlo?</p><div class="alert alert-danger" role="alert">Failed asserting that 1.23 is identical to 2.46.</div><p>Efectivamente hab&iacute;a un error en el c&oacute;digo. En este caso lo hemos introducido a posta, pero es un tipo de error que se puede cometer f&aacute;cilmente.</p><p>&iquest;Has visto cual?</p>
]]></description><guid>https://devtia.com/post/codigo-limpio-pruebas-automaticas</guid><pubDate>Sat, 29 Aug 2020 11:32:50 +0200</pubDate></item><item><title>Los dogmas en el desarrollo de software</title><link>https://devtia.com/post/los-dogmas-en-el-desarrollo-de-software</link><description><![CDATA[<p>Esta entrada es un alto en el camino, dentro de la serie que estamos realizando sobre <a href="/post/codigo-limpio-indice-de-contenidos">el libro Clean Code de Robert C Martin</a>.</p><p>La semana pasada publicamos una entrada sobre <a href="/post/codigo-limpio-deja-de-comentar">el uso de los comentarios</a>. En ella explic&aacute;bamos que siempre que puedas <strong>deber&iacute;as evitar el uso de comentarios</strong>.</p><p>Argument&aacute;bamos que cuando <strong>utilizas un comentario para explicar un c&oacute;digo que no se entiende con facilidad</strong>, no est&aacute;s mejorando tu c&oacute;digo, sino que <strong>est&aacute;s poniendo una piedra en tu camino</strong>. Tu c&oacute;digo sigue siendo igual de dif&iacute;cil de entender y adem&aacute;s ahora te tendr&aacute;s que ocupar de mantener esos comentarios actualizados. Lo cual no aporta valor a tu proyecto.</p><p>Muchas personas nos han escrito tanto por Linkedin, Twitter, Youtube y el grupo privado que tenemos en Telegram para tratar temas del canal.</p><p>Nos han indicado diferentes ejemplos en el que era muy dif&iacute;cil eliminar los comentarios o directamente no se pod&iacute;an. No quiero entrar aqu&iacute; a revisar cada uno de los ejemplos, pero tras revisarlo con el equipo, era evidente que eran buenos ejemplos. <strong>En esos casos, los comentarios si ayudaban a mejorar el c&oacute;digo</strong>.</p><p>Es por eso que quiero hablar un poco sobre los dogmas.</p><h2>Los dogmas en el desarrollo de software</h2><p><strong>Existen</strong> por supuesto <strong>muchos dogmas en el mundo del desarrollo de software</strong>, seguro que te suenan algunos de estos:</p><ol><li>Si no haces scrum estricto no haces scrum.</li><li>No se puede sacar adelante un proyecto sin pruebas autom&aacute;ticas.</li><li>En 2020 todo el mundo tiene que hacer DDD.</li></ol><p>Estas y otras muchas que se te ocurran las hemos escuchado todos cientos de veces.</p><h2>Poner un hombre en la luna</h2><p><img alt="Sin las mejores pr&aacute;cticas del momento actual fueron capaces de poner un hombre en la luna" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/94e95d9b4b485726ede6d478ee0530679b4258dc.jpg" title="Sin las mejores pr&aacute;cticas del momento actual fueron capaces de poner un hombre en la luna"></p><p>Corr&iacute;a el a&ntilde;o 1957, estados unidos y la uni&oacute;n sovi&eacute;tica se encontraban enfrascados en mitad de la guerra fr&iacute;a, cuando los sovi&eacute;ticos pusieron por primera vez un sat&eacute;lite en &oacute;rbita, el sputnik. Esto supuso un gran varapalo para la sociedad americana, que crear&iacute;a la NASA. Hab&iacute;a comenzado la carrera espacial.</p><p>12 a&ntilde;os m&aacute;s tarde en cabo ca&ntilde;averal despega un cohete con tres astronautas y una misi&oacute;n: "poner un hombre en la luna". Los estados unidos tuvieron que hacer un gran esfuerzo en el desarrollo de la tecnolog&iacute;a inform&aacute;tica, ya que aquel cohete ten&iacute;a un computador capaz de guiarlo. Ese computador por supuesto ejecutaba software, y ese software fue programado 30 a&ntilde;os antes de que se publicara el manifiesto &aacute;gil.</p><p>Es decir que <strong>sin las consideradas mejores pr&aacute;cticas del momento actual, sin el framework de moda</strong>, este equipo de programadores <strong>fueron capaces de dise&ntilde;ar y programar un software que puso a un hombre en la luna</strong>.</p><h2>La flexibilidad y empat&iacute;a</h2><p><img alt="Lo m&aacute;s importante es tu capacidad para adaptarte a las necesidades de cada situaci&oacute;n" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/018e8317157f988e9e8198640e24557ef4def4d5.jpg" title="Lo m&aacute;s importante es tu capacidad para adaptarte a las necesidades de cada situaci&oacute;n"></p><p><strong>Lo mejor es ser capaz de adaptarse a cada situaci&oacute;n</strong>, este es el &uacute;nico dogma que te tienes que grabar a fuego.</p><p><strong>Pensar que s&oacute;lo hay un camino</strong> para hacer las cosas bien es cuando menos <strong>una postura algo miope</strong>. Si alguien piensa que su metodolog&iacute;a / tecnolog&iacute;a / framework / loquesea es netamente superior a las todas las dem&aacute;s est&aacute; evidentemente equivocado.</p><p>Te voy a poner un ejemplo personal. La t&eacute;cnica del dise&ntilde;o dirigido por test (TDD) es una t&eacute;cnica que te ayuda a dise&ntilde;ar software escribiendo primero las pruebas y luego el c&oacute;digo de producci&oacute;n. Al hacerlo al rev&eacute;s, haciendo primero las pruebas, te ayuda a que pienses en tu dise&ntilde;o desde fuera hacia dentro, en lugar de como lo har&iacute;as habitualmente, desde dentro hacia afuera.</p><p>Yo estuve haciendo TDD durante aproximadamente un a&ntilde;o. Despu&eacute;s dej&eacute; de hacerlo. &iquest;Por qu&eacute;? Pues por dos motivos. Primero porque una vez que asimilas bien la metodolog&iacute;a, vas a ser capaz de pensar desde fuera hacia dentro sin necesidad de escribir primero el test y segundo porque en muchos proyectos el dise&ntilde;o no es algo crucial.</p><p>En mi opini&oacute;n <strong>tu criterio vale m&aacute;s que lo que alguien escribiera en un libro</strong> en la punta del mundo hace veinte a&ntilde;os.</p><h2>No dejes de aprender</h2><p>Que los dogmas no sean realmente dogmas, no es una excusa para no seguir aprendiendo o mejorando. En mi opini&oacute;n es tu responsabilidad como buen profesional ir mejorando cada vez tus capacidades.</p><p>Adem&aacute;s es una buena forma de disfrutar de nuestra profesi&oacute;n y por que no decirlo de ganar cada vez m&aacute;s dinero. No se paga igual de bien a alguien que programa en el lenguaje "a pelo" que a un "tope de gama" en la &uacute;ltima metodolog&iacute;a o framework de moda.</p><p>Te propongo algunos consejos para que no dejes de aprender.</p><p><strong>Busca un buen proyecto</strong> La forma m&aacute;s f&aacute;cil de seguir mejorando es dedicar ocho horas al d&iacute;a a mejorar, y para ello debes elegir tu puesto de trabajo en funci&oacute;n de donde m&aacute;s vayas a aprender. El dinero y otras ventajas deber&iacute;an pasar a un plano secundario. Da igual que ganes menos dinero el a&ntilde;o que viene, lo importante es cu&aacute;nto dinero vas a ganar el resto de tu vida.</p><p><strong>Sigue canales de youtube y podcast de la tem&aacute;tica</strong>. Una buena forma de seguir aprendiendo es este tipo de contenidos que suelen tener una alta calidad, y no requieren de demasiado esfuerzo, ya que puedes ver este video, mientras que vas en el tren de camino al trabajo o mientras esperas a un amigo.</p><p><strong>Asiste a conferencias y meetups</strong>. Es una forma f&aacute;cil de aprender y de conocer gente. Nunca vas a aprender sobre todo, pero si tienes el tel&eacute;fono del que sabe, tambi&eacute;n puede servir.</p><p><strong>Lee libros</strong> En comparaci&oacute;n con los anteriores es el que m&aacute;s esfuerzo o disciplina requiere, pero si no quieres que te den gato por liebre lo mejor es acudir a la fuente. Leer un libro al a&ntilde;o, puede marcar la diferencia.</p><p>No olvides apuntarte <a href="/academy/">a nuestra academia</a>, para recibir todas las semanas un nuevo video sobre desarrollo de software</p>
]]></description><guid>https://devtia.com/post/los-dogmas-en-el-desarrollo-de-software</guid><pubDate>Fri, 31 Jul 2020 15:08:18 +0200</pubDate></item><item><title>Código limpio: Funciones</title><link>https://devtia.com/post/codigo-limpio-funciones</link><description><![CDATA[<p>En esta entrada vamos a ver qu&eacute; caracter&iacute;sticas tienen o no tienen que tener <strong>nuestras funciones</strong> para que puedan considerase <strong>c&oacute;digo limpio</strong>. Para ello vamos a analizar el componente Lock de Symfony por ser un componente bastante sencillo de entender. Este componente crea y administra bloqueos, un mecanismo para proporcionar acceso exclusivo a un recurso compartido al m&aacute;s puro estilo de los sem&aacute;foros en el lenguaje de programaci&oacute;n c.</p><h2>Hacer una &uacute;nica cosa</h2><p>Una funci&oacute;n solo deber&iacute;a hacer una &uacute;nica cosa, y adem&aacute;s deber&iacute;a de ser ser capaz de hacerla bien. Este concepto a la vez que es sencillo de entender es bastante complejo de explicar, as&iacute; que vamos a definir algunas caracter&iacute;sticas que pueden indicarte que una de tus funciones hacen m&aacute;s de una cosa.</p><h3>Demasiado larga</h3><p>Si una funci&oacute;n tiene <strong>demasiadas l&iacute;neas de c&oacute;digo</strong>, es muy probable que est&eacute; haciendo varias cosas a la vez. Deber&iacute;as tratar de encontrar bloques dentro de esa misma funci&oacute;n que hagan una cosa concreta e ir extrayendolas en funciones m&aacute;s peque&ntilde;as.</p><p>El l&iacute;mite exacto para considerarse demasiado larga es un poco difuso, pero por encima de 20 l&iacute;neas deber&iacute;as al menos plantearte si tu funci&oacute;n es demasiado larga.</p><h3>Secciones</h3><p>Como continuaci&oacute;n a lo anterior, <strong>si una funci&oacute;n puede dividirse en secciones</strong>, nos encontramos ante un caso claro de que esa funci&oacute;n hace m&aacute;s de una cosa.</p><p>A continuaci&oacute;n vemos la funci&oacute;n <code>Lock::acquire</code></p><pre><code class="php">/**
 * {@inheritdoc}
 */
public function acquire(bool $blocking = false): bool
{
    try {
        if ($blocking) {
            if (!$this-&gt;store instanceof BlockingStoreInterface) {
                throw new NotSupportedException(sprintf('The store "%s" does not support blocking locks.', get_debug_type($this-&gt;store)));
            }
            $this-&gt;store-&gt;waitAndSave($this-&gt;key);
        } else {
            $this-&gt;store-&gt;save($this-&gt;key);
        }

        $this-&gt;dirty = true;
        $this-&gt;logger-&gt;info('Successfully acquired the "{resource}" lock.', ['resource' =&gt; $this-&gt;key]);

        if ($this-&gt;ttl) {
            $this-&gt;refresh();
        }

        if ($this-&gt;key-&gt;isExpired()) {
            try {
                $this-&gt;release();
            } catch (\Exception $e) {
                // swallow exception to not hide the original issue
            }
            throw new LockExpiredException(sprintf('Failed to store the "%s" lock.', $this-&gt;key));
        }

        return true;
    } catch (LockConflictedException $e) {
        $this-&gt;dirty = false;
        $this-&gt;logger-&gt;notice('Failed to acquire the "{resource}" lock. Someone else already acquired the lock.', ['resource' =&gt; $this-&gt;key]);

        if ($blocking) {
            throw $e;
        }

        return false;
    } catch (\Exception $e) {
        $this-&gt;logger-&gt;notice('Failed to acquire the "{resource}" lock.', ['resource' =&gt; $this-&gt;key, 'exception' =&gt; $e]);
        throw new LockAcquiringException(sprintf('Failed to acquire the "%s" lock.', $this-&gt;key), 0, $e);
    }
}</code></pre><p>Podemos observar 3 secciones principales. En la primera trata de adquirir el bloqueo, en la segunda comprueba si el bloqueo deber&iacute;a haber expirado y en el &uacute;ltimo bloque realiza el manejo de errores. Podr&iacute;amos facilitarle mucho la vida al lector si extrajeramos esos bloques dej&aacute;ndolos en algo similar a esto.</p><pre><code class="php">/**
 * {@inheritdoc}
 */
public function acquire(bool $blocking = false): bool
{
    try {
        $this-&gt;tryAcquire($blocking);
        $this-&gt;releaseIfExpired();

        return true;
    } catch (\Exception $e) {
        return $this-&gt;handleException($e);
    }
}</code></pre><h3>switch</h3><p>Un bloque switch es probablemente un indicador de que <strong>una funci&oacute;n hace varias cosas</strong>. La forma de solucionar esto es extraer ese bloque switch para que la &uacute;nica cosa que haga nuestra funci&oacute;n es decidir qu&eacute; hacer en funci&oacute;n del valor que le pasemos a switch.</p><p>A continuaci&oacute;n vemos un caso v&aacute;lido de un bloque switch dentro de la clase <code>Store\StoreFactory</code>, ya que aunque tiene un elemento switch la funci&oacute;n hace una &uacute;nica cosa, en este caso devolver la instancia de <code>Store\PersistingStoreInterface</code> correcta en funci&oacute;n del tipo de conexi&oacute;n que estemos utilizando.</p><pre><code class="php">/**
     * @param \Redis|\RedisArray|...
     *
     * @return PersistingStoreInterface
     */
    public static function createStore($connection)
    {
        if (!\is_string($connection) &amp;&amp; !\is_object($connection)) {
            throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be [...], "%s" given.');
        }

        switch (true) {
            case $connection instanceof \Redis:
            case $connection instanceof \RedisArray:
            case $connection instanceof \RedisCluster:
            case $connection instanceof \Predis\ClientInterface:
            case $connection instanceof RedisProxy:
            case $connection instanceof RedisClusterProxy:
                return new RedisStore($connection);
            // en total hay 32 casos diferentes.
        }

        throw new InvalidArgumentException(sprintf('Unsupported Connection: "%s".', $connection));
    }</code></pre><h2>Un s&oacute;lo nivel de abstracci&oacute;n</h2><p>Dentro de una misma funci&oacute;n debemos mantenernos siempre dentro del mismo nivel de abstracci&oacute;n.</p><p>Por ejemplo si tuvi&eacute;ramos una capa de dominio de negocio y una capa de persistencia de datos, dentro de una misma funci&oacute;n <strong>no deber&iacute;amos pasar de un nivel a otro</strong>, por lo cual tendr&iacute;amos funciones con l&oacute;gica de negocio y funciones con l&oacute;gica de persistencia de datos.</p><h2>Procesamiento de errores</h2><p><img alt="procesamiento de errores" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/cacadb988f34f4c8084fcdecd5efc0ff23e25a7e.jpg" title="procesamiento de errores"></p><p>Empezaremos indicando que el procesamiento de errores es mucho m&aacute;s sencillo <strong>a trav&eacute;s de excepciones</strong> que de c&oacute;digos de error, pero esto lo veremos mucho m&aacute;s en profundidad en el cap&iacute;tulo de procesamiento de errores.</p><p>El problema que tienen los bloques <code>try / catch</code> es que dificultan mucho la lectura.Si tenemos una funci&oacute;n donde adem&aacute;s de la l&oacute;gica de la funci&oacute;n tiene uno o m&aacute;s bloques <code>try / catch</code>, probablemente deber&iacute;amos extraer la parte de la l&oacute;gica de negocio y dejar esa funci&oacute;n s&oacute;lamente con los bloques try catch tal y c&oacute;mo hicimos con la funci&oacute;n <code>Lock::acquire</code> en el ejemplo anterior.</p>
]]></description><guid>https://devtia.com/post/codigo-limpio-funciones</guid><pubDate>Wed, 03 Jun 2020 10:42:06 +0200</pubDate></item><item><title>¿Qué es el código limpio?</title><link>https://devtia.com/post/que-es-el-codigo-limpio</link><description><![CDATA[<p>En esta entrada vamos a realizar una peque&ntilde;a introducci&oacute;n a los conceptos principales del libro.</p><h2>M&aacute;s lento para ir m&aacute;s r&aacute;pido</h2><p><img alt="M&aacute;s lento para ir m&aacute;s r&aacute;pido" loading="lazy" src="/cache/thumb_1200_0400/uploads/content/image/image/826f0cfe85aeb9de4864a7440b4529066e96be1d.jpg" title="M&aacute;s lento para ir m&aacute;s r&aacute;pido"></p><p>A lo largo de este primer cap&iacute;tulo Martin nos introduce la idea de que en muchos proyectos cuando se trata de ir demasiado deprisa el resultado es exactamente el contrario. Si eers programador probablemente hayas vivido esto en tus propias carnes. En el periodo de uno o dos a&ntilde;os en los que los programadores han ido a&ntilde;adiendo cambios al c&oacute;digo sin control el resultado es que cada vez se hace m&aacute;s y m&aacute;s dif&iacute;cil avanzar y se dedica la mayor&iacute;a del tiempo a solucionar incidencias. Para a&ntilde;adir cualquier peque&ntilde;o cambio es necesario tener en cuenta un sin fin de detalles, efectos y consecuencias, as&iacute; que cada nueva funcionalidad a&ntilde;ade a&uacute;n m&aacute;s complejidad al proyecto.</p><p>La soluci&oacute;n que aplican muchos managers en este momento es aumentar la plantilla, pero sin cambiar la forma de trabajar, lo que fragmenta m&aacute;s el c&oacute;digo y reduce cada vez m&aacute;s la productividad. M&aacute;s pronto que tarde el equipo de desarrollo se plantar&aacute; y exigir&aacute; "rehacer" el c&oacute;digo para sacar una nueva versi&oacute;n, esta vez sin los problemas de la actual. Pero recuerda que si no cambian su forma de trabajar y de pensar, el mismo equipo que gener&oacute; el problema volver&aacute; a generar un problema parecido de nuevo.</p><p>Si te has visto en esta situaci&oacute;n te aconsejo leer esta serie de entradas sobre c&oacute;digo limpio.</p><h2>Bien, &iquest;Pero qu&eacute; es el c&oacute;digo limpio?</h2><p>El libro autor comienza haci&eacute;ndose el mismo esta pregunta. Para ello recurre a diversos autores relevantes a los que les traslada esta cuesti&oacute;n.</p><div class="row mt-2"><div class="col-sm-3"><p><img alt="Bjarne stroustrup" loading="lazy" src="/cache/thumb_1200/uploads/content/image/image/d240078809f3a4cc995742f4cd017a235c31f529.jpg" title="Bjarne stroustrup"></p></div><div class="col-sm-9"><h3 class="mt-0">Bjarne stroustrup</h3><p>Ha destacado por desarrollar el lenguaje de programaci&oacute;n C++ y por ser el autor del libro que se considera de referencia en dicho lenguaje: "programming principles and practice using c++".</p><p>Bjarne indica que el c&oacute;digo debe ser <strong>elegante y eficaz</strong>, la <strong>l&oacute;gica debe ser sencilla</strong> para evitar errores, el <strong>procesamiento de errores debe ser completo</strong>, el <strong>rendimiento debe ser &oacute;ptimo</strong>. Bjarne concluye que el c&oacute;digo limpio <strong>hace bien una &uacute;nica cosa</strong>.</p></div></div><div class="row mt-2"><div class="col-sm-9"><h3 class="mt-0">Grady Booch</h3><p>Es conocido entre otras cosas por ser uno de los dise&ntilde;adores del Lenguaje Unificado de Modelado UML.</p><p>Grady define que el c&oacute;digo limpio debe ser <strong>simple y directo</strong>. Adem&aacute;s el c&oacute;digo <strong>debe exponer la intenci&oacute;n</strong> del dise&ntilde;ador.</p></div><div class="col-sm-3"><p><img alt="Grady Booch" loading="lazy" src="/cache/thumb_1200/uploads/content/image/image/f755bee53e04e7fc5953612f473229b5be394256.jpg" title="Grady Booch"></p></div></div><div class="row mt-2"><div class="col-sm-3"><p><img alt="Dave thomas" loading="lazy" src="/cache/thumb_1200/uploads/content/image/image/ac935c6dad12174b783964ac57c0f63a6540819f.jpg" title="Dave thomas"></p></div><div class="col-sm-9"><h3 class="mt-0">Dave thomas</h3><p>Es el autor del libro pragmatic programmer que tambi&eacute;n nos gustar&iacute;a analizar.</p><p>Dave introduce la idea de que el c&oacute;digo limpio debe ser <strong>f&aacute;cil de modificar</strong> para alguien que no es el autor original. En su opini&oacute;n el c&oacute;digo debe tener tanto <strong>pruebas unitarias c&oacute;mo de aceptaci&oacute;n</strong>. Los <strong>nombres deben tener significado</strong>. El c&oacute;digo ofrece <strong>una &uacute;nica forma de hacer una determinada cosa</strong> a trav&eacute;s de una API clara.</p></div></div><div class="row mt-2"><div class="col-sm-9"><h3 class="mt-0">Michael Feathers</h3><p>Es el autor del libro working effectively with legacy code.</p><p>Michael considera que el c&oacute;digo limpio es aquel al que <strong>se le ha dado importancia</strong> y al mismo tiempo <strong>se ha mantenido sencillo</strong>. Seg&uacute;n Michael cuando te enfrentas a un c&oacute;digo limpio no existe una forma f&aacute;cil de mejorarlo, ya que el autor pens&oacute; en todos los aspectos posibles.</p></div><div class="col-sm-3"><p><img alt="Michael Feathers" loading="lazy" src="/cache/thumb_1200/uploads/content/image/image/68dcfa1ce0de8c7be21551b3a1ac7334988451e9.jpg" title="Michael Feathers"></p></div></div><div class="row mt-2"><div class="col-sm-3"><p><img alt="Ron Jeffires" loading="lazy" src="/cache/thumb_1200/uploads/content/image/image/a66b690433e5eea7b6c7ba98ef07d6e25bbe07d5.jpg" title="Ron Jeffires"></p></div><div class="col-sm-9"><h3 class="mt-0">Ron Jeffires</h3><p>Es uno de los tres desarrolladores de la metodolog&iacute;a eXtreme programming.</p><p>Ron nos indica que el c&oacute;digo limpio debe seguir las indicaciones de Ken Beck. En orden de prioridad <strong>debe contener pruebas</strong>, <strong>debe evitar la duplicidad</strong>, <strong>debe expresar los conceptos</strong> del dise&ntilde;o y <strong>debe mantenerse tan peque&ntilde;o c&oacute;mo sea posible</strong>.</p></div></div><div class="row mt-2"><div class="col-sm-9"><h3 class="mt-0">Ward Cunningham</h3><p>Es uno de los impulsores de la identificaci&oacute;n y estandarizaci&oacute;n de los patrones de dise&ntilde;o.</p><p>Seg&uacute;n Ward sabemos que estamos ante c&oacute;digo limpio cuando <strong>el c&oacute;digo hace lo que se espera que haga</strong>.</p></div><div class="col-sm-3"><p><img alt="Ward Cunningham" loading="lazy" src="/cache/thumb_1200/uploads/content/image/image/c49ee369ea6a530b2089de35bf5d506146374f0a.jpg" title="Ward Cunningham"></p></div></div><h2>&iquest;Qu&eacute; conclusiones sacamos?</h2><p>De todas estas entrevistas se extraen una serie de ideas m&aacute;s o menos comunes.</p><h3>Que haga lo que se espera que haga</h3><p>Nosotros en DEVTIA a esta regla la llam&aacute;mos: "No me mientas". Es tambi&eacute;n muy f&aacute;cil de entender cada funci&oacute;n y cada clase tiene que hacer exactamente, lo que se espera que haga. Adem&aacute;s esto debe ser evidente, no debo necesitar entrar a ver el m&eacute;todo para saber que puedo esperar de el.</p><h3>Peque&ntilde;o</h3><p>Esta es una regla f&aacute;cil de seguir y f&aacute;cil de entender. Cuanto m&aacute;s peque&ntilde;o sea nuestro c&oacute;digo m&aacute;s f&aacute;cil ser&aacute; que podamos modificarlo y mantenerlo. Depender&aacute; de cada proyecto y de cada equipo establecer los l&iacute;mites, pero un buen punto de partida podr&iacute;a ser que las funciones y las clases con sus m&eacute;todos colapsados deber&iacute;an poder visualizarse completamente en las pantallas que est&aacute; usando el equipo.</p><p>En los siguientes cap&iacute;tulos veremos muchos ejemplos para mejorar este aspecto.</p><h3>Sin duplicidad</h3><p>Un error claro de dise&ntilde;o es cuando necesitas copiar y pegar tu c&oacute;digo en diferentes sitios. A la larga esto va a introducir errores, ya que cuando alguien actualize una copia, probablemente olvidar&aacute; actualizar las dem&aacute;s.</p><h3>Debe tener tests</h3><p>Casi todos los autores han introducido la importancia de los tests. Tener una buena bater&iacute;a de test nos va a permitir trabajar con nuestro c&oacute;digo y poderlo modificar con seguridad de que si estamos rompiendo alguna cosa, los test nos van a avisar.</p><h2>La regla del boy scout</h2><p><img alt="La regla del boy scout" loading="lazy" src="/cache/thumb_1200_0200/uploads/content/image/image/e9f673dc381ac6d3e65ddb07eb0856d15af750d5.jpg" title="La regla del boy scout"></p><p>La regla del Boy Scout se trata de una regla muy sencilla. Originalmente se refiere a lo que hacen los Boy Scout cuando hacen una acampada: dejan el lugar en el que han estado un poco m&aacute;s limpio de como se lo encontraron.</p><p>Aplicado al desarrollo de software nos indica que si en nuestro d&iacute;a a d&iacute;a seg&uacute;n estamos trabajando en un proyecto podemos ir introduciendo peque&ntilde;as mejoras que el autor original no tuvo en cuenta, pero que para nosotros son evidentes. Estos peque&ntilde;os cambios, en los que podemos incluir desde cambio de nombres, extracci&oacute;n de m&eacute;todos, peque&ntilde;os refactorizaciones, soluci&oacute;n de bugs, ect, a lo largo de un periodo de tiempo generar&aacute; un grado de maduraci&oacute;n en el c&oacute;digo.</p>
]]></description><guid>https://devtia.com/post/que-es-el-codigo-limpio</guid><pubDate>Sat, 23 May 2020 15:40:32 +0200</pubDate></item><item><title>Pon a competir a tus empleados</title><link>https://devtia.com/post/pon-a-competir-a-tus-empleados</link><description><![CDATA[<p>La competencia interna entre los trabajadores de una empresa siempre acaba existiendo de una manera o de otra <strong>&iquest;por qu&eacute; no transformar esta competencia en algo positivo que ayude a alcanzar y controlar los objetivos de la empresa?</strong></p><p>Como empresa nueva nos encontramos con determinados problemas al empezar que nos llevaron a instaurar un sistema de competencia entre empleados que mantuviera controlados ciertos aspectos y ayudar&aacute; a llegar a determinadas metas.</p><h2>&iquest;Qu&eacute; fue lo que nos llev&oacute; a tomar esta decisi&oacute;n?</h2><p>Uno de los principales problemas a los que tuvimos que hacer frente en nuestros inicios fue el motivar a nuestros empleados a seguir unas determinadas pautas y pol&iacute;ticas a la hora de trabajar. Algunas de estas pautas eran:</p><ol><li><strong>La calidad no se negocia</strong>, nos da exactamente igual que el cliente tenga prisa o que nos presione para que hagamos las cosas como ellos digan. Preferimos tardar m&aacute;s si el resultado va a ser de una calidad mayor. La experienca nos demuestra que si te dejas llevar por las "prisas" del cliente o de tu jefe, acabas realizando un trabajo muy pobre, y las miradas van a venir a t&iacute;, cuando empiezen los problemas. Por esto es muy importante saber poner como prioridad la calidad en el trabajo.</li><li><strong>No se sube absolutamente nada a producci&oacute;n sin haber realizado las pruebas autom&aacute;ticas.</strong> Los programadores que no est&aacute;n habituados a trabajar con pruebas autom&aacute;ticas, suelen tener mucha reticencia, a realizarlas, por desconocimiento y por pereza, por lo que las dejan siempre para el final. Tras algunos meses trabajando de esta forma tienes un proyecto con apenas pruebas y entonces vienen los problemas. Por eso, dejamos a decisi&oacute;n del programador si quiere realizar las pruebas antes mediante TDD o desp&uacute;es, pero no se puede subir codigo de producci&oacute;n sin sus correspondientes pruebas.</li><li><strong>Hay que documentar lo que hacemos</strong>. En nuestra opini&oacute;n, nuestros desarrollos tienen que estar auto documentados. Esto significa, que si por ejemplo para calcular un dato, est&aacute;s aplicando una formula, lo ideal, es que puedas plasmar esa formula en el mismo sitio donde se muestra el dato, ya sea a trav&eacute;s de tooltips, aclaraciones debajo, o p&aacute;ginas de ayuda. De esta forma, ayudamos al usuario a comprender que est&aacute; pasando y a la vez tenemos una documentaci&oacute;n que se mantiene actualizada. En un futuro escribiremos un art&iacute;culo sobre c&oacute;mo se deber&iacute;a documentar seg&uacute;n nuestro criterio.</li></ol><p>Por desgracia, el equipo siempre acababa dej&aacute;ndose llevar por las imperantes necesidades del cliente y no se cumpl&iacute;an determinadas instrucciones de la empresa. En DEVTIA entendemos este comportamiento ya que el cliente es el que manda y el que aporta el dinero al proyecto. La falta de tiempo existente y las prisas del cliente eran uno de los principales motivos por los que el equipo acababa por no seguir el plan.</p><p>El director de tecnolog&iacute;a tampoco dispon&iacute;a de tiempo suficiente para revisar uno por uno el trabajo de la plantilla, de forma recurrente, lo cual favorec&iacute;a el no seguir las normas generales de la empresa.</p><h2>&iquest;C&oacute;mo mejoramos la situaci&oacute;n?</h2><p>Fue en este punto cuando decidimos revertir la situaci&oacute;n, <strong>convirtiendo algo negativo en una manera de evolucionar como empresa y de acabar obteniendo mejores resultados</strong>.</p><p>Lo primero que decidimos hacer fue empezar a medir el desempe&ntilde;o de la plantilla con respecto a unas m&eacute;tricas previamente definidas y estudiadas. Estas m&eacute;tricas se basan en tres principios:</p><ul><li>Deben ser objetivas.</li><li>Deben ser autom&aacute;ticas.</li><li>Deben estar alineadas con la pol&iacute;tica de la empresa.</li></ul><p>Las m&eacute;tricas que elegimos fueron las siguientes:</p><h3>Inserciones en el repositorio</h3><p><strong>Las inserciones son el n&uacute;mero de l&iacute;neas a&ntilde;adidas al c&oacute;digo</strong>. Cualquier programador con conocimientos suficientes opinar&aacute; que no es una buena m&eacute;trica en la que basar un sistema de competencia entre empleados, ya que es algo muy subjetivo, y no por insertar m&aacute;s l&iacute;neas en el c&oacute;digo se realiza un trabajo mejor.</p><p>Por ejemplo, un proyecto con muchas tareas de soporte al cliente, generar&aacute; menos inserciones, lo cual no significa que se haya trabajado menos&hellip; &iquest;verdad? Por ello somos partidarios de darle la importancia necesaria a esta m&eacute;trica, pero dentro de un contexto.</p><p><strong>Es un factor que te permite medir la actuaci&oacute;n y desempe&ntilde;o de una person</strong>a. Si una persona hace pocas inserciones en una semana no es nada preocupante, pero si este comportamiento perdura en el tiempo podr&iacute;a ser indicador de que algo no va como deber&iacute;a.</p><p><strong>Actualmente contamos con una media de 2000 inserciones</strong>, que sirven de gu&iacute;a para hacernos una idea de c&oacute;mo va la cosa.</p><h3>Cobertura de rutas</h3><p>Es una medida que nos dice el tanto por ciento de rutas (URL&rsquo;s) que est&aacute;n cubiertas al menos por un test funcional. <strong>La situaci&oacute;n id&oacute;nea ser&iacute;a que todas las rutas pasaran por al menos un test funcional</strong>.</p><p>Aunque no es una medida 100% fiable en cuanto al desempe&ntilde;o del trabajo, si que es una referencia para saber si la plantilla est&aacute; subiendo los cambios y el nuevo c&oacute;digo con test.</p><p>Cuando empezamos con esta manera de trabajar, ten&iacute;amos entre un 10-20% de URL cubiertos con test,<strong> actualmente nos encontramos en torno al 92%</strong>.</p><h3>Succes time</h3><p><strong>Es el tiempo medido en % en el cual los test est&aacute;n en verde</strong>, es decir que est&aacute;n pasando todos correctamente. Actualmente esta m&eacute;trica la medimos con el programa <strong>Jenkins</strong>, una herramienta open source construida espec&iacute;ficamente para ello.</p><p>Una de nuestras prioridades utilizando esta m&eacute;trica es lograr que los test se encuentren verdes la mayor parte del tiempo, no que se dejen para el final despu&eacute;s de haber pasado semanas en rojo. Actualmente permanecemos verdes <strong>el 90% del tiempo</strong> lo cual es muy positivo.</p><p>Queremos que nuestros empleados est&eacute;n atentos y se preocupen de ello d&iacute;a a d&iacute;a. De hecho, este es uno de los principales motivos por los que ponemos a competir a nuestros empleados, para aumentar la productividad debido a la competencia entre ellos.</p><h3>Tareas cerradas en Jira</h3><p><strong>Jira es la herramienta que utilizamos para la gesti&oacute;n de las tareas realizadas por el equipo</strong>. Nuestro fin es que todo quede fielmente reflejado en la herramienta. As&iacute; podremos saber:</p><ul><li>Cu&aacute;l era el alcance original de la tarea.</li><li>C&oacute;mo fue evolucionando.</li><li>Qui&eacute;n era el responsable.</li><li>C&oacute;mo fue su resoluci&oacute;n.</li><li>A que l&iacute;neas de c&oacute;digo afecto.</li></ul><p>Aunque una tarea no es una medida exacta ya que unas son mucho m&aacute;s complejas que otras, se logra fomentar el uso de la herramienta. <strong>Actualmente pedimos que se cierren al menos cuatro tareas por semana</strong>.</p><h2>&iquest;C&oacute;mo fue la evoluci&oacute;n?</h2><p><img alt="" src="/cache/thumb_1200_0200/uploads/content/image/image/613e3df69fa9ebeb3d1a992f3a6af17310aea85a.jpg" loading="lazy"></p><p>Empezamos a medir todas las m&eacute;tricas anteriormente expuestas a trav&eacute;s de informes periodicos que adem&aacute;s recibi&aacute;n cada miembro del equipo. De esta forma pod&iacute;a saber no s&oacute;lo lo bien o mal que lo estaban haciendo, si no como estaban en comparaci&oacute;n con el resto del equipo.</p><p>Cada semana cada miembro del equipo recib&iacute;a un correo similar a este:</p><p><img alt="Informe semanal" src="/cache/thumb_1200_0800/uploads/content/image/image/6483eb45222a3d1228165a9e136af96ee44e706d.jpg" title="Informe semanal" loading="lazy"></p><p>Cada mes cada miembro del equipo recib&iacute;a un correo similar a este:</p><p><img alt="Informe semanal" src="/cache/thumb_1200_0800/uploads/content/image/image/74b5eac346ff6218ac9833451399380fc87ff277.jpg" title="Informe semanal" loading="lazy"></p><p>Los resultados fueron sorprendentes a la par que satisfactorios, el equipo pas&oacute; de tener un compromiso bastante bajo a <strong>estar totalmente comprometido y dedicado</strong>. Se establecieron unos m&iacute;nimos semanales a cumplir, modific&aacute;ndolos seg&uacute;n el desempe&ntilde;o.</p><p>Para motivar esta competencia y hacerla lo m&aacute;s sana posible, <strong>impusimos una sanci&oacute;n de un euro para que todo aquel que fallara en uno de los criterios m&iacute;nimos</strong>. El dinero los introducimos en una peque&ntilde;a hucha con forma de cerdito, consiguiendo que el proceso de pagar no se convierta en algo hiriente, sino que tuviera un toque simp&aacute;tico.</p><p>En el momento en que tengamos cierta cantidad de dinero dentro del cerdito, <strong>se comprar&aacute; un regalo al que todo el mundo quiera optar, en nuestro caso algo de tem&aacute;tica freak</strong>. Estableceremos un sistema de puntuaci&oacute;n teniendo en cuenta todo lo anteriormente explicado y<strong> el empleado que m&aacute;s puntos acumule en un determinado periodo de tiempo, ser&aacute; el que se lleve el premio</strong>.</p><h2>Tambi&eacute;n para clientes</h2><p>Aunque durante toda la entrada hemos hablado sobre como hacemos competir a nuestros empleados. Es una pol&iacute;tica que tratamos de implantar entre nuestros clientes. Si acceden, nos gusta ponerle en el dashboard de cada usuario, algunas metricas que indiquen como es su rendimiento con respecto al resto de empleados de su equipo.</p><p>Por ejemplo si tienen un equipo comercial, cada miembro podr&iacute;a ver cual es la facturaci&oacute;n que ha conseguido ese a&ntilde;o, y el porcentaje con respecto al total del equipo.</p><p>&iquest;Y a ti, qu&eacute; te parece nuestro sistema para poner a competir a nuestros empleados?</p>
]]></description><guid>https://devtia.com/post/pon-a-competir-a-tus-empleados</guid><pubDate>Wed, 26 Feb 2020 22:21:14 +0100</pubDate></item><item><title>Un fin de semana en la pulpo conf 2019</title><link>https://devtia.com/post/un-fin-de-semana-en-la-pulpo-conf-2019</link><description><![CDATA[<h2>PREPARATIVOS</h2><p>Este a&ntilde;o se ha dado una coincidencia muy peculiar. Se celebraba la primera Pulpo Conf en Vigo y yo iba a ir a mi primera meetup, desde que puedo considerarme programador, gracias a Dani, que nos propuso hacer una escapada de fin de semana a todo el equipo de Devtia. Casualidades de la vida, ambas iban a coincidir en el tiempo y all&iacute; nos plantamos, nada m&aacute;s acabar las vacaciones, en las tierras norte&ntilde;as.</p><p><img alt="9a64731dc3cdc7c7b537f738572902c8b102540c.jpg" src="/cache/thumb_1200_0400/uploads/content/image/image/9a64731dc3cdc7c7b537f738572902c8b102540c.jpg" loading="lazy"></p><p>Puede parecer que no pero en coche son unas pocas horas de trayecto de Madrid a Vigo. Concretamente, y sin contar paradas, algo menos de 6 horas de camino. Salimos desde mi barrio al finalizar la jornada y nos pusimos en marcha amenizados por m&uacute;sica rock, conversaciones sobre historia (es lo que tiene estar rodeado de expertos en la materia) y alg&uacute;n tip de programaci&oacute;n.</p><p>Llegamos a la ciudad de Vigo, en tierra galegas, sobre las 20:00. Un peque&ntilde;o paseo, una cerveza en una terraza y vuelta al piso para cenar, contar 3 chistes y dormir para estar a tope la ma&ntilde;ana siguiente, que esto empezaba bastante pronto.</p><h2>LA CONFERENCIA</h2><p>Ahora si, 7 de septiembre de 2019 08:40 AM y paseo de 20 minutos hasta la Sede de la Afundaci&oacute;n, un maravilloso edificio reformado, antigua sede del ayuntamiento de Vigo, donde se celebraba la #pulpocon19. Al llegar ya hab&iacute;a algo de cola, con mucha gente con cara de dormido a&uacute;n, esperando a recoger el Welcome Pack y disponerse a desayunar. Un Welcome Pack, por cierto, bastante completito. Pegatinas, una bolsa de tela con el logo, la camiseta del evento, una pelota antiestr&eacute;s, el libro La Gu&iacute;a del Refactor Cotidiano de Fran Iglesias (con edici&oacute;n especial de la Pulpo), folletos de publi / info de los patrocinadores, una mochila&hellip; Vamos, un se&ntilde;or Welcome Pack, aunque mi valoraci&oacute;n no deber&iacute;a ser v&aacute;lida, al no tener experiencia previa.</p><p>En fin, una vez hechos estos tr&aacute;mites nos tomamos un caf&eacute; y un croissant en el estupendo espacio para los breaks (desayuno, par&oacute;n de media ma&ntilde;ana y comida) y nos dirigimos arriba, al auditorio donde, ahora s&iacute;, iba a empezar todo lo bueno.</p><p><img alt="1997cd2e099be45aa70cc277e39c829773977f95.jpg" src="/cache/thumb_1200_0600/uploads/content/image/image/1997cd2e099be45aa70cc277e39c829773977f95.jpg" loading="lazy"></p><p>Rolando Caldas (uno de los organizadores) se encarg&oacute; de darnos la bienvenida, dar algunos datos del evento (211 personas!!!) y dar la primera charla, de t&iacute;tulo Mi Aplicaci&oacute;n es un Monolito&hellip; &iexcl;Y QU&Eacute;!. La charla en s&iacute; no aportaba mucho, pues no dejaba de ser un vistazo a un c&oacute;digo de Prestashop. Rolando intent&oacute; ser ameno pero entre el poco contenido que ten&iacute;a el tema en s&iacute;, el madrug&oacute;n y el horror de esas pocas l&iacute;neas que se ve&iacute;an en la pantalla no pudo hacer mucho. Daba la sensaci&oacute;n de ser algo de relleno y un calentamiento para lo que vendr&iacute;a despu&eacute;s.</p><p>A las 11 subi&oacute; al escenario Isabel Garrido, programadora en Letgo y experta en temas de testing. Su charla, Dobles de Acci&oacute;n Para Testing, fue bastante m&aacute;s entretenida. En mi caso, que acabo de empezar con el mundo del testing, pude sacar mucho provecho de su charla. En ella nos habl&oacute; de los distintos dobles que podemos usar en testing, con ejemplos sencillos y una buena puesta en escena. Se la not&oacute; algo nerviosa al principio pero fue capaz de sacar adelante la charla y mantenernos a unos cuantos muy atentos a lo que estaba contando.</p><p>Tras esta charla hicimos el primer break. Un caf&eacute; para reponer pilas y vuelta al auditorio donde ahora ven&iacute;a una charla un poquito m&aacute;s densa. El encargado fue Jos&eacute; Armesto, sustituto de &uacute;ltima hora de uno de los ponentes, que nos habl&oacute; sobre los famosos Kurbernetes. Su charla fue de m&aacute;s a menos, pero no por falta de calidad o conocimientos, si no porque la cosa se fue complicando y era mucho tema para tan poco tiempo. Yo me perd&iacute; por la mitad y ya no fui capaz de sacar nada m&aacute;s en claro. Pero el tema en s&iacute; era interesante, y Jos&eacute; demostr&oacute; ser un ponente con mucho ritmo y buen hacer.</p><p>Antes de la comida llegaba uno de los platos fuertes del d&iacute;a. Los chicos de CodelyTv, Javi y Rafa, subieron al escenario a revolucionar toda la movida. Su charla se titulaba Elige Tu Propia Aventura: Pasito a Pasito Driven Development y no enga&ntilde;aba en el t&iacute;tulo. Se curraron una &ldquo;aventura&rdquo; donde, cada pocos minutos, los del p&uacute;blico vot&aacute;bamos hac&iacute;a d&oacute;nde nos dirig&iacute;amos. No ten&iacute;amos que matar dragones o elegir izquierda o derecha, pero si que pod&iacute;amos escoger la forma de solucionar los distintos problemas de arquitectura que se iban presentando en el c&oacute;digo. Un c&oacute;digo, por cierto, picado a un mill&oacute;n de clicks por segundo por Rafa usando todos los atajos posibles existentes y demostrando un control del PHPStorm tremendo. Mientras, Javi iba haciendo malabares para poder explicar todo lo que estaban haciendo. Una aut&eacute;ntica delicia de charla que se hizo corta (y a ellos tambi&eacute;n, que les quedaron un par de cosas por tratar) y en la que nos re&iacute;mos y aprendimos a partes iguales.</p><h2>LA COMIDA</h2><p>Tras estas 4 charlas lleg&oacute; la hora de la comida. Nos ofrecieron un catering bastante abundante y con uno de los mejores pulpos que recuerdo &iexcl;Que lujazo! Tras ello fuimos a tomar un caf&eacute; en una terraza cerca del auditorio y nos pusimos de nuevo en marcha para las 2 &uacute;ltimas charlas de la jornada.</p><p><img alt="59b2b06499e9e55474c046116b5eff7a6c54e4eb.jpg" src="/cache/thumb_1200_0400/uploads/content/image/image/59b2b06499e9e55474c046116b5eff7a6c54e4eb.jpg" loading="lazy"></p><p>Empez&oacute; la tarde Mavi Jim&eacute;nez, de Holaluz, con una interesante charla sobre c&oacute;mo ha aplicado sus conocimientos de testing en su empresa (y lo que ha aprendido durante el proceso) titulada Be Smart My Test. No solo el contenido era interesante si no que Mavi supo llevar la charla con mucha simpat&iacute;a y buen rollo para que la gente no se durmiese despu&eacute;s del banquete: objetivo cumplido.</p><p>Para acabar la jornada llegaba la estrella de los ponentes, Carlos Buenosvinos, con Eventos, mensajer&iacute;a y otras f&aacute;bulas. Carlos es el CTO de Seat actualmente y uno de los t&iacute;os que m&aacute;s sabe de esto en Espa&ntilde;a. No defraud&oacute;, con una charla muy completa sobre gesti&oacute;n de eventos y arquitectura. Un colof&oacute;n incre&iacute;ble que daba paso a la despedida y los sorteos (&iexcl;uno de ellos fue para m&iacute;!).</p><h2>DESPEDIDA Y CIERRE</h2><p>Tras una jornada muy intensa acabamos disfrutando de la Feria del Marisco en el puerto de Vigo para volver a casa a descansar y salir prontito por la ma&ntilde;ana. Nuevamente unas pocas horas de viaje y llegada justo para comer.</p><p><img alt="despedida pulpocon 2019" src="/cache/thumb_1200_0800/uploads/content/image/image/74b546afa25155c5653ec1a9b427f22f4ddef6aa.jpeg" loading="lazy"></p><p>Como resumen de la experiencia solo decir que, aunque no pueda comparar con eventos pasados, a poco que las pr&oacute;ximas sean la mitad de buenas y divertidas (los compa&ntilde;eros de viaje ayudan mucho a esto) estar&eacute; m&aacute;s que satisfecho. Ha sido un placer, nos vemos en la pr&oacute;xima Pulpo Conf (o Morcilla Conf, o Cachorro Conf, o lo que toque&hellip;).</p>
]]></description><guid>https://devtia.com/post/un-fin-de-semana-en-la-pulpo-conf-2019</guid><pubDate>Fri, 11 Oct 2019 00:18:00 +0200</pubDate></item></channel></rss>