CACAO
CACAO (short for Content Aligned with Creative Achievement and Organization, because naming is a pain) was an app that I built with a team of two other people as a submission to the Congressional Application Challenge. We consistently set aside time each week for the entire summer between my junior and senior years of high school to build this app. In the end, our effort paid off: we were selected as winners of the aforementioned challenge and were invited to present our app at the U.S. Capitol Building.
The Origin
The first day of this project started like any other. I attended my art class (one year of fine arts was a high school graduation requirement at my school, and it turned out to be quite fun) as I would any other day. Everything was going normally until I was approached by a friend I had made through Mu Alpha Theta, my school's math club. He had found a nationwide competition that invited students to build and submit an original, purpose-built app. Evidently, it sounded sufficiently up my alley that he invited me to join him and one other team member in this challenge.
We had a goal, but no idea what we wanted to create. The challenge itself laid out few requirements, so we were left to choose something on our own. We had a few ideas: a program to help businesses assign tasks for employees, an inventory management system, or even a rebuild of our school's website. However, I had an idea that we agreed was more compelling, both for our own interests and likely from the judges' perspective. Why not build an app to solve problems for students like us, like the target demographic of this challenge?
What Did We Need?
There were three main deliverables:
- A calendar system to track assignments and the classes that assigned them.
- An infinite-scrolling feed of interesting facts that would intermix user-created notes.
- A GPA calculator to make my spreadsheet solution redundant.
That middle bullet would become the main selling point of our app. The video pitch we created focused on how, In the modern day, attention spans have been falling rapidly due to the prevalence of doom-scrolling social media platforms. We admitted that this wouldn't change, but we asked the judges to imagine how that scrolling could help students study for their latest exams instead.
At the demonstration, we received feedback that our app wasn't focused enough, that we should have focused only on that main selling point and cut the rest. They were certainly right that an "everything app" was the wrong approach, but we were ambitious and hadn't yet recognized that. We wanted to build the most impressive app possible, so we intended to add the features we would want in an app initially planned as a tool for students. That was exactly what we did.
Getting to Work
By the time we started, summer had come and classes had ended. This gave us plenty of time to schedule hour-long meetings three times a week. Given the scope and quality of what we built, it shouldn't have taken quite so long considering the number of people we had. However, there was a second reason I was invited to join the team: I was the only one of us with any experience building software projects. Furthermore, I was the only one with experience in the programming language and IDE we would be using: Java and Android Studio, respectively.
Still, we got around that hurdle by splitting the work effectively. I worked on the behind-the-scenes logic, programming what would happen on each button press. Meanwhile, the other two worked on the front-end app interface and the video we would be submitting to present our application.
Pain Point
This project was before I got into web development, before I got used to JavaScript and to changing the content of a display programmatically. So when I needed to handle the infinitely-scrolling feed that would populate either facts or notes as the user scrolled to the bottom, it took a little bit to figure out. It didn't help matters that, at least to my knowledge at the time, Android Studio didn't have anything like CSS that would allow me to simply add an element and let styles be automatically applied to it.
Instead, I had to do it manually, which was fine when the format was simple: background color, font size, nothing that a simple Google search couldn't solve. Layouts and containers, on the other hand? I had grown used to the visual layout creator that Android Studio had, allowing me to simply drag and drop until I had something that looked decent.
I remember searching the Android Studio docs, trying to figure out how to handle such a constraint-based layout in code for multiple work sessions in a row. In hindsight, the solution was simple: there already existed linear layouts that would suit my purposes, skipping the constraint system entirely in favor of putting elements in order one after another. At the time, however, I was fixated on translating what I already knew into code, ignoring that such a solution would be far more complicated than what I needed.
The Result
In the end, our project did what we had set out to do. It won in our congressional district, and we were invited to attend the House of Code event on Capitol Hill. The experience was entirely worthwhile, and I even use one of the pictures I took for my profile to this day.
Still, this was one of my earliest programming projects that reached the finish line, which meant it taught me an early lesson. I didn't need to overcomplicate the layouts when easy, linear ones would take far less time to implement. Half of the time spent on this project was dedicated to features that our final product would have been stronger without. I think this was the project that showed me the truth of that famous saying: "Keep it simple, stupid."