Finals, Internship, and Crafting


As I wrap up this week of finals, I am pleased to begin my internship next Monday at Trimble as a Software Reliability Engineer. For context, Trimble is an industrial technology company that supports a multitude of industries such as construction, government, geospatial, agriculture, transportation, natural resources, etc. My primary role will be to understand product needs and existing monitoring tools, collaborate with developers to align new features with market demands and implement automation to maintain cloud infrastructure policies. In layman’s terms, I’m basically making sure computer systems in the cloud work effectively by setting them up right, keeping an eye on how they’re doing and updating them when needed while also making sure everything follows the rules.

My primary goals for the internship include networking with the team and my peers, receiving guidance from my mentor, gaining relevant hand’s on experience, gaining better confidence in my technical skills and understand cloud infrastructure technologies and streaming platforms such as Terraform and Apache Kafka. At my previous internship last summer 2023, I focused more on the backend systems and building out APIs. I leveraged technologies like GraphQL, Docker, and Datadog while using Python and SQL. Now, I am excited to jump into the platform side of things as I’ve become increasingly interested in the delivery and stability of production environments.

Outside of work, I recently came across Asian American Town, a self-funded project uniting Asian communities. They organize the Legendary Makers Market, Oregon’s largest Asian-focused event showcasing the stories of Asian artists and artisans. This summer, the event returns on July 26-28 with support from the City of Beaverton. More details can be found at https://www.legendarymakersmarket.com/.

They’ve also launched a mini-summer pop-up series, offering a space for new and smaller vendors with fewer entry barriers compared to the main event. This Saturday, June 15th, I’m excited to attend one of these LMM mini markets at Warsugai PDX. I’ll be debuting Ye Jia 叶佳 (Instagram: @yejiabeads), where I showcase bracelets inspired by nature for the first time! I’m thrilled to share this space with other Asian artists and meet the community. Exploring new avenues and branching out more this year has been a goal of mine, and I can’t wait for this opportunity.


Stay tuned as I look forward to sharing more about my journey throughout the summer!

The Power of Project Management Tools in Remote Work Environments


Throughout my experience working on the Senior Capstone project, I’ve gained such an appreciation for project management tools like Jira. As the global shift towards remote work continues to accelerate, effective communication has become more crucial than ever. So why should we give more credit to such tools?

Streamlining Team Collaboration:
In the realm of remote work, seamless communication is the key to success. Project management tools, such as Jira, enable teams to collaborate efficiently by providing a centralized platform for sharing information, assigning tasks, and tracking progress. By utilizing such tools, team members can easily access project details, actively contribute to discussions, and stay updated on the latest developments. This transparency fosters a cohesive work environment, where everyone is on the same page, regardless of their physical location.

Enhancing Task Allocation:
One of the significant advantages of project management tools is the ability to assign and manage tasks effectively. In remote work settings, it can be challenging to keep track of individual responsibilities and ensure that team members are not overburdened. With tools like Jira, tasks can be clearly defined, assigned to specific team members, and tracked throughout the project’s lifecycle. This comprehensive overview enables everyone to understand their roles and responsibilities, minimizing the risk of duplicated efforts and ensuring a balanced workload distribution.

Preventing Overlap in Large Teams:
In large teams, the potential for task overlap and duplication is amplified. Without proper coordination and visibility, individuals may unintentionally step on each other’s toes, leading to inefficiencies and frustration. Project management tools like Jira address this challenge by providing a holistic view of the team’s activities. By having a general overview of what others are working on, team members can identify potential areas of overlap and proactively communicate to mitigate any conflicts. This promotes a harmonious work environment and maximizes productivity by avoiding redundant efforts.

In the era of remote work, project management tools like Jira have emerged as essential assets for effective team collaboration. They streamline communication, enhance task allocation, and prevent overlap in large teams. The ability to have a centralized platform for sharing information, tracking progress, and assigning tasks empowers remote teams to work cohesively towards their goals. As we adapt to the changing landscape of work, embracing project management tools becomes imperative for effective collaboration. We should all embrace the power these tools as they unlock a new level of productivity and efficiency within our remote work environments.

The Final Stretch

As we enter the last couple weeks of the semester, I came to realize several important lessons throughout the development stages of our senior capstone project. Our team is building an AI-powered web tool called MatchIQ which is meant to help jobseekers through features such as smart job searches, resume enhancement, career path support, company culture matching, application tracking, and more.

What are 5 things you learned from working on your project?

  1. Know what tasks others have – This may sound like a no brainer but project management softwares like Jira are powerful tools for software development processes. It’s absolutely pertinent that we assign ourselves to a ticket and understand what work others are doing. There were a couple times where there was overlap or someone already completed the work of another. Something as simple as having a name assigned to a ticket can prevent a weeks worth of duplicate work and help ensure we are all on the same page.
  2. Start Early – It may seem like a week is a lot of time to complete a task. However, we never know when technical issues can arise which hinder our ability to actually work on the task at hand. It’s best to start early in the week in case some software isn’t working or there is a bug. That way if that takes a couple days, we still have the rest of the week to complete our actual work. I’ve realized that projects tend to work as 80% troubleshooting and 20% actual coding.
  3. Containerize your project – Having everyone on different operating systems and software versions made development a nightmare, as small inconsistencies would cause major bugs. Using containerization helped normalize our environments to avoid issues stemming from discrepancies in our individual setups.
  4. Ask questions – Being on a team , we all have diverse backgrounds and experiences. When I got stuck, I sometimes wasted hours trying to solve problems alone. Now I know to reach out to teammates right away to get issues resolved more efficiently. Collaborating is so much better than banging my head against the wall!
  5. Conduct Thorough PR Reviews – Even when swamped with my own tasks, I’ve learned to thoroughly review all code submissions before merging. Once, an overlooked error in a peer’s change broke my copy of the codebase. Now I understand the importance of fully testing all changes to catch bugs before they impact others or merge to main.

Overall, working on this project reinforced for me that team software development is as much about collaboration as it is coding. Building the product itself requires a joint technical effort, but it’s also a process of coordination, knowledge sharing, and tackling issues together. From being proactive in the teams channel, to assigning our names to a ticket – every step of the way counts.

A Technology I Underestimated

Last summer 2023 when I was working as a Backend Engineer Intern, I was first introduced to a technology that initially caused me frustration, but I later came to appreciate as I utilize it in my senior capstone project.

First lets talk Containerization. This software deployment process is important for reasons like portability, efficiency, faster delivery, flexibility, easier management etc.

“Containerization is the packaging of software code with just the operating system (OS) libraries and dependencies required to run the code to create a single lightweight executable—called a container—that runs consistently on any infrastructure.” (IBM)

In other words, containerization is like using a shipping container for software. 🚢 It can move and run the same way anywhere. As software engineers, we like to make our lives easier, not complicated. Well, at least we try to. Anything that streamlines development and deployment processes without compromising quality or security is a welcome change. Now introducing our friend: Docker

Docker is a platform that allows developers to build, test and deploy applications quickly using containers that run virtually anywhere.

Now up until this point, most of us have experienced developing full-stack applications. Remember that time you had like 10 different folder paths, going into your backend, starting up that server. Going into your frontend and starting that server. And going into any other microservice running on some other server. It quickly becomes a terminal tedium especially with large projects. Well what if I told you one simple command could start up all those servers? Docker does exactly that with docker compose up

Here’s an example from my capstone project:

As you can see, I am able to run my frontend, backend and my database servers all at once without having to manually enter each of their associated folders. Now imagine you’re at a large company where production has numerous servers, microservices, databases and other dependencies. It becomes clear that containers seem ideal to manage such levels of complexities. Docker is truly an excellent tool for organizing modern applications at scale. Overall, I wish I appreciated and knew about Docker sooner, but I am grateful to have been exposed to it last summer, and I look forward to learning more about it throughout our capstone project.

Sources:

“What Is Containerization?” IBM, www.ibm.com/topics/containerization.

Clean Code vs Code Smells

This weeks topic is all about clean code as well as code smells. But what exactly is clean code?

Clean code is a term used to describe computer code that is easy to read, understand, and maintain. Clean code is written in a way that makes it simple, concise, and expressive. It follows a set of conventions, standards, and practices that make it easy to read and follow. (Cocca, 2023)

After reading more about this topic, I was immediately reminded of my internship last summer 2023 as a backend engineer and my lead telling me about the “Zen of Python“. I had never heard of these guiding principles before, but after writing some messy intern code, I realize now that the Zen of Python serves as a simple reminder and roadmap for prioritizing pragmatism.


One of the most important lessons I learned was that “Simple is better than complex“. When I first started coding in a professional setting, I was definitely lost trying to navigate the codebase. It was like being dropped into a foreign country where I didn’t speak the language. I’d try to write these tasks from scratch without even considering that someone else may have already solved the problem I was working on. That was probably my biggest rookie mistake. I’ve come to realize that the function is most likely already written somewhere else in the code. My 50+ lines of code suddenly turned into < 25 , and I realized that I didn’t have to overcomplicate things if I had spent more time searching for what I needed. From that point on, keeping things simple became my number one coding mantra. The more complex the code, the harder it is to make sense of months or even weeks later. Trust me, future you will thank past you for taking the reduce-reuse-recycle approach. Nowadays before I write a single line, I always try to exhaust all search options first. It means my programs stay tidy and I spend my time actually building things instead of tearing my hair out over bugs.

I guess what I’m saying is, if you’re just starting out in coding, don’t be afraid to piggyback off others’ work. Chances are if you’re trying to solve a problem, someone else already has too. Keeping it simple will save you time and stress down the road.

Lastly, in understanding code smells, I strive to avoid writing redundant code. It’s easy to code for long periods of time and not notice overlapping logic sometimes. This highlights the importance of breaks like after coding for an hour, standing up for 15 minutes. Coming back to code the following day provides a new lens as well – it becomes simpler to spot inefficiencies I may have previously glossed over during a marathon coding session. Regular breaks, coupled with reviewing previous work with distance and detachment, can help ferret out flaws that warrant attention. This approach helps maintain both coding quality and personal well-being over the long run. It is crucial to identify flaws now so that our future selves can thank us. As software architect, Joydip Kanilal states, “Code that is particularly smelly can eventually cause profound performance problems and make business-critical applications difficult to maintain.”

Sources:

Cocca, Germán. “How to Write Clean Code – Tips and Best Practices (Full Handbook).” FreeCodeCamp, 15 May 2023, www.freecodecamp.org/news/how-to-write-clean-code/#:~:text=Clean%20code%20is%20a%20term,easy%20to%20read%20and%20follow.

Kanilal, Joydip. “Understanding Code Smells and How Refactoring Can Help.” Tech Target, 11 Mar. 2022, www.techtarget.com/searchsoftwarequality/tip/Understanding-code-smells-and-how-refactoring-can-help#:~:text=Put%20simply%2C%20code%20smells%20are,in%20accordance%20with%20necessary%20standards.

“The Zen of Python.” Python Enhancement Proposals, 19 Aug. 2004, peps.python.org/pep-0020/.

Tech Industry: Broken Hiring Processes

For all those computer science students out there trying to seek internships and other entry-level positions, I think we can all agree the tech industry is not only brutal right now, but there’s a lot of competition. It constantly feels like an uphill battle. We often see postings on LinkedIn like these:

and then we check Reddit posts like these:

or we see people post their resumes from an ivy league school and former NASA interns who still haven’t gotten an offer after 100+ applications…

Soon the reality of the job market quickly sets in and becomes increasingly daunting and discouraging. This is the reality for millions of students across the globe as the tech industry becomes increasingly difficult in their broken hiring processes. When you have 4-6 rounds of interviews just for an internship or new grad position, it’s easy to become stressed and overwhelmed on top of your studies. The truth is actual day-to-day work is a lot simpler than the interviews. Engineer’s days are not spent flattening linked lists or building Facebook from scratch under a stopwatch.

Don’t get me wrong – companies need to thoroughly evaluate candidates. But the current system takes it to the extreme. Spending weeks prepping obscure algorithms or being grilled on over-the-top whiteboard problems bears little resemblance to actual work. Real jobs involve collaboration, communication skills and pragmatic problem-solving – aspects difficult to gauge from a technical quiz show. A better approach sees candidates as humans, not just skills listings. Take-home projects and pair programming assess hard skills in realistic scenarios. Assessing potential, not trivia mastery, leads to quality hires who thrive long-term.

Companies want stars, but the path to find them must be accessible and equitable. With millions of lives impacted, the system demands reform that works for all. 

Note: For those interested, there is actually a Github repo called Hiring Without Whiteboards (https://github.com/poteto/hiring-without-whiteboards) which has a comprehensive list of companies that use interview techniques that more closely resemble day-to-day work. The repo was created by Lauren Tan, a software engineer at Facebook.

Halfway There

We’re about halfway through the semester so here’s some key insights:

This semester has been quite hectic and probably my busiest so far in my time here at OSU. Between multiple class projects, senior capstone, applying to next summer internships, studying for interviews and grinding Leetcode, I can confidently say I haven’t been bored.

So what’s you senior capstone project about?

My team is currently working on a Job Hunting AI tool. Think LinkedIn but the simpler, built in a dorm room type version. Less fancy, but still gets the job done. Now AI? Everyone loves to throw the word AI around, but what is it really going to accomplish for us? How does it make our application unique?

Job hunting these days feels like shouting into a void – you send out dozens of applications but rarely get a response, leaving you feeling ghosted and discouraged. That’s where our new AI tool comes in. By crunching resume data and available job posts, we aim to curate hyper-targeted recommendations that actually match job seekers to opportunities.

So far our team has been hard at work on pre-production planning, hammering out features, architecture diagrams, you name it. There are still quite a few unknowns, and it’s during the development process that we’ll truly encounter unexpected challenges. However, I’m excited to delve deeper into web scraping, machine learning, and database storage in AWS. These three elements are currently hot topics in technology, and I believe they will greatly benefit us in our future endeavors.

Wow, sounds interesting but how are you managing in general? Any tips on handling stress?

If I told you that juggling a year-long software development project, working on other lengthy projects in different classes, securing a summer internship with multiple rounds of interviews, and grinding leetcode isn’t stressful, I’d be lying. However, I can share one valuable tip: time management. Let’s face it, us students have a tendency to procrastinate. But when you’re given 2-3 weeks for a project in another class, it’s because it genuinely requires that amount of time. Don’t wait until two days before and expect to accomplish everything. That will only stress you out. Staying ahead of deadlines is the number one crucial tip I have.

Okay, and what about technical interviews though, they all seem fairly tough. What if I feel stuck and just can’t seem to solve any problem whether it be tagged leetcode medium or leetcode hard?

Okay here’s the reality: Nobody knows everything. And if you do, well where’s the fun and excitement in that? The beauty of life lies in the constant journey of learning and discovering new things. Now I won’t get all philosophical here, but the bottom line is this: if you can problem solve, then you’re only a google search away from the solution. In technical interviews, you won’t always know every single question that comes your way. The real key is your approach. If you can come up with ideas and find ways to improve them, you’re already on the path to success. Anyone can be given an approach and code up a solution, but what truly matters is your problem-solving skills. The number one mistake is reading a question and not trying to understand it and directly thinking of solutions. Don’t rush to find solutions without fully understanding the problem first. After that, you can then start formulating approaches. One technique I heard from YK Sugi (CS Dojo on Youtube) is to think of the brute force approach first. How would you solve this from a non-coding perspective? Think as if you are a kid and someone tells you this problem, then what would you do? After brute force approach, you can then try to think of ways to optimize your strategy.

“A good engineer knows how to use tools; a great engineer knows how to create them.” – Anonymous

Why Computer Science?

My initial interest started in 2011 when my computer had all but Solitaire, FreeCell, Minesweeper (never figured that one out) and chess which would inevitably beat my 9yr old self every single time. Like many computer enthusiasts, our liking starts in gameplay. But mine was a mix between gameplay and the frustration of technical issues. You see, my computer used to shut off randomly, or get the Blue Screen of Death. Naturally, I’d try to troubleshoot so I could return to whatever memory heavy game I was playing. Eventually, through this experience, I became more curious about how computers work and how could I fix the errors? A tinkerer you’d say, but I was far from it. In fact, I probably made matters worse at the time, but hey, what can a 12yr old do?

Eventually, I took my first computer science class in school in which i’ll never forget using Snap! as my very first “kid-friendly” programming language. I’ll admit, I would get frustrated at times. Thinking in this logic was not familiar to me. Eventually, I would go on to take computer science here at OSU to which I admit, the logic still doesn’t always come to me. However, through persistence and curiosity I’ve been able to build applications I never thought I’d know how to do. My favorite project so far has been a full stack application which uses OpenAI’s API to generate song recommendations based on user input. A demo video can be found here.

I’ve been fortunate enough to gain internship experience as a Backend Engineer this past summer. I was the companies first intern so I was kind of like the “guinea pig” for them possibly launching a formal intern program in the future. As a result, I will be eager to share about my experience in a later post.