\section{Development Organization and Process}
\label{sec:process}

The SPB members were composed of a variety of professionals with different levels and skills. Most of them were undergraduate students with major in software engineering (from 4th semester or upper), hence they could not dedicate many hours in the project per week. In their daily lives in the project, they had programming and devops tasks. It is important to highlight that the students always had the flexibility to negotiate their work hours during the semester, because we tried to not cause any damage to their grades.

The development of SPB project required a vast experience and background that usually undergraduate students do not have yet, because of this, some senior developer joined to the project to help with hard issues and to transfer knowledge to the students. Their tasks were technical and provide solution to hard problems, in other words, they worked as a developer. All the senior lived in a different states spread around Brazil, and all the communication was made via internet. Finally, those professionals are very skilful and the project could not afford a full time work for them and as a result, some of them worked partially on the project.

Finally, the last group of actors of this project was composed of employees formally work for the Brazilian Government, in the Ministery of Planning, development and Management (MPOG is the Brazilian acronyms). All the project decisions, validations, and scope definitions were made by them.

\subsection{Teams organizations}

More than X\% of the teams was composed of undergraduate students and they worked physically in the same laboratory in opposite of the senior. Each student had their own scheduler based on their class, it made hard to implement pair programming. Also, they had a different area of interests.  To cope with all this diversity we had two basic rules which guided the project organization:

\begin{enumerate}
  \item Classes have to be the top priority for undergraduate students;
  \item Always work in pair (locally or remotely).
\end{enumerate}

With the aforementioned ideas we divided all the project into four different teams: Colab, Noosfero, Design, and DevOps. Each team had one coach responsible for reducing the communication problem with the other teams and help the members to organize itself in the best way for everyone (always respecting the work time). One important thing to notice is the mutability of the team and the coach, during the project many students changed between the teams to try different areas.

One important characteristic in the team organization was the presence of (at least) one senior per team. This was essential, once hard decisions and complex problems were usually addressed to them, this relieved the coach of the duty to take a complicated technical decisions (this encouraged students to be a coach). Lastly, the senior had to respect a rule number two and work with some student, this was important to give the undergraduate the opportunity to interact with a savvy professional in his area and keeping the knowledge flow in the project.

\subsection{Meetings}

Brazilian government used to work with software development in a very traditional way, frequently they focused on documents and does not focus on what really matter: running software. This way of thinking caused to us a communication noise with MPOG, because they constantly tried to leverage on our work style. It was especially hard to convince them to work with open scope and agile development, but after months of work and showing results they stopped resisting.

After many interactions with MPOG, they started to trust in our work and we defined some level of meeting granularity to avoid to generate overheads to the developers. We had a strategical and validating meeting with MPOG (the former once in a month and the latter each 15th day), release plaining with the entire team (one per month), and finally a sprint planning (one each 15th day).

In the strategical meeting we usually defined the priorities and new features with MPOG (we always had to negotiate a bunch of things). Normally the professors, the coach of each team, and the employees of MPOG join in this meeting. In this meeting we usually discussed what the team already produced since our last meeting, and we establish the new features for the next release. Notice that just part of the team join in this meeting to avoid generating unnecessary overhead to the developers, but all the students interested to participate was accepts (many students wanted this experience during the project).

After the strategical meeting with MPOG, we had a planning turn with all teams together. In this part, each team works together to convert the MPOG wishes into small parts which was represented by the epics of the release. Each coach was responsible for conducting the planning, and after that register it on the project wiki (the wiki provided by Gitlab). With this epic, each 14th day the team have generated their sprint scheduler (with small achievements mapped in issues).

To keep MPOG always as part of the project, we invited them to work with us to validate the new features in progress. Normally we had a meeting each 15th day. Basically, this was our work flow, we always kept everything extremely open to the MPOG (our way of work and open source projects) and to the team.

To keep the track of all of those things we used the SPB, especially the Gitlab. Basically, we had:

\begin{enumerate}
  \item Project repository: We have one organization with many repositories
  \item Milestones: Each milestone is used to register a release
  \item Wiki: Each release has one page on wiki with the compilation of
    strategical meeting
  \item Issues: Each sprint planning generated issues, which we associated to
    the specific milestone and updated the wiki with the issue number related
    with them. Finally each developer assigned the issue to itself.
\end{enumerate}

Notice that this workflow gave to us and to the MPOG a full traceability from
high view of the feature to the low view (code). This provided a way to MPOG
validated all worked done and proof the concept that work with open source
project can give a proper view to them check.
