Using web development to defend human rights

Taylor Friesen
6 min readJun 24, 2021

Over the past month in Lambda School I’ve had the opportunity to contribute to a really amazing product: a tool to enable users to aggregate and analyze data on asylum cases. We’ve been working with Human Rights First, a nonprofit dedicated to pushing the United States to better respect human rights. One of the ways Human Rights First pursues their mission is by providing legal representation for people seeking asylum in the United States. The court decisions in these asylum cases aren’t publicly available, so to get a sense of what to expect from upcoming cases, the lawyers share with each other the decisions from cases they’ve worked on in the past. What our product does is make it easier to share those court rulings and glean useful information from them.

When I first started looking at the product, my greatest concern was that I wasn’t going to have very much to do. Looking at the project we’d inherited from the previous team of Lambda School students who worked on it, it seemed like it was extremely polished and basically ready to hand off to Human Rights First. I was worried that we would get to the end of the month and I would be feeling like I hadn’t made any significant contribution to it personally.

How I impacted the project

It turned out I needn’t have worried. As we investigated the project more closely, we discovered a lot of problems to fix that hadn’t been apparent at a first glance. We also came up with some new features to add and the Human Rights First representatives agreed that they would be very valuable additions to the product, so we had plenty of work to do implementing those. We came together as a team and populated a Trello board with all of the problems to fix and features to implement, and we assigned tasks from the board to anywhere from one to three team members depending on how complex they seemed.

I started out working on a simple problem: The way that cases are added to the database is that a user uploads and submits them and then an administrator needs to approve the submitted cases. But there was no way for the administrator to see the PDF of the court ruling when reviewing a submitted case. Other metadata was available, but without the case PDF there was no way for the administrator to confirm that the metadata was actually correct. Additionally, one of the primary reasons for requiring administrator review was to ensure that sensitive information had been redacted from the uploaded cases, and there was no way for the administrator to check that if that had happened without being able to see the PDF.

Actually making the PDF available turned out not to require much code: The data was already there, it just wasn’t being displayed. The main challenge at this stage was just getting enough of an understanding of the code to know where I had to make the change. But during that discovery process I realized a more difficult and important problem: The buttons for the administrator to approve or reject cases didn’t do anything at all. With no way to approve cases that users had submitted, there was no way for new cases to get into the database.

Enabling the administrator to approve and reject cases required the application to call the server, and that required understanding the API for the project back end. Surprisingly, I also had to gain a deeper understanding of Ant Design, the UI framework being used for the project, even though I wasn’t attempting to change the appearance of the website at all. The buttons for approving or rejecting a case were generated inside an Ant Design table, and I needed to dig through the Ant documentation to understand how to get the buttons to “know” which case they corresponded to, and therefore which case was being approved or rejected.

Once I had made it possible to approve and reject cases, I worked with teammates Liza Pincsak and Juan Ruiz to implement a new feature. We made it so that when an administrator rejects a case, they can leave a comment so that the user who uploaded it can see what’s wrong and what they need to fix before resubmitting it. When I finished enabling case approvals and joined them to build the comment functionality, they had already made the necessary changes to the backend to allow comments to be stored in the database, edited, and viewed. I helped implement the frontend side of things so that the reviewing administrator could add a comment in a modal which popped up when they rejected a case, and so that the uploading user could then see that comment when they looked at the case on their own account.

some of the code I wrote for when an administrator rejects a case
what rejecting a case looks like for the administrator

How WE impacted the project

We had a large team and everyone on it did amazing work, so the contributions I worked on directly were just one part of the impressive amount of progress we managed to make on the product over the past month. In addition to the changes I already talked about, we did an overhaul of the backend which made it much faster, we improved the user interface so that users could more clearly see what they were doing when performing a search in the table of cases, we changed all the alert popups to Ant Design notifications, we fixed an error that was prevented cases from being uploaded, we redesigned the login page to look better, and we changed it so the website wouldn’t be forced to refresh whenever the user did something that changed the state.

There were a few features that we did a lot of work on but didn’t get finished by the end of Labs. One was what we were calling “dynamic visualizations”: making it so that users had a fair amount of flexibility to choose what data they wanted to better understand, and could then receive a graph of the selected data. Another feature that we worked on but didn’t manage to complete was in-app notifications. In both cases we managed to make a lot of progress and acquire a clear roadmap of what needs to happen to make the feature actually usable, so the next team of Lambda School learners should be well-positioned to get that fully implemented.

the user notifications feature (still under construction)

How the project impacted me

Working on this project has helped me grow as a developer and as a person. I’m generally a little less shy and more confident than I was a month ago: Coming into this team, the idea of working on a large team with so many strangers was very intimidating, and it was hard to speak up as much as I would have liked. By the end of the project, I was speaking up frequently and making a lot of contributions to the team Slack. The idea of coming into a new team and doing it again no longer seems daunting, and I think next time I’m working with a team I’ll have that increased confidence and willingness to communicate from the outset.

Some of this was just a matter of practice: I got better at working on a big team and communicating more just by doing more of it until it became comfortable, and some of that growth would have happened for me on any large team. But having such an amazing and supportive team as this one made a big difference. My teammates encouraged me to speak up, and when I did share information with my teammates I got a lot of positive feedback letting me know that it was helpful and appreciated, which made it a lot easier to speak up the next time.

No matter where I end up as a developer, I’m sure that I’ll be working as part of a team, and on any team the skills that I’ve acquired here will serve me well. (Really there aren’t a lot of environments, in the workplace or outside of it, where confidence and willingness to communicate aren’t going be helpful.) I’m grateful to Lambda School and Human Rights First for enabling me to grow, and for giving me the opportunity to contribute to a valuable and inspiring product.

--

--