Arquitecture Parent Application with children Applications

Certified Associate Developer

I’m working on a large project that has evolved over time and is composed of several independent subprojects, each developed by a different team. While these applications have their own distinct purposes, they are interconnected and together form part of a complete workflow.

For context, an example would be:

Application A manages the creation of a request to build a building.

Application B is responsible for drafting the project with the architects.

Application C handles the necessary permissions for the construction.

Application D manages the hiring of staff to carry out the construction.

In total, there are about ten independent applications that together form a single functional process. The challenge we’re facing now is the creation of a “parent” application that centralizes and visualizes the information from these applications, providing a global view of the project’s status and details of each phase.

My concern is how to approach this “parent” application in a way that doesn’t overly depend on future changes in the “child” applications. For example, if in the parent BPM I query data from Application A to display in a table, but later new fields are added or the structure of the data changes, it could cause issues in the parent application without us realizing it. Additionally, since the development teams are separate, it’s difficult to ensure that every change in a child application is properly coordinated with the parent application, especially as the child applications will be constantly evolving.

My question is: what would be the best approach to structure this parent application to avoid dependency issues with the child applications, particularly when they undergo modifications or evolution? Are there best practices that could help mitigate these risks in a BPM environment like Appian?

  Discussion posts and replies are publicly visible

  • Certified Lead Developer

    I think a good approach is to define a certain set of information that each application has to "deliver" to the parent app. Then you can define the content and format and this does not interfere with changes internal to these apps.

  • Certified Associate Developer
    in reply to Stefan Helzle

    Hello, thank you for your response.

    The issue we are facing is that we have inherited these applications, and they were also developed by different teams, meaning that each one did things their own way. Now the client is asking us to somehow provide information on everything happening within these applications, as the combination of all of them forms a single functional process. What would be the best strategy to address this?

  • One approach could be that

    1) Every milestone steps from the child applications gets recorded in one table and then a report can be generated to provide an overview

    2) You can create task reports for all the child applications so that you get other view of all the pending task and other such information from them.

    Others might be able to add different approach as well

  • Certified Lead Developer
    in reply to Raúl Gómez Moya

    I understand. But that is not an easy challenge and going shortcuts becomes technical dept you will have to pay later for.

    I still think that the approach I outlined is a good one.

  • Certified Senior Developer
    in reply to Raúl Gómez Moya

    Hola Raúl. 

    creo que el reto que planteas es uno grande. 

    • Veo necesario implementar un levantamiento de la documentación para cada una de las sub-aplicaciones. 
    • Identificar claramente las entradas y salidas Obligatorias de cada sub-aplicación para integrarse adecuadamente es fundamental.
    • Muy seguramente vas a requerir hacer pruebas de regresión de cada sub-aplicacion y bastante ingenieria inversa para "entender" que ocurre.
    • Luego pruebas de integración para entender la interacción de las aplicaciones en el "todo" de la solución. 
    • Entiendo que cada una de las sub-aplicaciones es de alguna u otra manera "autonoma".
    • Es muy posible que encuentres redundancias entre las diferentes partes de todo el sistema a nivel del modelo de datos y la implementación de reglas de negocio. Identificalas e incluyelas en un plan de cambios si esto genera ahora mismo algún inconveniente.
    • Te diría que una buena práctica es que cuentes con una aplicación Common donde referencias aquellas reglas, record types o cdts que son comunes a lo largo de toda la aplicación. 
    • Implementar una aplicación toolkit, o consolidado de reglas utilitarias o helpers te puede ahorrar problemas luego. i.e. una regla para validar la consistema de una email address.
    • Implementar sub-procesos reutilizables para tareas básicas, como envío de correos, validación especial de roles, y otros.
    • Identifica los plug-ins que usa la aplicación y si estos aún cuentan con un soporte vigente.
    • Identifica custom connectors, y encuentra si tienes el código fuente de esto. i.e. cada jar debe contar con su projecto.
    • Identifica anti-patrones o soluciones atipicas a escenarios poco convencionales. En su momento puede que no hubiese una solución out of the box a un problema, tal vez hoy ya la hay.

    De momento no te puedo dar una solución a este problema, pero mas bien un poco de lluvia de ideas.