\section{Layered Approach}
\label{sec:background}

Combine many teams with different processes in the same project might be
challenging. To address this problem, we got inspiration from Operating Systems
(OS) concepts and extended the notion of layered approach design
\cite{layeredApproach}. This technique breaks the OS into distinct layers with
different proposes. The inner layer represents the hardware, while the external
layer represents the user interface. Layered approach demands a careful
definition of each layer responsibility and how they communicate. After the
layers and communication definition, it is simple to change a single layer
without affecting other layers. This approach presents two drawbacks: (1) it
creates an overhead of communication from the upper layer to the lower layer,
and (2) it is a hard to define the correct interface between layers.

We extended the layered approach for handling the interaction with development
teams and the Brazilian government. We realized that multiple teams interacting
with the government have different expectations about the project. Furthermore,
we noticed that government can transfer political pressures to the development
team and sometimes they try to impose their processes to the project. For
handling all the different processes and keep the multiple expectations under
control, we implemented the layered approach for project management.

\begin{figure}[!h]
  \centering
  \includegraphics[width=.30\textwidth]{project_layers} 
  \caption{Layered Approach for managing multiple processes}
  \label{fig:layered_processes} 
\end{figure}

Figure \ref{fig:layered_processes} illustrates our set of layers. The inner
layer comprises the development team composed of agile teams. Next, is a layer
that includes the coordinators responsible for handling the bureaucratic issues
coming from the government to the development team. Subsequent, the analyst
layer covers the government employees with the understanding about the
requirements, but they working guided by the traditional methodology. Finally,
there is the directory layer responsible for the political issues.

The communication between layers is an important problem in the Layered
approach, which still an important issue to be addressed in our propose. For
solving the problem, we designed a common channel of communication that passes
through all layers. For keeping the layer separation, some members of each
layer worked as a filter.  This was possible because we created a proper
infrastructure based on transparency. We used the following tools to implement
the communication between layers: issue tracker (from Gitlab), mailing list,
IRC, and wiki. The coordination layer has to filter the interaction between the
government and the development team.


