¿Cuánto conocimiento de dominio es útil para un desarrollador de software?

El conocimiento del dominio es muy importante para los desarrolladores de software. El conocimiento de múltiples dominios es igualmente importante. Conocer y desempeñar su rol esperado también es muy importante.

Dejame explicar:

Yo trabajo en el ámbito de la salud. Más específicamente, soy parte de un equipo que desarrolla software para el dominio oncológico. El tratamiento oncológico es complejo. La base de datos de drogas es jerárquica y gigantesca. Hay toneladas de formas farmacológicas, métodos de administración, vía de administración, composiciones químicas, reacciones farmacológicas a las alergias, regímenes de tratamiento, interacciones farmacológicas y muchas normas gubernamentales.

Un nuevo desarrollador en mi equipo generalmente comienza con correcciones de errores y un boleto cosmético que le da la sensación de la funcionalidad de la aplicación y la base del código. Luego lo ponemos a desarrollar (generalmente una nueva) pantalla respaldada con un par de consultas de extracción / escritura, que abarcan no más de 2 a 3 tablas (existentes o nuevas). Si el desarrollador sobrevive a esta etapa y no pierde interés en su trabajo, entonces le permitimos manejar un módulo completo. Un módulo tendrá al menos un flujo de trabajo que abarca múltiples pantallas y entidades con relación a algunas de las entidades centrales. En este nivel, el desarrollador necesita comprender la dinámica de los datos centrales, que es enorme y compleja. No muchos desarrolladores pasan esta etapa. Si lo hacen, están listos para manejar las cosas básicas.

¿Qué son las cosas básicas? Lo esencial es donde sus decisiones afectan directamente a su producto y a su cliente. Como miembro del equipo central, ya tienes grandes habilidades técnicas. Sin embargo, el conocimiento del producto y del dominio lo ayudará a trabajar más estrecha y rápidamente con los usuarios y las personas de negocios (propietarios de productos y gerentes de productos). Esto es especialmente importante si está sentando las bases. Sus decisiones van a impulsar el futuro del producto. Sus decisiones acertadas pueden hacer que el producto sea menos rígido y más adaptable a los cambios futuros.

Ejemplo: Utilizamos una base de datos de medicamentos de terceros llamada First Data Bank (FDB). FDB tiene bastante detalle y estructura jerárquica para almacenar información sobre drogas. Si está desarrollando una nueva aplicación con muy poco conocimiento de dominio, lo más probable es que termine utilizando el esquema de FDB tal como está. Esto eventualmente ralentizará el desarrollo debido al gran tamaño y la complejidad del esquema de FDB. Ahora, si tiene poca información sobre el dominio y FDB, elegirá extraer solo el subconjunto requerido en su propio esquema. Sin embargo, dado que no tenía la experiencia profunda del dominio, pronto se dará cuenta de que los extractos que escribió no se ajustaban a los requisitos cambiantes. Aquí es donde el conocimiento del dominio le dará la ventaja. Con un conocimiento funcional más profundo, creará mejores estructuras de datos necesarias para mantener el desarrollo de su producto.

Esto es sólo un ejemplo. La historia aquí es que, a medida que asciende en el campo técnico, su conocimiento profundo del dominio lo ayudará a crear productos “mejores”. En el desarrollo de software empresarial, los desafíos puramente algorítmicos son muy pocos. Si el dominio no fuera lo suficientemente complejo, alguien habría escrito un software de “propósito general” para abordar el problema. La razón por la que está desarrollando un software / producto personalizado es probablemente porque la complejidad del dominio aún no ha sido capturada adecuadamente por ningún otro producto.

La experiencia en otros dominios siempre es útil. Por ejemplo, mi experiencia en HP diseñando flujos de trabajo de comercio electrónico me ayudó a descubrir patrones similares en la aplicación de oncología; De esta forma, la aplicación de una solución ya conocida facilitó las cosas. Del mismo modo para el conocimiento de dominio de “gestión de inventario” que aprendí en una empresa de transporte.

Entonces, sí, sea cual sea el software que desarrolle, en cualquier dominio en el que se encuentre, trate de apreciar la naturaleza de ese dominio, comprenda su singularidad e intente sumergirse lo más profundamente posible. Mientras estoy trabajando en el dominio de la oncología, mi objetivo no es convertirme en médico, enfermera o farmacéutico, sino comprender la profundidad suficiente del dominio, para que realmente pueda comprender los desafíos que enfrentan estos profesionales médicos en su día a día. El día vive. Hay una razón por la cual un oncólogo es la profesión mejor pagada en los Estados Unidos. Una de las razones es que un oncólogo se ocupa de un dominio extremadamente complejo. Sin comprender este complejo dominio, no podré proporcionar buenas soluciones a los problemas del oncólogo.

Los equipos de desarrollo de software generalmente contratan expertos en dominios (o gerentes de productos) que pueden escribir los requisitos del producto, sin embargo, sin un conocimiento suficiente del dominio central, los desarrolladores de software no podrán formar un “equipo efectivo” con los expertos en dominios.

Finalmente, te dejo con este video. En realidad, fue creado por un médico que se sintió frustrado con la forma en que se escriben los programas para el dominio médico.

Este video me ha servido constantemente como un recordatorio de que mi trabajo no es solo escribir código, sino desarrollar software que ayudará a los médicos a hacer su trabajo de manera más eficiente y precisa. Por eso debo apreciar el arduo trabajo que hacen estas personas. Y para eso, debo ponerme en su lugar y aprender su dominio para empezar.

Orgulloso de decir que nuestro software ha sido constantemente clasificado como el número 1 por organizaciones de renombre.

Por cuarto año consecutivo, iKnowMed ha sido nombrada la plataforma de registro electrónico de salud (EHR) mejor clasificada para oncólogos y hematólogos por Black Book Rankings

Gran pregunta!

Debe hacer preguntas tontas para verificar cada suposición de todos modos. Es más fácil si realmente no tienes ningún conocimiento de dominio. Por otro lado, algunos conocimientos de dominio ayudarán a encontrar las preguntas realmente perspicaces.

Tengo la suerte de haber trabajado en una amplia gama de proyectos que cubren una gran variedad de dominios, desde enrutamiento logístico hasta criminología.

Como se dice, Asume hace un asno de U y de mí.

Aunque tener conocimiento del dominio ayudará durante el análisis de requisitos, ¡debe hacer todo lo posible PARA CONVENCIERSE QUE NO TIENE NINGUNO!

Lo digo en serio.

Cuestiona cada suposición que tengas. Aclare cada acrónimo y abreviatura que crea que conoce, confirme cada paso de cada proceso. El mundo real es diferente del conocimiento teórico y dos negocios diferentes en la misma industria, diablos, incluso dos departamentos diferentes en la misma compañía, pueden usar el mismo término para significar cosas diferentes.

Si realmente no lo sabes, esto es más fácil. Por otro lado, tener algo de experiencia en el dominio tendrá una idea de las áreas problemáticas.

Te sentirás como un idiota haciendo preguntas realmente estúpidas, hasta que veas a dos directores / VP / CxO discutiendo sobre lo que realmente significa un término de la industria bien utilizado, lo que resulta en un cambio en la estructura de facturación cuando se dan cuenta de que sus principales clientes realmente les están costando dinero. (Su experiencia puede ser diferente)

Para ser útil, dirijo la pregunta de lado. No es el conocimiento del dominio lo que hace que un desarrollador de software sea útil, porque hay algunos contratistas asombrosamente brillantes que comienzan a trabajar en un nuevo dominio cada seis meses. Es un conjunto de comportamientos que muestran más allá de su capacidad técnica.

El cambio de comportamiento clave es el siguiente: no espere que alguien le proporcione los requisitos.

Por supuesto, comience con una historia de usuario. Pero cuando encuentre un nuevo escenario mientras lo implementa, no solo envíe un correo electrónico al propietario de su producto y pregúntele “¿qué sucede en este caso?” Primero, explíquelo usted mismo. Según lo que sabes de la historia, ¿qué crees que sería lo correcto? Ahora, sugiérale eso al propietario del producto: “He encontrado este caso, creo que deberíamos manejarlo así, aquí está mi razonamiento”. Si están de acuerdo, buen trabajo. Si te dicen que te equivocas, pregunta por qué. Y ahora ha aprendido algo, y crucialmente, también sabe por qué está implementando ese escenario de esa manera, lo que puede ser invaluable cuando se profundiza en los detalles de implementación.

Mejor aún, pregúntele directamente a un usuario o parte interesada. Los propietarios de productos (o BA) hacen un gran trabajo pero son completamente humanos. Obtendrá una mejor visión del dominio si puede preguntar a los verdaderos expertos. Le brindarán información más profunda sobre el dominio que de repente puede tocar un acorde semanas después cuando se le pide que implemente algo y se da cuenta de que todo el problema podría resolverse diez veces más rápido (en función de ese dato de información, el encargado de la administración de cuentas te dije el mes pasado).

Un buen contratista hace esto tan pronto como aterriza, a menudo sin darse cuenta de que lo está haciendo. Así es como pueden ser invaluables, aunque en realidad nunca van a estar allí el tiempo suficiente para convertirse en un “experto en dominios”. Por el contrario, un desarrollador pobre puede permanecer en una empresa durante 10 años y nunca entender realmente lo que está haciendo, porque simplemente se sientan frente a su teclado esperando que se les cumplan los requisitos.

Hace varios años, un experto en dominios amigo mío y yo decidimos comenzar a trabajar en software de lógica computacional (principalmente, pero no del todo, un probador de teoremas automatizado de primer orden). Era un candidato a doctorado en matemáticas en el estado de Arizona … o tal vez fue la Universidad de Arizona, no puedo recordar nada más. Cuando salimos, le pregunté si pensaba que podía escribir el software sin comprender el campo. Él dijo “no” y me prescribió un curso de estudio con él como tutor. En retrospectiva, tengo que estar de acuerdo. Dudo que algo tan complicado pueda ser programado efectivamente por alguien que carece de una buena comprensión del dominio, al menos lo básico. Por un lado, ¡se necesita un experto en dominios para asegurarse de que está obteniendo las respuestas correctas!

El conocimiento específico del dominio ahora se está volviendo muy importante en la industria del software de TI y también es increíblemente valioso para el desarrollo de software. Es muy importante para los desarrolladores y probadores de software.

  • Importancia del conocimiento específico del dominio en software
  • Conocimiento específico del dominio del sistema de salud de EE. UU.

¡Podemos observar una razón más por la que los expertos en dominios son los más buscados! Cuando contrata nuevos ingenieros que acaban de salir de la universidad, no puede esperar que compitan con los profesionales experimentados. ¿Por qué? Debido a que los profesionales experimentados ciertamente tienen la ventaja de un dominio y experiencia en pruebas y tienen una mejor comprensión de los diferentes problemas y pueden entregar la aplicación mejor y más rápido.

Debe tener algunos conocimientos básicos y algo / alguien a quien consultar. Realmente, obligarte a convertirte en un “experto” en un campo que no provoca pasión en ti solo te torturará y te enfocará en las direcciones completamente equivocadas. Tenga en cuenta que si el campo le interesa, debe hacer un esfuerzo adicional para poder sugerir soluciones más completas usted mismo.

Simplemente mantenga una lista rápida de “qué pasaría si” para todo el proceso comercial de su producto final y pregúntese qué códigos realmente valen la pena explorar.

Menos de lo que piensas. Lo que es más importante para los sistemas de representación es que usted y su equipo conocen un enfoque de diseño predecible y repetible que le permite modelar en código los conceptos de dominio, sus relaciones con los demás y las reglas que los limitan.

El conocimiento del dominio es extremadamente útil. Conocer los aspectos básicos de una industria es invaluable. Sin embargo: el conocimiento del dominio y la experiencia del dominio no son lo mismo . La experiencia de dominio es mucho más valiosa, ya que le permite comprender cuándo su conocimiento de dominio es insuficiente o se desvía de la media.

Es útil para obtener una entrevista.

He solicitado docenas de trabajos trabajando en finanzas, y cada uno de esos puestos dice que tienes que tener experiencia en finanzas. Lo mismo para el cuidado de la salud. Y militar. No obtuve entrevistas en los dos primeros, pero obtuve varias para militares debido a mi experiencia apoyando al Departamento de Defensa. Durante mi tiempo con el DoD, no habría pensado que hice algo diferente de una posición normal.

Ahora, dicho esto , probablemente sepa más sobre contabilidad y sobre cómo funciona una plataforma de citas en línea de lo que cree que lo hace, solo lo ve desde una perspectiva diferente de la que lo haría un contador, o de alguien que ingresa al software ERP por primera vez. Lo has tocado, sabes lo que está sucediendo allí y probablemente puedas seguir apoyando a otro ERP usando ese conocimiento y experiencia.

Con mi experiencia en DoD, en realidad sé mucho sobre la estructura de las fuerzas armadas, el gobierno, cómo funciona el presupuesto, cómo funciona el proceso de acreditación de software, cómo funciona IA en el gobierno, cómo navegar ese dominio en general. Estas cosas no flotan en mi mente cuando pienso en lo que he hecho con el DoD, que es administrar servidores y desarrollar código según las especificaciones.

Además, noté que al solicitar más trabajos, la especialización de dominio paga mucho más que la generalización, especialmente con respecto a los ERP. Entonces tienes eso para ti,

No creo que haya una respuesta simple.

Soy un generalista, porque no he podido seguir interesado en un dominio durante demasiado tiempo. Creo que se necesitan ambos tipos, los ingenieros con un conocimiento profundo del dominio pueden resolver problemas específicos y los generalistas pueden polinizar de manera cruzada diferentes dominios de la industria. Lo mismo ocurre con la ingeniería de software en sí, por ejemplo, es difícil para un desarrollador de pila completa crear una interfaz de usuario realmente impresionante y un back-end escalable bien diseñado al mismo tiempo. Creo que respondiste tu pregunta tú mismo, porque en un equipo bien equilibrado debería haber múltiples tipos de ingenieros.

Diría tanto conocimiento de dominio como sea posible, pero trate de aprender su tema como deberían haberlo hecho, y sepa qué tan principiante es por el tamaño de la pila de “libros de texto terminados” 🙂

Un poco de aprendizaje es una cosa peligrosa;
bebe profundo o no pruebes la primavera de Pierian:
Hay corrientes de aire poco profundas que intoxican el cerebro.
y beber en gran medida nos vuelve a sobriar.

– Un poco de conocimiento es algo peligroso