About Michael Knapp

Michael Knapp's Profile Image

Hi, I’m Michael Knapp, a professional software engineer with over 13 years of experience. I specialize in backend API development, microservices, and Big Data. I am a very hard worker, always on task and probably working longer hours than I’m supposed to. I am always studying new topics in software engineering, and learning how to use them. I am highly motivated to see products delivered, functional, and powerful.

Programming Languages

I have:

  • Over five years experience writing Golang code.
  • Three years developing Java code.
  • One year of Scala development.
  • Two years of Python development experience.
  • Seven years of Bash scripting experience.

I am most comfortable writing golang code today, it is my most recent experience. However, I’m still quite comfortable and happy writing code in Java. I was SCJP certified in the past, and had worked extensively with Spring core and Hibernate for a few years.

I have often used Python for maintenance or administrative scripts at my jobs. My code in Python was never part of the critical applications. I have also used Python to practice developing machine learning models, and to solve problems on Leetcode and Hackerrank. Also I have very frequently been required to troubleshoot issues in Python code written by users in the past. I feel very comfortable working in Python.

Around 2015, I worked extensively with Scala. I found the language to be quite powerful, but it was also the most difficult to learn and understand of all languages. Some of its semantics are purely unintuitive and confusing, meaning I could not expect co-workers to maintain the work later. I liked Kotlin because it ripped out the confusing parts of Scala, but I never got the chance to work with Kotlin.

I have very extensive experience with Bash scripting, and have even taught that in conferences. Its big advantage is that it is already installed in docker base images, so I don’t need to worry about installing something more to make it work, nor do I need to worry that I might be adding security vulnerabilities to the image. Also I keep the docker image light-weight by using Bash instead of Python. Another advantage is that it doesn’t need to be compiled, so I can rapidly iterate on changes to my bash scripts.

Frameworks

  • Kubernetes: I have over six years experience working with Kubernetes, and have been CKA and CKAD certified in the past. I really have very extensive experience with Kubernetes, and a lot of respect and appreciation for it. I would definitely recommend it in future jobs. The only reason I might not is if a serverless option can meet requirements.
  • Helm: I have written many helm charts to build applications for Kubernetes clusters.
  • ArgoCD: I have used ArgoCD for deploying Helm charts as apps to Kubernetes clusters for the past few years. It is quite powerful, easy to use, and easy to learn. I would definitely recommend it. For Kubernetes, it is a better option than Terraform or Ansible or other IAC options.
  • Ansible: I used ansible for about two years back in 2017-2018.
  • Spring Core: I used Spring Core for about three years, from 2012 to 2015. I was certified with Spring Core, and most of my fellow team-members came to me when they had issues with Spring. Sadly I did not get to use Spring Boot.
  • Hibernate: I used Hibernate along with Spring core from 2012 to 2015, as our Object Relational Mapping (ORM) framework. I personally found it very difficult to work with and started writing SQL queries by hand instead. Perhaps it has improved since then.
  • Docker: I have at least seven years of experience developing Docker images.

Machine Learning

I have spent a great deal of my time studying machine learning, and even passed the AWS machine learning specialty certification exam. In my work at Capital One, I was hosting machine learning models in a production environment for realtime inference. I did not personally train or develop these models, but working in that eco-system requires knowledge of a lot of related topics in machine learning.

Cloud Technologies

I have worked with AWS since 2016. I was also certified as an AWS System Architect Associate in 2017, and an AWS Machine Learning Specialty in 2021.

My team’s infrastructure consisted of VPCs, EC2 instances, AWS load balancers, Route53 record sets, CloudWatch Metrics/Alarms, lambda functions, SQS, SNS, and DynamoDB. Most of my own hands on experience was with Route53, Cloudwatch, and Lambda.

Databases

  • MySQL: I worked extensively with MySQL from 2013 to 2015. I really enjoyed working with it, optimizing queries, and even writing stored procedures and table views. It empowered me, but I think I would enjoy working with Postgres more in the future.
  • Accumulo: I worked with Accumulo from 2015 to 2016. It is a distributed columnar data-store running on top of HDFS, similar to HBase (which I was certified in from Cloudera in the past). I felt that it was powerful, but I would much rather not depend on HDFS since it can complicate systems. I’m more interested in working with Cassandra in future jobs.
  • MongoDB: I was certified with Mongo in the past, but never had the pleasure of working with Mongo on the job.

API Development

Throughout most of my career, I was responsible for developing and maintaining some kind of an API. I have at least eight years of experience developing API servers. I definitely will keep producing them as needed for future jobs.

Metrics and Logging

I have experience creating dashboards and alerts in NewRelic, DataDog, and Splunk. I have experience querying in ELK. I’m interested in Grafana, but have not had the pleasure of working with it.

Networks

I have setup Istio Virtual Services, External Authorization, and destination rules in clusters before. I did not install Istio.

Big Data

From 2015 to 2016, I worked on a research and development project with Big Data. I was tasked with writing an ETL job to ingest a graph of 10+Terrabytes in size, into Accumulo. I experimented with Spark, Scalding, and Hadoop MapReduce to get the job done. I often needed to optimize my jobs to make them run faster.

At the time, we were using Mesos instead of Yarn, and we had a lot of issues running Spark like this. Eventually I fell back to Hadoop MapReduce because it was less buggy. However, I felt that Hadoop’s SDK was poorly written, tightly coupled, and that made it difficult to work with. Perhaps it has improved since.

Web UI Development

Most of my web UI development experience is from off the job work. I have spent significant time studying HTML, CSS, and Javascript. In my career, I have never been responsible for developing a web front-end, but I would enthusiastically take on that challenge if I was given the opportunity to do so.

Leadership

For over three years I have served as the technical lead on my team. The role emphasized communication and collaboration with peers, system architecture, story writing, documentation, and mentoring of some co-workers.

Interests

  • Rust: I have read a lot about the language and think I might really like using it.
  • Kotlin: I know this is primarily used for app development, but I admire the syntax and functional programming characteristics of this language. It’s like they took Scala and removed all the super confusing parts of it. I honestly feel like it is the best programming language syntax ever made, but might not perform as well as some system languages.
  • Postgres: Sadly I have not had the opportunity to work in Postgres, but I would really love to.
  • Cassandra: I love the way this NoSQL datastore is built, scales, and performs so well.
    Unfortunately I have not had the chance to work with Cassandra on the job but I would really like to.
  • Kafka: I was certified in Kafka in the past and have much respect for it, but sadly have not had the chance to work with it on the job very often.
  • Terraform: I have used Terraform scarcely on my job, only because ArgoCD and Helm were often the better option for the task. I have a lot of respect for Terraform and would like more opportunities to work with it.
  • DynamoDB: I have used it on a few occasions in my career, but not as much as I wanted to.
  • Kinesis: Sadly I have not gotten to work with it that much, but I admire how powerful it can be.
  • TypeScript: I appreciate that Javascript can be statically type checked with this language, and would like to work with Typescript if I am a full-stack developer.
  • Zanzibar, SpiceDB, AuthZed: Having read about these, I love the concept and would definitely like to work with them for Authorization and permissions in the future.
  • Kong or Tyk: I believe these Gateways could possibly make API development, and microservice adoption, much easier for teams.

Belief System

I believe that:

  • Transparency with managers, product owners, and stakeholders is critical to building trust on a team.
  • Professional developers should not be married to specific tech or languages, but instead to certain concepts or well established principles and industry best practices.
  • Testing at all levels is critical to a system’s success.
  • When a co-worker asks for help, it is more important to assist them than to make your own individual contributions. You should always strive to be the most helpful co-worker on the team.
  • Having ample documentation is super important yet frequently under-appreciated.
  • Loose coupling, and segregation of responsibilities, are extremely important for the long term maintainability of software systems. These are often not given the priority they deserve.
  • Being highly motivated, a quick learner, and devoting time and energy to a product, is more important than what you already know and have experience with.
  • New open source projects should be thoroughly explored and seriously considered frequently, but also carefully vetted with a proof of concept before a team commits to them.
  • Being inclusive is important.

Unrelated to work, I also believe:

  • Cancer needs to be cured.
  • Humanity is not doing enough to protect the environment and stop climate change.

Industries

I have six years of experience in the Financial Technologies (banking) industry.

I am interested in working in the following industries:

  • cyber-security
  • health-care software technologies
  • Internet of Things

Why Healthcare?

I have a personal vendetta against cancer, although I have not had it myself. I would really like the opportunity to take a job that is also contributing to the fight against cancer.

Charity

I make monthly charitable donations to the Cancer Research Society, the BCRF, and the Sierra Club. I also donate Platelets at the Red Cross every four weeks.

References

If needed, I can provide ample job references. My past co-workers should be able to tell you that I was a highly productive individual contributor, and that I always helped them.