sábado, 28 de noviembre de 2020

Modelos de trabajo para un desarrollador de software

Este articulo trata sobre las distintas formas y modelos de trabajo que como desarrolladores de software podemos desempeñar. Está escrito desde un punto de vista personal, repasando y exponiendo modelos de trabajo en los que de una forma u otra me he visto involucrado. Hay que considerar que dependiendo de cada país estos modelos pudieran cambiar e incluso ser más laxos o rígidos que otros en el cumplimiento de normas y leyes.


Existen formas explicar que es el trabajo, podemos considerar que es la labor y tareas que realizamos con la intención de recibir una remuneración económica.

Existe la falsa creencia que debemos ganar de forma proporcional por los conocimientos que tenemos, así que si nos hemos esforzado mucho y hemos estudiado deberíamos ganar mucho dinero, y si bien eso suena lógico y hasta justo, no es cómo funciona el mercado laboral. Los conocimientos y los estudios que tengamos, son solo una herramienta que vamos a usar en nuestra profesión, pero lo cierto es que en el mercado se nos pagara por lo que “hagamos”, no porque lo “sabemos”. Se cumplirían varias reglas:

  • Si existe mucha gente que sepa hacer lo mismo que nosotros (independientemente si para saber hacer eso mismo hemos “estudiado” mucho), cobraremos poco.

  • Si existe poca gente que sepa pueda lo mismo que nosotros, cobraremos mucho.

  • Si existe poco gente que pueda hacer lo mismo que nosotros, y lo que podemos hacer no es de interés para otras personas, puede que tengamos un hobby interesante.

Lo anterior es una simplificación de la ley de la oferta y de la demanda, aplicada a nuestra profesión.

Pero al margen de esa regla tenemos varios problemas adicionales que influyen con respecto a los sueldos que cobramos en nuestra profesión:

  • Nuestro trabajo llevaba décadas en alza, es decir la demanda de informáticos siempre ha crecido, particularmente esta creció de forma más rápida en los 90 y a principio de los 2000, donde además hubo una crisis llamada burbuja puntocom (además de otras crisis inmobiliarias debido a especuladores que puso varias veces en jaque a la economía mundial). Todo esto hizo que en la actualidad haya muchos informáticos y desarrolladores de software.

  • A pensar del anterior, los sistemas que desarrollamos no son siempre valorados como se debiera, debido a varios motivos; uno de ellos es que parece que hay una reticencia a que un usuario comprenda exactamente qué es lo que hacemos. Muchas profesiones con las que interactuamos como adultos se comprende “intuitivamente” (aun de forma superficial), comprendemos que hace que hacer un contable, un médico o un abogado, pero a frecuentemente (para una persona que no se dedica a los sistemas informativos) comprender que hacemos realmente los desarrolladores de software. Por otro lado la creación de sistemas generalmente crea un valor indirecto, es decir se crea un sistema para que sostenga un negocio, el cual es que el genera el valor directo (el dinero en sí). Por eso es difícil relacionar el costo de un sistema, con los beneficios económicos que produce.

  • Por otro lado la programadores somos personas realmente muy entusiastas con nuestra profesiones. Disfrutamos programar, lo cual es bueno en un sentido, pero malo en otro, ya que no alcanzan a valorar por si mismos el costo de su trabajo, ya que este suele ser gratificante.

  • Por último, y de forma más trágica, parece que nuestra profesión es la única en la que experiencia y madurez no significan mayores posibilidades de conseguir un trabajo. Nuestro trabajo, esta asociado con el cambio, la evolución, y de cierta forma con la juventud. Muchas empresas descartan contratar a gente a partir de cierta edad. Esto puede ser por varios motivos, pero el exceso de informativo graduados, la renovación tecnología constantes, y que en general es más barato contratar a una persona sin experiencia excesiva, hacen que las contrataciones sean muy desfavorables para la gente madura, con ya amplia trayectoria en el mercado laboral.

Hay que tener en cuenta los dos escenarios (la ley de la oferta y la demanda y las particularidades de nuestra profesión), para conseguir un salario digno y justo, y que podamos garantizarnos un ingreso fijo y constante en nuestro futuro.

Consultorías de software


Las consultorías son empresas expertas en el desarrollo de software que ofrecen su accesoria a otras empresas (de otros rublos), para la implementación adecuada de sistemas en sus negocios.

Esa “asesoría” puede tener muchas facetas, desde lo que es realmente una “asesoría”, incluyendo la venta y personalización de sistemas “prefabricados”, que se adapten a las necesidades del cliente hasta la creación de sistemas a medidas.

También es posible que el modelo de consultaría se acabe pareciendo mas a un modelo de “outsourcing”.

Los empleados trabajan para la consultaría y no para el cliente, toman los requisitos, los analizan y se presenta una proyecto que acaba implementando.

Una de las ventajas de la consultoría, es que son proyectos (en principio limitados), con un principio y un fin, y generalmente tiene cierta independencia en cuanto al desarrollo de este (siempre que cumpla con lo estipulado en plazos y recursos). Se puede decir que los codificadores cambiar de proyecto y el trabajo no se vuelve rutinario, hace que estén siempre estén “despiertos”, y buscando formas interesantes de resolver los problemas.

Otra de las ventajas es que al ser la consultoría un negocio dedicado a la creación de sistemas, los jefes y empleados, hablan un lenguaje semejante y que ambos entienden, lo que suele ser un alivio en muchas formas.

En cuanto al sueldo y el tipo de contrato, no suele hacer restricciones en este aspecto, es decir podría darse de cualquier forma, desde empleados fijos a empleados temporales (por proyecto), pero si suele haber un límite en lo que respecta al sueldo de los programadores (para que los productos que vendan suelan ser rentables).

Outsourcing o subcontratación de recursos humanos



La subcontratación, es el proceso en él que una empresa delega la resolución de un problema o una necesidad a una segunda empresa. Digamos que le “comprar” el trabajo.

La subcontratación tiene muchas facetas, y suele cambiar según la legislación del país, llegando a ser en algunos casos muy controversial.

Una empresa requiere un software, o alguna otra necesidad relacionada con el desarrollo de software, pero no quiere contratar nuevos recursos (con recursos nos referimos a específicamente a codificadores), porque eso requiere adquirir una seria de responsabilidades hacia ellos, como realizar un contrato temporal (para dar paso según la legislación a uno definitivo), a pagar vacaciones, enfermedades, impuestos y prestación social de diversa forma.

Lo anterior hace que no resulte atractivo a la empresa contratar recursos, ahí es donde entra el outsourcing, que contrata a la gente, y la pone a trabajar para la empresa, pero absorbiendo todas las responsabilidades con respeto al empleado (que formalmente pertenece al outsourcing).

Aquí es donde reside uno de los problemas principales en el outsourcing, y es que tiene que compensar para ambas partes, es decir la empresa subcontrata los recursos, porque el coste que le supone es menor que la contratación directa, el outsourcing ofrece sus servicio y asume la responsabilidad con los empleados, porque también le compensa económicamente, ¿Cómo es posible que compense a los dos, cuando en ambos lados, hay un costo económico?, impactando en el salario del programador. El outsourcing cobra a la empresa un costo que es atractivo para ambas partes, y de ese costo debe sacar su ganancia y pagar al codificador.

El outsourcing suele ser atractivo para recién egresados, o personas que están buscando su primer trabajo, ya que las empresas de esta índole suelen siempre buscar recursos para ofrecer a las empresas (y no son muy exigentes en cuanto a los requisitos o la experiencia) y los nuevos ingenieros buscan una oportunidad para obtener experiencia en el mercado laboral y comenzar una carrera.

Antes aceptar un trabajo en una empresa outsourcing revisa bien si te conviene a corto, mediano y largo plazo, y haz una estrategia que sea atractiva a tus intereses.

Se puede ubicar el tema de outsourcing en dos ramas principalmente.

Outsourcing para proyectos concretos


La empresa tiene la necesidad de desarrollar un proyecto de software muy concreto, con lo que contacta una empresa de outsourcing (que en este escenario trabaja más como una consultoría), y pone a disposición de su cliente los recursos necesarios para poder realizar su sistema.

El cliente puede intervenir en el desarrollo en menor o mayor medida. El outsourcing puede usar empleados fijos para que gestionen el proyecto (normalmente son los mas veteranos), y contratar otros exclusivamente para el proyecto.

En estos momentos y debido a que es un proyecto cerrado, generalmente tiene un cotos fijo, y en base de ese costo puede permitirse pagar más a las personas que contrata temporalmente pero es posible que su contrato finalice con la finalización del proyecto.

Outsourcing de recursos humanos


Aquí es cuando la empresa no necesita un desarrollo de software en particular, ni la asesoría en cuanto a tecnologías y sistemas. Lo que necesita la empresa son programadores que saque el trabajo según su control y especificaciones.

Básicamente son empleados mas, que trabajaba con la empresa, generalmente in situ, para sacar sus requerimos en la forma que esta lo necesite, pero siendo su empleador el outsourcing, la cual como comentamos tiene todas las obligaciones.

En este caso el sueldo del programador tienen que a ser menor, debido a que hay un intermediario entre el que pone el dinero (la empresa) y la que lo gestiona (el outsourcing).

El empleo puede ser temporal debido a que la empresa podría no requerir a los recursos en cualquier tiempo, aunque la verdad es que no suele ser así. Las necesidades de sistemas de las empresas no van a disminuir, sino mas bien a aumentar, con lo que el trabajo se acaba convirtiendo en una suerte de fijo, en el que el programador esta asignado a la empresa sin fecha de finalización. Es fijo en la práctica, pero no de forma contractual, con lo hay que considerar las posibilidades que esto lleva, una de ella es que la empresa decida cambiar de proveedor de outsourcing (porque le convenga mas, o sea más barata), en dicho caso el puesto sigue existiendo, pero es puede que se reemplace al programador por otro de la nueva empresa.

Otros de los problemas es la faltan de identificación, y la sensación de no pertenencia del programador con respecto a la empresa y viceversa. En muchos casos la empresa de outsourcing se dedica a encontrar recursos para otras empresas, y una vez que los tiene localizados, los manda a trabajar directamente en sus asignaciones con el cliente, aquí se da un problema en el que el programador no siente pertenecer a la empresa del cliente (donde realmente trabaja), ni a la empresa de outsourcing donde apenas pasa tiempo (y muchas veces no es conocido).

Empleado de una empresa cuyo giro no sean los sistemas



Hay que considerar que todas las empresas tienen necesidades en cuanto a software, pueden comprar software o paquetes pre construidos, pero llegara un momento en el que si empresa quiere impactar en el mercado, necesitara software personalizado a sus necesidades específicas.

Generalmente cuando la empresa llega a la conclusión que necesita un equipo de desarrollo in situ, ha pasado ya por varias fases:
  • Comprar software establecido en el mercado, que se acerque a las necesidades de su negocio.

  • De alguna manera contratar o pagar a un tercero para que gestione o personalice el software anterior, para que se ajuste a sus necesidades reales.

  • Darse cuenta que requieren un sistema más personalizado. Necesitamos que el sistema se adapte a su negocio, y no que el negocio se adapte a los que pueda hacer el sistema.

  • Contratar a alguna consultoría para que cree software específico para su negocio (cuyo propietario real es la empresa).

Cuando la empresa se da cuenta que requiere algo más cercano a sus necesidades y que le preste atención en el momento que lo necesitan, se plantea tener un equipo propio de desarrollo.

En proceso de tener un equipo propio de desarrollo también pasa por varias fases:

  • Creación de un equipo de soporte de infraestructura (tal como redes, impresoras, etc.).

  • El equipo de infraestructura da soporte al software y sistemas adquiridos

  • Se crea un subequipo de desarrollo de software, pero la mismas personas que dan soporte a la infraestructura, es la genera el software, es decir los roles están “mezclados” y son intercambiables.

  • Se crea una división real entre el equipo de soporte y el de desarrollo de software.

  • El equipo de desarrollo de software se organiza en una estructura que contenga los roles clásicos tales como líderes de proyecto, codificadores, analistas, testers…

Hay que ser consciente que no todas las empresas llevan a la última fase (o alguna de las anteriores), los dueños de la empresa no quieren obtener un equipo de desarrollo maduro, lo que quieren es vender su producto. También es cierto que los responsables del negocio no son expertos en sistemas, con lo que a veces es difícil convencerlos de las ventajas de tener un nivel de madurez en el equipo de desarrollo.

Debido a que la mejora en procesos, metodologías y tecnologías no tiene una ganancia directa en la empresa, los propietarios del negocio, no suele querer hacer cambios y mejoras (que serian evidentes para una empresa tecnológica), y podemos caer en una obsolescencia tecnología que estanque el negocio.

Es necesario saber “vender”, la ganancia de la evolución tecnológica continua en la empresa, y tener estrategias para hacer que la empresa (que insisto no está interesada en cambios tecnológicos), los pueda adquirir de la mejor manera y de la forma más sana, de no ser así, las tensiones entre los equipos de desarrollo (que conocen las necesidades de los sistemas) y las de los dueños o trabajadores (que conocen las necesidades de negocio), irán en aumento, haciendo difícil que ambas partes puedan cumplir con sus responsabilidades.

Otro problema es que el propietario de la empresa paga sueldos (nominas), y no paga directamente por software, por que se corre el riesgo que no valore correctamente lo que cuesta hacer software, y se subestime su precio real.

Freelance o autónomo


Es el trabajador que se establece por su cuenta, el vende su trabajo directamente a un cliente, y recibe su cobro.

Las ventajas de esta forma de trabajo son evidentes, libertad en cuento sus decisiones y gestión de su tiempo y recursos, con el añadido de que cualquier esfuerzo adicional que se haga para tu trabajo, es realmente para él.

  • Las desventajas son muy variadas:

  • El autónomo tiene que localizar a su cliente, a la vez que resuelve las necesidades de los clientes actuales.

  • El autónomo tiene que enfrentarse a circunstancias que no tienen que ver directamente con su trabajo, como son responsabilidades financieras y legales, que podrían no ser su fuerte, y a veces no tener tiempo para atenderlas.

  • La más evidente, su ingreso económico depende de su trabajo, si se enferma, o no consigue clientes, no recibirá ingresos, lo cual puede colocarle en una situación dedicada.

Es posible (y muy probable) que el autónomo compagine su trabajo como independiente, con otro trabajo como empleado de algún tipo, de forma que tenga un ingreso fijo, mientras que intenta emprender proyectos propios. Esta es la forma más segura de poder comenzar pero requiere muchas disciplinas, es difícil “quedar bien” con dos jefes (aunque uno de ellos seas tú mismo).

Debido a las complejidades anteriores, varios autónomos se suelen asociar para poder llevar acabo todas las tareas de forma más sencilla, puede que uno se encargue de los asuntos del negocio y otro de los asuntos tecnológico, o dividirse el trabajo entre todos. Esta quizás es la mejor forma, que permite equilibrar las funciones y responsabilidades de cada uno y demás tener el apoyo de un compañero. Por otro lado hay que tener en cuenta que las circunstancia pueden volverse tensas, y generar conflictos facialmente en este tipo de equipos, por eso hay que buscar hacer proyectos con compañeros profesionales y responsable y comportarse así al mismo tiempo. Sin duda habrá contratiempos, pero hay que saber lidiar con ellos, y poder sacar los proyectos adelante.

Empresa propia



Es cuando el desarrollador de software tiene una estructura formal de negocio, con un nombre comercial y empleados que depende de él.

El empresario adquiere unas responsabilidades superiores a las que ha tenido hasta ahora, por que no solo tiene compromisos con sus clientes, sino que además tiene compromisos con sus empleados.

Los productos que pueden vender a un cliente son varios, desde un paquete software prefabricado, a la personalización de alguno, software a la media, o entrar en un esquema de outsourcing donde rente recursos.

Hay que considerar que se puede ser responsable legalmente de los incumplimientos que tengas, ya no solo a nivel personal, si no a nivel empresa. Por ejemplo debemos pagar nominas, y cumplir con los requisitos de ley, aunque nuestro ingreso pueda ser variable.

El ingreso puede, y seguramente, sea variable, esto es por que dependemos del número de contratos que téngannos con otras empresas, así como los proyectos que tengamos en marca. También muchas empresas pueden posponer el pago, ya sea por políticas propia de la empresa, por contrato o por conveniencia. Así que es necesario que se aprendan y se usen herramientas de crédito (lo cual puede llegar a ser otro problema en el futuro).




Si te ha gustado la entrada, ¡Compártela! ;-)