Categories
Uncategorized

Our biggest challenge – Infrastructure…

So far, the capstone sequence I am taking has been a very rewarding experience – challenging my existing skillsets by pushing me into technology, frameworks, and tools I had never used prior. A few tools and technologies I was pushed to learn over the course of this capstone sequence are:

  • GitHub Projects
  • Google Cloud Platform (GCP)
  • Java / Springboot

That being said, the more things change… the more they stay the same. Fundamentally, the biggest challenge I have faced over the course so far has been finding infrastructure solutions that work for my team. At the beginning, during our earliest POCs, all of our components were running locally. This was not a desirable long term solution, though… so we quickly began to migrate to school hosted servers.

Unfortunately, software and hardware limitations on the flip servers proved to be detrimental to our application. Early on I had failed to properly plan our application tooling with the Flip servers in mind, so as the application came together we realized (a bit late) that the version of Java / Springboot we were using would not be supported on school servers. Pushed by desperation, we took advantage of school credits to perform an additional migration of our application to Google Cloud Platform (GCP). Now given almost complete control of our infrastructure, we are very confident in our ability to move forward… but we lost a significant amount of time.

In hindsight, I wish I had been more proactive about directing the team towards GCP from the beginning – with clear technology requirements in mind for the platform. I was able to deliver a satisfactory infrastructure solution for my team, but not as quick as would have been optimal. Managing the changing project spec and getting out my solutions in time for the team has been the biggest challenge I have faced so far.

Categories
Daily Check-in

The beautiful simplicity of Infrastructure as Code (IaC)

It was June of 2022… I had just been hired for my first internship with a Trimble, Inc. As a young engineer with no practical experience, I went into the internship with a very common skillset for students. In my first several years of study, I was introduced to the fundamentals of programming and operating systems. I was also taught how to develop websites and manage their hosting environment. What I wasn’t taught… is how to deploy those hosting environments in a cloud environment. I hadn’t yet realized the impact technologies such as Terraform had made on the deployment mechanism’s in live production environments. I didn’t yet know what Infrastructure as Code (IaC) meant. I was about to learn.

Terraform is a simple, declarative programming language that allows infrastructure to be provisioned as code. Terraform is a vendor agnostic tool widely utilized and supported. All major cloud platforms (AWS, GCP, Azure, etc.) support Terraform provisioning. I had an opportunity to begin learning Terraform use strategies early in my career with Trimble, and I continue to utilize it today. If I was asked to share my favorite technology / framework to work in, there is no competition; terraform is the winner.

Some of the benefits of Infrastructure as Code are:

  • When Infrastructure configuration is stored as code, it can be versioned (AZDO, GitHub, etc)
  • When Infrastructure configuration is stored as code, changes can be tested and rolled back as part of standard CI / CD deployments.
  • Combined with the scalability of cloud computing, Infrastructure as Code creates more opportunities for low or zero downtime deployment strategies (such as blue / green deployments and canary deployments).

I am looking forward to incorporating the use of terraform into my current project, Dividend Dollars Investment App. For this application, we are planning to run a MySQL DB instance and Web Server on Google Cloud Platform (GCP). Being able to lay down these components as part of our CI / CD pipeline will allow us to manage cost and streamline development.

Infrastructure as Code was a career-altering experience for me as an engineer. I highly recommend it as a potential area of study for current students.

Categories
Daily Check-in

Hiding information for ‘cleaner’ code

“Clean code is simple and direct. Clean code reads like well-written prose. Clean code never obscures the designer’s intent but rather is full of crisp abstractions and straightforward lines of control.”
– Grady Booch

The quote above was famously attributed to Grady Booch, the author of Object Oriented Analysis and Design with Applications. In chapter 1 of ‘Clean Code: A Handbook of Agile Software Craftsmanship’ by Robert C. Martin, Grady Booch was highlighted for his focus on code readability. In support of Grady’s statement, I would venture that information hiding is a critical concept for improving code quality and readability.

As defined in this article of baeldung.com, ‘information hiding is a programming principle that promotes the idea of restricting access to internal implementation details.’ Modular programming is a programming methodology that aims to break up programs into their most basic (and often reusable) components. Information hiding is a principal of modular programming that encourages obscuring and restricting information about the underlying implementation details of a component.

Obscuring information about the underlying implementation comes with several benefits:

  • Hiding implementation details of a component improves high level readability of code
  • Obscuring or restricting visibility on the implementation of a component discourages frequent changes or tampering

Information hiding also encourages mitigating certain ‘code smells’. ‘code smells’ referring to a list of bad behaviors as outlined in ‘Refactoring – Improving the Design of Existing Code’ by Martin Fowler.

  • Duplicated Code – Relying on a well known & reliable component (with information obfuscated) for repeated operations mitigates code redundancy.
  • Long Parameter List – When information of the underlying implementation is hidden, inputs and outputs need to be well understood by the end user. Information hiding encourages developers to re-consider what inputs are necessary for an end user.
  • Comments – While information obscurity will not magically improve the quality of your comments, it does reduce the margin of error. Code implementation is kept deliberately obfuscated from the end user, and only the interface (inputs, outputs, etc) are presented. With a code based more focused on high level logic, writing concise and meaningful comments becomes easier.

Just recently, my professional mentor taught me information hiding as a means of improving my system design & code quality. There is no ‘magic bullet’ in programming, but I have come to respect that information hiding has a ‘magical’ tendency to drive code quality while discouraging common coding mistakes.

Categories
Daily Check-in

Creating a user friendly CI / CD pipeline to optimize development

Hey, guys!

In recent weeks, I have been attempting to coordinate with the other devs on my team and lay out the structure and earliest implementation of a CI / CD pipeline which will be used to guide and optimize the development process. A few early challenges I have been working through include:

  • Determining what type of access roles my devs need to have to the repository to be able to properly utilize the CI / CD pipeline and action workflows I am defining for them
  • Selecting impactful inputs that provide the devs configurability, without creating extra work for no reason

For the first item, I am in the process of determining whether GitHub free version is capable of allowing collaborators on a project repo to access repo settings (variables, secrets, etc). If not, then I am considering renewing my ‘student’ access to GitHub enterprise features – as described here:
https://github.com/education/students

In regards to effective inputs, I am in the middle of onboarding my devs to the new workflows and I am getting feedback from them during the initial implementation. I am hoping that our conversations will help determine what inputs are necessary or missing.

I am finding that building a CI / CD pipeline is an iterative process that requires robust feedback from the ‘customers’, which in this case are the developers. Still in the thick of it, but I am hopeful that my team and I can create an end product that will serve us effectively for the rest of our time in the course sequence!

Best Regards,

Kenneth Huddleston

Categories
Daily Check-in

Making travel part of your learning goals

Good evening, everyone!

Early planning work for our investment application is going well. I recently created a repository in GitHub where we are beginning to populate and organize our planning docs in a meaningful way. We hope to incorporate some of these elements in our upcoming demo of v0.0.1.

My professional career has been particularly exciting as of late. Recently I was offered an amazing opportunity by my current employer, Trimble. I was given the chance to represent the company at a technical conference hosted by one of our largest vendors, HashiCorp. HashiCorp was hosting a technical conference in Boston, MA.

I traveled to Boston with another member of my engineering team; our goal was to receive an update on new features in HCP Terraform and how they could be used to improve quality and reliability in our organization. To achieve this goal, we:

  • Held meetings with design architects and SMEs from HashiCorp
  • Attended technical training in specific areas of interest
  • Attended company socials where we were given a less formal glance at HashiCorps company operations

It was an amazing opportunity. I am floored by how much more you can learn when you incorporate travel & networking events into your learning plan. If you want to read more about my experience at this event, please check out my LinkedIn post here:

https://www.linkedin.com/posts/kenneth-h-280b5497_starting-on-monday-1014-thru-wednesday-activity-7253085849104326657-URdD?utm_source=share&utm_medium=member_desktop

At some point, I hope everyone else has similar opportunities to engage with other engineers and architects!

Good luck, everyone.

Categories
Daily Check-in

The first step

A journey of a thousand miles begins with the first step – Lao Tzu

Hello, Everyone! My name is Kenneth Huddleston, a part time Computer Science student and a full time Site Reliability Engineer working in the software industry. I am beginning my first post of my capstone project with a Lao Tzu quote, because I believe I am very blessed to be at the start of what is probably the hardest, but most rewarding year in my career so far.

I have been working in software as a Site Reliability Engineer (SRE) for a little over 2 years now. In light of me recent work, my company has slotted my for a leadership training curriculum which I will be completing in tandem with my work in this capstone. Between work, my leadership training, and this course – I have found myself without lacking inspiration and challenge. As I have been completing the prep work for the year ahead, I have come to personally identify with Lao Tzu’s quote ‘A journey of a thousand miles begins with the first step’. Whenever I am daunted by the amount of work in front of me, I try to remember.. it’s just one step at a time!

For my capstone sequence, I am currently recruiting members for a project that will stretch my technical skills beyond what I have experience in my career so far. My project is a full-stack application meant to track a users Investment holdings; providing the user performance metrics, forecasting reports, news, etc. One example of an application like this currently available on the public web is Stock Events: https://stockevents.app/en .

I am recruiting for my team on EdStem. If you are interested, please check it out! The link to my recruitment post is here: https://edstem.org/us/courses/67384/discussion/5369144?answer=12450700 .

Looking forward to an amazing year!