Get a DemoStart Free TrialSign In


6 min read

In this edition of our series dedicated to spotlighting the movers and shakers in the tech world, we're thrilled to welcome Michael Muinos, an experienced Software Engineer currently residing at Google who is also the founder of Algos With Michael. Through this conversation, we aim to dive deep into the experiences that have defined Michael's career, alongside exploring the challenges and triumphs encountered, we will also share advice for aspiring software engineering professionals in this piece.


Could you provide an overview of your role as an experienced software engineer and the organization you currently work for?

Currently I am a software engineer at Google working on the OAuth platform team. I have been working in the tech space for a little more than six years now and my roles have mostly revolved around backend engineering. Each job that I have had usually involves designing, implementing, and improving server-side applications. This process entails creating APIs (Application Programming Interface), working with different database systems, and writing code to implement business logic behind the scenes that the user does not see.

As an experienced engineer, what are your key responsibilities on a day-to-day basis?

My day-to-day responsibilities usually involve attending team wide meetings to discuss task updates relating to ongoing projects, writing code to implement new features and fix bugs, reviewing code that other teammates have written to ensure the changes made are safe for use in a production environment, viewing metrics to ensure new changes that have been made available to users are working as intended, and communicating with other software engineers on my team through chat and video calls to diagnose issues and discuss solutions to a variety of problems.

What aspects of software engineering do you find most fulfilling or challenging?

The aspect of software engineering that I find the most fulfilling is starting out with an idea and actually bringing it to life for many people to use. The aspect of software engineering that I find most challenging is the high degree of context switching that is required in this field. There are usually many projects on my plate at once and this does not even include the meetings, chats, emails, and other random tasks that popup each day that require attention. Switching my mental focus between all of these things at a rapid pace can be very draining.

Can you share a bit about your journey into the field of software engineering and how your background has shaped your approach to software development?

My introduction to the field of software engineering started when I had one of my friends show me an Android app that he was working on. Originally, I was a history major in college, but I became fascinated with the idea of being able to come up with an idea and writing code to implement that idea for use by millions of people. While in college, I began writing Android applications using the Java programming language and released several apps on the play store over the span of a few years. Eventually I stopped creating Android apps, but I believe this experience significantly grew my technical skills. I was able to learn many new skills that became relevant in my career such as new programming languages, frameworks, databases, testing code, and fixing bugs.

How do you approach problem-solving and decision-making in your software engineering projects?

My approach to problem solving in my software engineering projects starts with identifying what the problem actually is. That may seem obvious, but you would be surprised how often solutions will be given to problems that don’t even exist yet which can complicate things in a software project. My next step is being able to reproduce the problem reliably that way you can test multiple potential fixes and see if the problem resolves or not. This allows for a fast iteration of debugging the problem and finding an answer. Lastly, I will typically include other team members to bounce ideas off of, especially if the problem is difficult to fix.

In your experience, what are some common challenges or misconceptions in software development, and how do you navigate them?

One of the most common misconceptions that I have come across in the software development field is that your job only involves writing code. Yes, writing code is a big part of a software engineer’s job, but it by no means is the only responsibility. As a software engineer, you are also responsible for debugging issues, fixing bugs, writing technical documentation, planning upcoming work, and attentively testing code. In my opinion, the best way to navigate this misconception is to gain experience working on a software project with others. Doing this will bring you experience in all of the above that was mentioned and not just writing code.

What advice would you offer to aspiring software engineers looking to enhance their skills and advance their careers?

The best advice I could give to aspiring software engineers looking to enhance their skills is to start working on a software project that interests them. The type of project does not matter – it can be a web application, iOS app, Android app, game, or even just a simple script. The importance is not on the type of project, but rather what you are interested in learning about. Learning the skills to become a software engineer is not easy and that is why it is critical that you work on projects that intrigue you. If you are not interested in what you are working on, it will be difficult to have the motivation to continue when you start running into roadblocks.

Could you share an example of a particularly complex or innovative project you've worked on, and how you and your team tackled it?

In my previous software engineering role at the company ChowNow, a complex project that I worked on with my team was to implement, test, and maintain new API endpoints that allowed other third party developers at Square, DoorDash, Uber, and others to integrate their systems with ours. Since ChowNow is an online food ordering platform, these endpoints allowed developers to communicate with ChowNow services to perform CRUD (Create, Read, Update, Delete) operations on menu related structures. Menus have a significant amount of hierarchy – there are multiple food categories, each food category has menu items, each menu item has sides and is available in multiple sizes, all this paired with the fact that restaurants have different menus depending on the time of day (breakfast, lunch, and dinner). Figuring out how to store this information in an efficient and succinct way and have all of our integration partners agree with the menu format was challenging to say the least. Our team tackled this challenge by having design discussions, weighing pros and cons of multiple approaches, and inevitably committing to a solution.

What are some recent technologies or methodologies you've been exploring in your role as a software engineer?

As a software engineer, learning new technologies to enhance your skill set is necessary to remain competitive in the field. With that being said, there are a few tools that I have been exploring recently. The first is a distributed streaming platform called Kafka that allows the development of real time data applications. I wanted to learn this technology because there are many use cases such as for messaging, location tracking, and data gathering applications. Another piece of technology that I have been learning about recently is Zookeeper which keeps track of information that must be synchronized across a cluster of servers. This tool is especially useful to learn if you are developing a product in a distributed environment.

How do you ensure the quality and security of the software you develop?

There are several ways to ensure quality and security of software being developed. The first way is to have thorough code reviews done by team members. Any change made by a developer should follow strict coding guidelines and should be reviewed by at least one other person. The next way is by having exhaustive unit and integration tests. Unit testing is necessary so that developers can test isolated pieces of coding logic and ensure code integrity. Integration testing is where developers test multiple parts of software together instead of completely secluded sections of code. Both are necessary for ensuring software is written with as few bugs as possible. The last way is to have multiple environments for testing new changes made to a product. Most commonly, there are dev and staging environments that are used to ensure new code is working as expected. A dev environment is where software is actively developed by engineers while a staging environment mirrors what a production environment looks and acts like. These environments help prevent bugs from reaching the production environment where potentially millions of people will have access to.

One trend that I am seeing in the software engineering space is an increase in no-code and minimal-code platforms popping up. These platforms allow people with either no programming skills or basic programming skills to build a variety of software. They are useful for saving time to build common application features instead of having to reinvent the wheel. From personal experience, my course platform Algos With Michael was created using a minimal-code platform called Kajabi. Although I could have built this website from scratch, it was a huge time savings to use a minimal-code platform to get up and running as quickly as possible.

If you enjoyed this interview then why not read our articles on the leading alternatives or ELK dashboards next?

Get the latest elastic Stack & logging resources when you subscribe

© 2024 Ltd, All rights reserved.