January 1

Looking back on 2023…

I've never written any kind of post-mortem on the year that was, 2023. So, what did I do in 2023?

Stepped down from my leadership roles at the Houston .NET User Group and the North Houston .NET User Group. I still regularly attend both, but needed a break. Luckily, we've found good stewards at Improving's Houston office and SmartDraw up in The Woodlands. I'll have to put together a talk to give at each one of those in 2024.

I had the bright idea of getting BJSS involved in the CodeLaunch 2023 event in Houston. The Head of Delivery and Software Engineering Capability Lead played an Uno Reverse Card and had me lead BJSS's team. I just wanted the company I worked for to be apart of the event, I wasn't expecting to lead anything. We had the 2nd draft pick and we drafted a company called Drinkicks. Hopefully we provided them some good tech to get them moving forward. It's tough to figure out how to squeeze the output of 24 hours of a hackathon into a ~30 sec demo.

I got "promoted" to Software Engineering Capability Lead for the BJSS - Houston office. I say "promoted" because it's one of those roles where there is no additional compensation, but I can update my LinkedIn profile. Which I did. The role covers a few areas including recruiting (interviewing) prospective candidates, playing matchmaker between client engagements and software engineers already on staff, and helping/encouraging software engineers to upskill themselves (certs, training, etc). So far it's been a good gig.

I served as the meet director for the 2023 USA Powerlifting Summer Power Fest. My wife and I have been running this competition every year except 2020 since the mid 00's. It's been alot of work and fun. It's good to see people who started their powerlifting career at our meet making it to the national and international levels of the sport.

I put together a talk on Command Query Responsibility Segregation (CQRS) for BJSS - Houston's internal Tech Forum event. I think the talk was received well. I'm not a big fan of giving presentations and it's something I definitely should get better at.

I was admitted into the USA Powerlifting Hall of Fame. Some people were paying attention when I was a competitor, coach, referee, meet director, and administrator. It was definitely one of those moments when you stop climbing the mountain and turn around and see how far you've come. I didn't get into the sport for this, but I am grateful USA Powerlifting thought so highly of me.

After the whirlwind of Azure certifications in 2022, I picked up the AWS Cloud Practitioner Certification. It was an easy exam. I just had to map the Azure names to the AWS names.

I planned to pick up the Azure Administrator Associate Certification. However, I ran out of time in 2023 to get it. Pushing this to 2024.

As far as client work goes, I worked for the same client all year. Good, steady pressure to deliver value and plenty of opportunities to contribute to the project beyond just building features and fixing bugs. The team I work with is a blend of the client's employees, BJSS employees, and another vendor's employees. Pretty good team, they just like to talk over each other in our 2 weekly scrum meetings.

In the first half of 2023, I renewed the following certifications:

  • Azure Data Engineer Associate
  • Azure Security Engineer Associate
  • Azure Solutions Architect Expert (I did this one cold turkey.)
  • Azure Developer Associate
  • Azure Cosmos DB Developer Specialty
  • Dev Ops Engineer Expert

In the second half of 2023, I renewed the following certifications:

  • Information Protection and Compliance Administrator Associate
  • Identity and Access Administrator Associate
  • Security Operations Analyst Associate
  • Security Administrator Associate (This is the first and last time I'll get to renew this one since Microsoft is retiring the certification. Kind of a bummer because this one was a pain in the ass to get.)
  • Cybersecurity Architect Expert

That's a high-level view of what I accomplished in 2023. It feels like things are getting busier in my life and I expect it to continue into 2024. My next post will have a rough plan of what I'll be doing in 2024.

Category: Uncategorized | Comments Off on Looking back on 2023…
December 29

“A jack of all trades is a master of none…”

I'm sure you've heard this saying somewhere in the past, but do you know the full saying? If not, here it is:

A jack of all trades is a master of none, but oftentimes better than a master of one.

Seems applicable in software development.

Category: Uncategorized | Comments Off on “A jack of all trades is a master of none…”
November 28

Read This: “Why Older People Struggle In Programming Jobs”

I came across an interesting article today. It's called Why Older People Struggle In Programming Jobs written by Adam Nathaniel Davis. There are several sections to this article around dealing with office politics, tech churn, fanboys, and the cookie-cutter-ing of software.

One of the most soul-sucking trends in dev over the last decade-plus has been the constant effort to reduce programming to some sort of assembly line kinda process. Although I can understand the desire to refine a complex process into a simpler one, the end result of these efforts is that the programmers often end up being treated like... assembly line workers.

Adam Nathaniel Davis

This quote spoke to me because a few of my last few jobs have felt like this. It might have more to do with joining a team while a project is in flight as opposed to getting onboard before the project starts. When you come on to a team with a project already running, you are busy trying to learn the system that has been built, not make any breaking changes, and still deliver value for the client.

There are a bunch more interesting tidbits in this article and I think it's definitely worth the time to give it a read.

Category: Uncategorized | Comments Off on Read This: “Why Older People Struggle In Programming Jobs”
September 7

Does Your Manager Come With a README?

Do you know what a README is?

You can add a README file to your repository to tell other people why your project is useful, what they can do with your project, and how they can use it.

GitHub's About READMEs

Pretty good idea isn't it? Why should we stop there?

When you are looking for a job, you give the potential employer a lot of information about who you are (SSN, education, marital status, background check, credit check, and any information they can glean from the interviews). There is a smaller amount of information coming back the other way, specifically about who your manager is. Normally, you hit the high points in the interview and then "stumble" over their intricacies while on the job. Do you ever wish your manager came with a README?

Now they can! Enter https://managerreadme.com/. I had a manager who included a link to his README in a batch of onboarding documentation. He covered several topics:

  • About Me
  • Team/Culture
  • Time Management
  • Communication
  • 1:1s
  • My Commitments to You
  • My Expectations of You

Did it tell me everything I need to know to work with this person? No, but what a great way to help set expectations for new people on a software development team.

If you think this is a good idea, send your boss a link to https://managerreadme.com/ and tell them create a README to help your future teammates with their on-boarding.

Do you have a README? Share it in the comments.

Category: Uncategorized | Comments Off on Does Your Manager Come With a README?
August 27

New High Score (update)!

My post from yesterday talked about the biggest class I have come across in my lifetime. Turns out, thanks to C#'s partial keyword, the class is even bigger. I have some code metrics from Visual Studio to share. Here they are:

Maintainability IndexCyclomatic ComplexityDepth of InheritanceClass CouplingLines of Source code
4995292361761900
Code metrics covering the class in aggregate.

Here are the metrics for the 3 longest methods in the class:

Maintainability IndexCyclomatic ComplexityDepth of InheritanceClass CouplingLines of Source code
015277786
0215621181
0284271238
Code metrics covering the 3 longest methods in the class.

The class itself has 1,314 methods! That is insane!

Yep, I think you are gonna have a hard time unit testing this monster.

Have you come across a bigger monstrosity? If so, leave a comment!

August 26

New High Score!

I was working with a new codebase today and I was working on wrapping some unit tests around a section of code in a class. While working, I realized I had come across the BIGGEST class I have ever seen in my life. So big in fact that Visual Studio's IntelliSense was lagging.

For the record, I did not write this code. Unlike some developers, I know what the Single Responsibility Principle is...and I use it! #solid #softwaredevelopment #youaredoingitwrong

Without any further ado, here is a picture of the new high score!

Have you worked on a codebase that has a class bigger than 40,675 lines? If so, post a comment.

Category: Uncategorized | Comments Off on New High Score!
June 22

Microsoft Certified: DevOps Engineer Expert

Microsoft Certified: DevOps Engineer Expert
Microsoft Certified: DevOps Engineer Expert

I picked up Microsoft Certified: DevOps Engineer Expert certification last week. I posted it to LinkedIn but it didn't make it here until now.

To get this certification, you have to do the following:

What's next? I have several possibilities of things to do:

I'm open to any other suggestions. Got some? Let me know.

Category: Uncategorized | Comments Off on Microsoft Certified: DevOps Engineer Expert
June 13

Deploying an ASP.NET Project From a Multi-Project Solution Using GitHub Actions

I've been studying for the AZ-400: Designing and Implementing Microsoft DevOps Solutions exam. As part of the preparation for that exam, you build a bunch of CI/CD pipelines. Every example given has a GitHub repo with 1 solution and 1 web project. That's great for demoware, but we aren't writing demoware.

Let's say you have a website you wrote about 10 years ago using an earlier version of ASP.NET (read that as non-.NET Core) that you want to modernize/revamp. The approach I took was to create a new ASP.NET Core web project next to the older version of the website in a single solution.

The idea is that I could take my time moving parts from the old project to the new and still have a running version of the old website. Putting my DevOps hat on, I wanted to create a CI/CD pipeline using GitHub Actions. I started building the pipeline using the examples available in the Azure/webapps-deploy repo. I got the pipeline to successfully execute, or at least run with no errors. It was deploying the entire solution directory! Well, that ain't gonna work.

For the purposes of this project, I just want to deploy the ASP.NET Core project. Using the .NET Core CLI, we can build the entire solution or individual projects.

We need to build the ASP.NET Core project only. In this example, we are using the Release configuration and I've told it not to restore NuGet packages because I did it in a previous step (not included in this blog post).

    - name: Build
      run: dotnet build ./NewWebsite/NewWebsite.csproj -c Release --no-restore

Next we need to gather the output for the project to be deployed. This example will publish the output of the NewWebsite project into a directory called publish located in the root of the repository. It will do it with the Release configuration.

    - name: Publish
      run: dotnet publish ./NewWebsite/NewWebsite.csproj -o ./publish -c Release

Once that is all gathered/packaged up, we need to deploy to the target Azure App Service. The value for app-name came from the Azure Web App Publish Profile. The publish-profile value is going to be the Azure Web App Publish Profile copied from Azure and added as a secret to your GitHub repository. The last part and the reason for this blog post, is the package setting. This should point to the directory you want to deploy.

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'newwebsite'
        publish-profile: ${{ secrets.azureWebAppPublishProfile }}
        package: ./publish/

That will deploy the contents of the publish directory to Azure. The trailing slash is important, if you leave that off, it will deploy the publish directory itself which is incorrect.

That's what worked for me. I hope this helps you with your DevOps experience.

Category: Uncategorized | Comments Off on Deploying an ASP.NET Project From a Multi-Project Solution Using GitHub Actions
June 1

Microsoft Certified: Azure Developer Associate

Microsoft Certified: Azure Developer Associate

As I posted back in March, I have completed another Azure certification (Microsoft Certified: Azure Developer Associate). This time I took the AZ-204: Developing Solutions for Microsoft Azure exam. I took the exam back on April 15th and because the exam was in beta when I took it, I just got the results of the exam on May 28th. It was the first exam I have taken here at the house as opposed to going to a testing center. It wasn't too bad except for the dogs barking and not being able to get up to tell them to knock it off.

The next one up will be Exam AZ-400: Designing and Implementing Microsoft DevOps Solutions to get the Microsoft Certified: DevOps Engineer Expert.

Thanks to this COVID-19 stuff, I'm still looking for a new opportunity. If you are looking for a .NET Core developer, let me know.