Full-Stack Collaboration
Tags: webdev, react
Published: 2021-05-27 05:32:29

<strong>The importance of teamwork</strong>

I'm taking some time today to talk about my first experience working in one of 2 large, fully cross-functional teams and how the passionate developers making up these teams came together to deliver the best product we possibly could!

The project our team inherited the codebase for was an already in-progress application called 'Asylum' - catchier name coming soon! This project was built for the incredible people at HRF (Human Rights First), a non-profit organization who has put in more than 3 decades of dedicated work in the defense of the rights and freedom of people the world over.

<figure>
<img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2k4v0q8k217zjx53f2hk.png" />
<figcaption>Human Rights First's logo</figcaption>
</figure>


While there are many databases gathering information for other types of legal cases, there is no one aggregate or collective database of collected asylum case data. Because of this, analysis of data extrapolated from cases like these and the general lack of access to information has meant that many people who so desperately need asylum have not been able to receive it and so have had to continue to suffer.

HRF saw the need for an application which could not only serve as that source of truth for asylum case data and the analysis of said data, but also function as a crowd-sourced database, meaning more rapid acquisition and widespread gathering of this much-needed information. To that end, they sought out Lambda School to serve their development needs, and that's where myself and my team of passionate developers came in to put our best into this incredible idea!

The team was made up of myself, a Full-Stack, front-end focused developer, 8 other Full-Stack developers, and 9 Data Scientists. This was the first time I'd ever worked in a group this large, and I admit - as excited as I was going in, I was also nervous! How will I stack up to peers? (Never compare yourself to others, folks!) Will my contributions matter in such a large group of talented programmers? Will I even have the chance to apply myself to this?

In the end, I allowed my passion for such an important project and love to see others succeed take the reins and just jumped in!

### The Rocky Road to True Teamwork

<figure>
<img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x6y2fbsdtb1eqse02zyu.png" />
<figcaption>HRF Asylum Analysis' login page before</figcaption>
</figure>

It quickly became apparent that we had a key problem, though. According to our roadmap, there wasn't enough work to go around considering the full size of our team. Due to this, our project managers decided it might be best to split us into 2 teams - each team was meant to put their best effort into meeting MVP for each item on our roadmap and, in the end, the best parts of our separate versions of the product would be merged into one, stronger product to be shipped to our stakeholders.

That was the theory anyway - and it was a good one! However, we were blessed enough that we had a team of incredibly empathetic, people focused developers. From the moment we were introduced to the project that we would have a chance to work and improve upon, we were ignited with inspiration and passion toward this application and all of the people it could help. 

<figure>
<img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ponwno9w47cbvyxkxqum.png" />
<figcaption>HRF Asylum Analysis' home page before</figcaption>
</figure>

The further we got into drawing up designs, exploring the codebase, finding things to improve and features to add, the more we realized that our roadmap was only the tip of the iceberg. Further than that, we realized that we could never meet our lofty ambitions and development standards, split as we were. The loss of developer power that came with essentially being developed twice was amazing, and we realized that if we came together we could much better delegate the work to better reach our vision.

This was important because all we could think was what might happen if we couldn't complete our role in this project by the end of the month? What if our ideas never came to fruition? How long would people waiting for better help need to continue waiting and suffering? This wouldn't stand. It was time to come together!

### Getting the Team Back Together

The realization came quickly enough - both teams were already cross-collaborating to a degree, and we realized that we would work much better together than apart. To this end, we held a dual-team meeting - all of the developers and data scientists came together to discuss the future of the product and how we could best reach our goals. It was decided by the end of the meeting that this would begin with an approach on 2 fronts - each team would bring this idea to their amazing Team Project Leads (TPLs) and, if the idea of merging teams was well-received, the idea would be escalated to the Project Manager.

This of course led to subsequent meetings over the course of 2 days - there were a lot of variables to consider! Both teams had already put in a lot of work, how would we handle merging our codebases into one cohesive application? How would our TPLs need to shift their management strategies to best assist us as a developer super group? How would we handle meeting to ensure everyone was up-to-date with ongoing tasks so nobody stepped on anyone else's toes and merge conflicts (Incompatible portions of code which can't be easily combined) would be prevented?

### The Grand Plan

The full plan was as follows:

We would hold another set of meetings where the Web and Data Science teams would meet as wholes and pore over their respective codebases, deciding as a group what to merge and what to leave behind, performing the merge as this discussion was held by pair programming. Our TPLs would continue to handle their initial teams as far as 1-on-1 check-ins and lending assistance, but would be accessible by both teams if needed. Finally, every morning we would hold a bulk stand up to catch up on current progress and blockers, followed by separate meetings/pair programming sessions by the Web and DS teams separately to discuss next steps and align on goals.

In this way, we were certain that we could meet most if not all of our goals for HRF's Asylum project. Sure enough, our Project Manager approved of this proposition, and so we set to work!

### On your marks, get set... Go!

We set ourselves a timeline of 2 days - we would spend the first day merging our codebases by the combined strength of our newly formed team and getting our project hosted, and the second day going over the application itself with a fine-tooth comb, catching any potential bugs which might arise. We all engaged in a near-all-day Zoom call to discuss the merger and implement our plan over VSCode, ensuring everything was combined appropriately, discussing with much excitement our new plan of action for the rest of our month, and tracking our progress with Trello.

The merger went nearly flawlessly and, sure enough, we were finished on that first day. We all retired that evening exhausted, but satisfied. Our real work could begin.

### The Results Are In!

<figure>
<img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tw3ehr6s2nzdoajugi64.png" />
<figcaption>HRF Asylum Analysis' login page now</figcaption>
</figure>

The next day we all came into morning stand up with a renewed energy and sense of purpose, pursuing our work with a hunger for progress even I hadn't experienced up to that point. Speaking as a developer, it was exhilarating! The work we got done with our final week-and-a-half was the best we'd performed thus far, and you need look no further than these examples to see the fruits of our labor.

<figure>
<img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s9ylnrmow0wj4a430680.png"><img>
<figcaption>An example of our Figma designs (Image from our design leads)</figcaption>
</figure>

We were able to revolutionize the appearance of our application with the help of our incredible design leads, Katie and Chad. Our server and frontend application were more in-synch than ever before. All of a sudden, we had new visualized data on each judges page, something which could be used to gauge potential bias and help lawyers better prepare their cases.

<figure>
<img src="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s08xywl2e05wtk8a88vx.png" />
<figcaption>HRF Asylum Analysis' home page after</figcaption>
</figure>

Myself, I headed up the implementation of a new homepage, full of such data visualizations that would allow these asylum lawyers and our stakeholders see the effect this application would have on immigration legislature as it's database grows and their dreams come to fruition.

There were issues, of course - merging both databases came at the cost of some mismatching variables between our front end and the data being sent back from our server. This meant that certain aspects of our tables, which display listed case and judge information, weren't rendering on the page appropriately, and certain user actions would crash the application entirely. But these moments were where our super team - our team supreme - shined! Any bug was met with immediate communication and pair programming, and the rate at which we'd squash these nasty pests increased by more than double!

### {self: development}

Altogether, this has been an incredible experience, and while the growth I've experienced in my journey through Lambda School has already been immense, that same growth has never been so concentrated into such a short span of time.

For one, the importance of proper, empathetic communication. From the outside, the tech industry may look like a cold, logical field made up of people who'd rather code alone in a dark room than speak to others, that is absolutely not the case. The level of communication and care and energy with which we interact with each other as developers is above and beyond any industry I've experienced or heard of so far.

Thanks to our team being made up of such incredible super-star developers, we not only met our goals but exceeded them - and we made great friends and connections along the way! 

Additionally, I've learned a lot about myself. I found myself adoring documentation, and stepping into leadership roles more often than not. This has actually been such a dramatic revealing of my inner character as a professional and developer that it has shifted my long-term goals as a career developer to focusing on engineering management and/or starting my own business. To that end, I've applied for and accepted a role as a TPL for the next round of Labs teams to come through Lambda School on their way to graduation. This is thanks to our amazing TPLs, who helped all of us reach our personal and team goals, helped me realize what I wanted and inspired me to take action!

Finally, seeing such an important, potentially life-changing application grow so much over the course of a month and having a hand in that growth has revolutionized the way I see cross-functional collaboration and how vital it is. For that I have to thank the amazing folks at HRF (Seriously, pay their page a visit and learn more!) as well as my team! Had we not been able to communicate so well as a team, hold consistent meetings and check-ins and stay aligned on our goals, we would never have seen the success we did. Good communication is the bridge between confusion and clarity, and clarity is key to great full stack collaboration!