Looking back…

There were many challenges at the begging of my capstone project. Some students left the team, and new ones joined. We settled on a programming language, but then that changed once requirements became clear. We started with NodeJs, but ended up using a mix of Go and NodeJS. There were many things that had to be changed, and that’s mainly due to my team’s and I lack of technical knowledge when it comes to setting up a development project from scratch.

However, I never viewed changing requirements as a downside. Our initial design and requirements document served as a good starting point and reflected the limited knowledge my team had in software development. Every time something in the original plan had to be changed it was because someone in the team learned enough about a new technology, and how it relates to our project, that they understood we had to pivot to something better.

Reading, practicing, and debugging is the best way to learn a new technology. Reading or viewing tutorials is not enough; to grow as a developer you need to try building a new project and struggle through the process of debugging your project. Our initial design and requirement documents laid the foundation that allowed us to start building basic functionalities for our application. This process allowed us to identify areas in our original plan that had to be changed.

I chose this project because I had internship experience as a DevOps engineer that I really enjoyed. I saw that this project would allow me to build CI/CD pipelines and configure a custom git plans for my team. I also had experience with Azure DevOps and I wanted to see if those skills transferred over to AWS (they do).

Overall, I wish my team would have made more progress on the application, but lack of technical knowledge really held us back initially. I’m hopeful that the rest of the year will be productive.

Clean Code!

Programming isn’t all about knowing syntax and writing code that complies successfully – it’s also about writing code in a structured way that makes it easier for developers to think about complex logic.

When I first started programming, my only concern was writing code that would run. When I started my first internship and got my first look at professional code, I realized that writing code was much, much more complex than I originally thought. The magnitude of enterprise code bases are overwhelmingly complex and take a weeks, or even months, to fully grasp. The process of understanding a complex code base was alleviated when I came across code that was structured in a meaningful way. Luckily, I was apart of a team who prioritized writing clean code; from the file structure and naming conventions for files and folders, to the building patterns for object oriented programming, it was all important to ensure that the code base remained robust and easy to understand.

For my capstone project, I’m implementing much of what I learned from my internships to ensure that I write good code that will be easy for my team to understand. I plan to maintain a logical file structure with good naming conventions for all the files, classes, and methods in my code. I’m currently working on setting up CRUD operations for user accounts using Typescript with object oriented programming while ensuring that I’m using encapsulation, inheritance, composition, and polymorphism effectively.

Another trick I learned in my internship was using decorators to extend the behavior of a class. For example, I plan to use decorators for authentication and authorization for when the user accesses certain things in the application.

Writing clean code is just as important as writing code that runs, especially when working with a team or working on a long term project. Clean code improves code readability, which in turn improves productivity when a new team member joins the team or when refactoring is needed.

Wednesday, December 6, 2023

Before starting my capstone, all of my projects were done from scratch with minimal use of Software as a Service (SaaS). Previously, when I wanted to create login/authentication for an application, I researched Json Web Tokens (JWT) and implemented something from scratch. It was very time consuming and felt like it distracted me from the bigger picture of the project. However, with SaaS from AWS, they manage that all for you.

Another example is setting up a database. There is a lot of complexity involved with setting up a database for a large project — server configuration, scaling, monitoring, etc. Luckily, there are SaaS options from AWS that handle everything for you.

I realized the importance of using SaaS to save time and money, especially for large projects organized around agile practices, where quick product delivery is key.

My teammates decided that we will use AWS for most of our project functionality since the application is expected to perform various complex functions.

Experience with AWS, and SaaS in general, will help me land a job as a software developer. I recently accepted an internship for a DevOps position where SaaS options like Terraform and Azure are used regularly. For this project, however, we are using AWS, but I expect there to be a lot of overlap between AWS and Azure.

Overall, I’m happy with my team and how things are progressing. The project mentors are always eager to help despite their busy schedules. My teammates all seem excited to get the project off the ground despite the hiccups we had at the beginning of the term. The class is structured nicely to ensure that we are consistently making progress, while ensuring that everyone in the team does their part. One difficulty is working with the in-person team since our schedules and assignments don’t align. My team is adapting well however, and I expect it to get easier as time goes on.

I’m glad this difficult term is coming to a close and winter break is right around the corner. I plan on getting some AWS and Azure certifications during the break and maybe starting a small personal project of my own. I’m excited for Winter term since it will involved much more development.

Tuesday, November 14, 2023

My previous internships have really prepared me in tackling complex projects with vague requirements. I’ve used the skills I acquired from those internships in tacking my capstone project.

Two members of my team changed projects and a new person was added onto the team pretty late into the term. Instead of being stressed and angry about it, I just rolled with it. The two team members left the group due to vague project requirements from the project mentors. Initially, I was also considering changing projects, but I realized, given the vague requirements, that this is a fantastic opportunity to be creative with how I’m going to tackle the project. The OSU CS program and my internship experience has taught me the importance of being flexible and tacking problems with a positive mindset.

So far, I’ve designed a backend for the project that uses existing services from Amazon. These services include a database, real-time data ingestion, authentication/authorization, and payment preprocessing. The scope of the project is large, so I opted to use those existing services until we encounter a roadblock that requires us to implement something from scratch. These services will all be triggered by a Lambda function that is called from an API gateway. I also plan on taking a “DevOps” role in the team, so that I could manage our CI/CD pipelines and troubleshoot issues with AWS.

We are using flutter for the frontend, which I enjoy a lot since it’s a relevant and new technology. It also lends itself to the microservice architecture, which I expect will slowly be more relevant to our project increases in complexity. But for now, there is a single API gateway that the frontend will call to trigger some AWS Lambda function.

Overall, the initial parts of the project were difficult since the requirements were vague and my teammates seemed uninterested in the project. However, from my experience, no project has explicit and clear requirements in the real-world. As developers we should tackle vague requirements head-on and learn as we go. I’m glad I decided to stay with this project since it has enabled me to be creative in how to tackle a complex project.

Monday, October 2, 2023

Introduction

My name is Osbaldo Arellano and I’m a Senior at Oregon State University studying Computer Science. I live in a small farm-working community called Gervais, located in Oregon. II enjoy playing challenging video games in my free time. I’m currently playing Lies of P and Baldur’s Gate 3, both of which are fantastic, but difficult, games. I also enjoy fishing for salmon and trout in Oregon’s scenic rivers.

My interest for computers and software began when I was a kid. My obsession with having a cool MySpace profile when I was in middle school led me to learn how to edit HTML and CSS. It also taught me how to view the source code of various web pages. I recall being amazed that characters on a screen could produce visually appealing websites. It was basically magic to me. Through middle school and high school, I was obsessed with software. I would download all the cool iOS apps and desktop software. Although I didn’t know how any of it worked, I was amazed at what computer can do. After high school, however, I did not pursue a future in software.

I joined a trade as an HVAC technician apprentice for three years before finally deciding to chase of my dreams of studying computer science. Quitting my job to go back to school was a huge leap for me, I was one year away from becoming a licensed journeyman. But I was young, so I took the leap and enrolled in Chemeketa Community College. After finishing my first computer science course, I realized that I truly did have a passion for programming and computer science.

It’s been three years and now I’m a senior at OSU. I have two internships under my belt, one in back-end software development and the other in DevOps engineering. I’ve taken courses in everything from parallel programming to algorithms, and have I completed a ton of projects. I don’t have a favorite technology or framework, but I really enjoy working on .NET/C# projects because of its emphasis on object-oriented programming.

The capstone project that interests me the most is Betchya, a mobile app that brings mobile betting to tribal casinos. There has been a huge increase in mobile betting recently, so I think that getting experience in the virtual betting world could be beneficial to me when I start looking for jobs. It’s also an opportunity to work with Native American people and help them have a piece of the pie in the rise of online betting.