Una empresa de software es una entidad comercial que se especializa en el desarrollo, distribución y mantenimiento de productos y servicios de software. Estas empresas crean una variedad de soluciones de software, incluido software comercial, software personalizado , software como servicio ( SaaS ), software de código abierto y software integrado. Van desde pequeñas empresas emergentes hasta grandes corporaciones, que participan en actividades como desarrollo, pruebas, implementación y soporte de software.
Una empresa de software es una organización, ya sea de propiedad estatal o privada, establecida con fines de lucro cuyos productos principales son diversas formas de software , tecnología de software, distribución y desarrollo de productos de software. [1] Constituyen la industria del software .
Existen varios tipos diferentes de empresas de software:
Organizar una empresa de software es un tipo de habilidad de gestión muy especializada, donde personas con experiencia pueden convertir el problema organizacional en un beneficio único. Por ejemplo, tener subequipos distribuidos en diferentes zonas horarias puede permitir una jornada laboral de 24 horas para la empresa, si los equipos, sistemas y procedimientos están bien establecidos. Un buen ejemplo es el equipo de prueba en una zona horaria 8 horas por delante o por detrás del equipo de desarrollo, que corrige los errores de software encontrados por los evaluadores.
Una empresa de software profesional normalmente consta de al menos tres subequipos dedicados:
En las empresas de software más grandes se emplea una mayor especialización y, con bastante frecuencia, también se dan:
El gerente de una empresa de software generalmente se denomina Jefe de Desarrollo (HOD) [2] y reporta a las partes interesadas . Él o ella dirige los subequipos directamente o a través de los gerentes/líderes, según el tamaño de la organización . Normalmente los equipos de hasta 10 personas son los más operativos. En organizaciones más grandes, existen en general dos modelos de jerarquía:
Todos los equipos son totalmente independientes y trabajan por separado en los diferentes proyectos. La estructura es bastante simple y todos los empleados dependen de una sola persona, lo que deja la situación bastante clara; sin embargo, no es una buena solución en términos de intercambio de conocimientos y uso óptimo de los recursos humanos.
En este modelo hay gerentes/líderes dedicados para cada especialización principal, que "alquilan" a su gente para proyectos particulares liderados por gerentes de producto/proyecto, quienes formal o informalmente compran a la gente y pagan por su tiempo. Esto lleva a que cada empleado privado tenga dos jefes: el director de producto/proyecto y el director de "recursos" especializado. Por un lado, optimiza el uso de los recursos humanos, por otro, puede dar lugar a conflictos sobre quién tiene prioridad en la estructura.
También hay varias variantes de estas estructuras, y varias organizaciones tienen esta estructura distribuida y dividida en varios departamentos y unidades.
Las empresas de software pueden utilizar diversas metodologías para producir el código. Estos pueden incluir:
También existen algunas metodologías que combinan ambas, como el modelo en espiral , Rational Unified Process (RUP) [7] o MSF . [8]
Independientemente de la metodología utilizada, el ciclo de vida del producto siempre consta de al menos tres etapas:
Lo ideal es que cada etapa tome el 30% del tiempo total y el 10% restante esté reservado.
El diagrama de secuencia UML de interacción entre estos grupos puede verse así:
En cada etapa un grupo diferente juega un papel clave, sin embargo cada tipo de rol debe estar involucrado durante todo el proceso de desarrollo:
Las empresas de software poseen varios sistemas y procedimientos implementados y funcionando internamente en todos los subequipos. Estos incluyen:
También existe la gestión del ciclo de vida de las aplicaciones (ALM), que incorpora algunas de estas funcionalidades en un paquete y se utilizan en todos los grupos. Los entregan varios proveedores como Borland , ECM o Compuware .
Las empresas de software bien establecidas suelen tener alguna forma de medir su propia eficiencia. Esto generalmente se hace definiendo el conjunto de indicadores clave de desempeño (KPI), como
Varias organizaciones se centran en alcanzar el nivel óptimo del Modelo de Madurez de Capacidades (CMM), donde "óptimo" no significa necesariamente el más alto. También existen otros sistemas como el SEMA de la Universidad Carnegie-Mellon o determinadas normas ISO . Las pequeñas empresas de software suelen utilizar enfoques ligeros en sus procesos, formalizados o no. Cada organización elabora su propio estilo, que se sitúa en algún punto entre la tecnocracia total (donde todo está definido por números) y la anarquía total (donde no hay ningún número). Cualquiera que sea el rumbo que tome la organización, consideran la pirámide que describe el costo y el riesgo de introducir cambios en los procesos de desarrollo ya iniciados como un verdadero modelo para gestionar los cambios.