<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Steve Smith</title>
    <description>The latest articles on DEV Community by Steve Smith (@ardalis).</description>
    <link>https://dev.to/ardalis</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F48238%2Fabac2bdb-1470-4fca-8cff-735db6f759cb.jpg</url>
      <title>DEV Community: Steve Smith</title>
      <link>https://dev.to/ardalis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ardalis"/>
    <language>en</language>
    <item>
      <title>2019 Year in Review</title>
      <dc:creator>Steve Smith</dc:creator>
      <pubDate>Tue, 14 Jan 2020 15:43:26 +0000</pubDate>
      <link>https://dev.to/ardalis/2019-year-in-review-19e4</link>
      <guid>https://dev.to/ardalis/2019-year-in-review-19e4</guid>
      <description>&lt;p&gt;Yes, it’s that time again. Time for another recap of what happened last year. If you’re reading this, and you’re not me, you probably are mostly interested in the most popular articles from last year, in case you missed something others found interesting. So, I’ll start with those. If you’re looking for other years in review, or want a checklist to help with writing your own year in review article, here are a few links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ardalis.com/2017-in-review"&gt;My 2017 Year in Review&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ardalis.com/2018-year-in-review"&gt;My 2018 Year in Review&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ardalis.com/year-in-review-post-checklist"&gt;My Year in Review Post Checklist&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Blogging
&lt;/h2&gt;

&lt;p&gt;Last year I only added 41 posts to my blog. My high for a month was 6. The total is actually up from 37 in 2018, but it’s still less than one per week.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--unRJ4ro3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-1024x557.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--unRJ4ro3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-1024x557.png" alt=""&gt;&lt;/a&gt;New Articles per Month in 2019.&lt;/p&gt;

&lt;p&gt;In terms of traffic, Google Analytics reported that I had 769,979 page views, and that’s with missing about a week in January. In 2018 I had 708,260, so that represents about a 9% growth rate. Not amazing, but at least it grew. You can see there were a few weeks with big spikes from articles that were pretty popular.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DhaypRvo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-1-1024x418.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DhaypRvo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-1-1024x418.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Which brings me to articles. Google Analytics is great for identifying one’s most popular content. Often it’s not what you might think, expect, or hope for, though. For example, I mostly focus on code quality topics, domain-driven design, object-oriented principles, testing, etc. My top posts… don’t always reflect that though:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/force-nuget-to-reinstall-packages-without-updating"&gt;Force Nuget to Reinstall Packages Without Updating&lt;/a&gt; (53k impressions)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/using-mediatr-in-aspnet-core-apps"&gt;Using MediaR in ASP.NET Core Apps&lt;/a&gt; (30k impressions)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/how-to-find-all-objects-in-a-sql-server-schema"&gt;How to Find All Objects in SQL Server Schema&lt;/a&gt; (23k impressions)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/why-delete-old-git-branches"&gt;Why Delete Old Git Branches&lt;/a&gt; (22k impressions)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/sql-server-error-user-group-or-role-already-exists-in-the-current-database"&gt;SQL Server Error User Group or Role Already Exists&lt;/a&gt; (21k impressions)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/add-images-easily-to-github"&gt;Add Images Easily to GitHub&lt;/a&gt; (20k impressions)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/the-more-you-know-the-more-you-realize-you-dont-know"&gt;The More You Know The More You Realize You Don’t Know&lt;/a&gt; (15k impressions)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/git-graph-visualizes-branches-in-vs-code-for-free"&gt;Git Graph Visualizes Branches in VS Code for Free&lt;/a&gt; (14k impressions)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/enum-alternatives-in-c"&gt;Enum Alternatives in C#&lt;/a&gt; (14k impressions)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/how-to-add-a-nuget-package-using-dotnet-add"&gt;How to Add Nuget Packages Using dotnet add&lt;/a&gt; (14k impressions)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At least my one Excel tip on &lt;a href="https://ardalis.com/display-plus-sign-in-excel-if-value-is-positive"&gt;How to Display a Plus Sign If the Value of a Cell is Positive&lt;/a&gt; is no longer in my top 10 (it’s #12 with 12k impressions).&lt;/p&gt;

&lt;p&gt;Currently I have 1502 blog posts on this site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Goal for 2020: One Million Page Views&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Probably a stretch goal to get 33% more page views (since last year I only got about 10% growth) but goals should be exciting when achieved and hoping for another modest 10% doesn’t excite me. I’d like to publish at least 52 posts in 2020 (about 25% more than I did in 2019) and if I can push that a bit higher that should help me with the overall traffic goal. Note that most of my most popular posts weren’t even published in the last year so the real trick isn’t quantity but quality. I need to publish the right posts.&lt;/p&gt;

&lt;p&gt;Another strategy I’m just starting is &lt;a href="https://dev.to/ardalis"&gt;reposting on the DEV community&lt;/a&gt;. I’ve only just started this so it’s too early to say if it will have much of an impact on my site traffic or other metrics. If you’re there, be sure to follow me and I’ll most likely follow you back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Weekly Dev Tips Podcast Stats
&lt;/h2&gt;

&lt;p&gt;Some of you may know I have a podcast, &lt;a href="http://weeklydevtips.com/"&gt;Weekly Dev Tips&lt;/a&gt; (which is the same name as my emailed newsletter that goes out every Wednesday). I don’t necessarily keep up with the “weekly” in the name… In 2019 I published 23 episodes (so, not quite enough to call it biweekly…).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hWfhI4Wy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-2-1024x405.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hWfhI4Wy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-2-1024x405.png" alt=""&gt;&lt;/a&gt;Podcast downloads in 2019&lt;/p&gt;

&lt;p&gt;My podcast had 146k downloads in 2019. You can see from the chart above when I released new episodes. Here are the top shows (all time downloads):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/022"&gt;Domain Events – Before Persistence&lt;/a&gt; (6,907)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/024"&gt;Do I Need a Repository?&lt;/a&gt; (6,300)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/025"&gt;What Good is a Repository?&lt;/a&gt; (6,039)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/042"&gt;On Learning TDD and LISP with Uncle Bob Martin&lt;/a&gt; (6,021)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/026"&gt;Layering Patterns on Repositories&lt;/a&gt; (5,437)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/017"&gt;On Design Patterns&lt;/a&gt; (5,334)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/015"&gt;Maintain Legacy Code with New Code&lt;/a&gt; (5,300)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/031"&gt;Breaking Bad Coding Habits with Joe Zack&lt;/a&gt; (5,169)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/032"&gt;How much do you make?&lt;/a&gt;(5,070)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://weeklydevtips.com/episodes/027"&gt;How Do You Even Know This Crap?&lt;/a&gt; (5,059)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Seems my tips on design patterns like domain events and repositories are among the most popular. Maybe that means I should record more tips on these, but I don’t want to read too much into it. Mostly I just need to get more consistent about publishing these shows. I got busy toward the end of last year and now it’s been almost 3 months since I published a new episode. I have a few in the queue so hopefully we’ll get them going again soon (I need to finish this blog post, first…). My goal for 2020 will be to publish 52 tips, even if they’re not actually every week (since that ship has already left the harbor).&lt;/p&gt;

&lt;h2&gt;
  
  
  Weekly Dev Tips Mailing List
&lt;/h2&gt;

&lt;p&gt;This one I don’t miss. I sent a new tip out ever Wednesday in, just like I did in 2018 and 2017. I’m currently on a 195 week streak and I hope to keep that up through 2020. Currently I have 2,917 subscribers. You can sign up here, if you’re interested.&lt;/p&gt;

&lt;p&gt;In terms of goals, I want to make sure I have something helpful to send every week. If I can meet my blog and podcast goals, then it makes it much easier to have something ready for the email. I’d also like the list to continue to grow, of course. If I can grow it to 4,000 subscribers, which seems pretty modest, that should help with my goal of getting 33% more page views for the blog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Social Media Stats
&lt;/h2&gt;

&lt;p&gt;It can be difficult to get this information after the fact, so here are my stats for various social media things as of January 2020.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://twitter.com/ardalis"&gt;Twitter.com/ardalis&lt;/a&gt;: 13,135 followers. 37.7k tweets sent.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/ardalis"&gt;YouTube.com/ardalis&lt;/a&gt;: 628 subscribers. 46 videos. 14,917 views.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/weeklydevtips"&gt;YouTube.com/weeklydevtips&lt;/a&gt;: 251 subs; 13 videos. 1,307 views.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/ardalis"&gt;Twitch.tv/ardalis&lt;/a&gt;: 777 followers; 0 subscribers; 5,201 views.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ardalis"&gt;GitHub.com/ardalis&lt;/a&gt;: 1.6k followers; 163 repositories.

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ardalis/CleanArchitecture"&gt;CleanArchitecture repo&lt;/a&gt;: 3.6k stars; 715 forks&lt;/li&gt;
&lt;li&gt;1,111 contributions in last year (everywhere)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.instagram.com/ardalis_steve/"&gt;Instagram.com/ardalis_steve&lt;/a&gt;: 60 posts; 171 followers.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Publications
&lt;/h2&gt;

&lt;p&gt;In 2019, I published the following books and courses:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p-T73y9R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/media/cover.png" alt="cover image"&gt;&lt;/a&gt;&lt;a href="https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/"&gt;Architecting Cloud-Native .NET Apps for Azure&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also updated my architecture eBook for .NET Core 3.1.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ardalis.com/architecture-ebook"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7XipLZdJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2017/08/Architecture-eBook-Cover-242x300.png" alt="Architecture-eBook-Cover"&gt;&lt;/a&gt;&lt;a href="https://ardalis.com/architecture-ebook"&gt;Architecting Modern Web Applications with ASP.NET Core and Microsoft Azure&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My Pluralsight Courses (2019)&lt;/strong&gt; (&lt;a href="https://app.pluralsight.com/profile/author/steve-smith"&gt;View All&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pluralsight.com/courses/csharp-solid-principles"&gt;SOLID Principles for C# Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pluralsight.com/courses/refactoring-csharp-developers"&gt;Refactoring for C# Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that these are both updates of existing, more comprehensive courses. You may find value in watching the originals as well, which have additional content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pluralsight.com/courses/principles-oo-design"&gt;SOLID Principles of Object Oriented Design&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pluralsight.com/courses/refactoring-fundamentals"&gt;Refactoring Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Speaking
&lt;/h2&gt;

&lt;p&gt;Last year I spoke at the following 5 conferences:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stir Trek (April 2019)&lt;/li&gt;
&lt;li&gt;DevIntersection (June 2019)&lt;/li&gt;
&lt;li&gt;dotnetconf (September 2019)&lt;/li&gt;
&lt;li&gt;DogFoodCon (October 2019)&lt;/li&gt;
&lt;li&gt;DevIntersection (November 2019)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In 2018 I traveled and spoke quite a bit more (11 events) and in 2019 I decided to slow it down a bit. For 2019 so far things are looking to be busier again, but we’ll see how things play out. So far I’ve already spoken at Codemash and I’ll be at NDC London at the end of January.&lt;/p&gt;

&lt;p&gt;My talks and workshops have mostly focused on domain driven design, clean architecture, cloud design patterns, and ASP.NET Core.&lt;/p&gt;

&lt;h2&gt;
  
  
  Travel
&lt;/h2&gt;

&lt;p&gt;Since I cut back on my speaking gigs I didn’t travel as much in 2019 as I have in other years. Two new places I visited were MIT with my daughter for a college visit and Hawaii with my family.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B7UUenS9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B7UUenS9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-3.png" alt=""&gt;&lt;/a&gt;Steve at MIT&lt;/p&gt;

&lt;p&gt;In Hawaii we stayed on Oahu and visited Pearl Harbor, hiked Diamond Head, visited the Dole plantation, and hung out at Disney’s Aulani resort. It was certainly a beautiful place to visit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ou3e1QM2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-4-1024x471.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ou3e1QM2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/image-4-1024x471.png" alt="Sunset from Aulani"&gt;&lt;/a&gt;Sunset from Aulani&lt;/p&gt;

&lt;p&gt;I also got another email from Fitbit telling me my stats for the year. My one device died and it took a while before I opted to get a new one, so there was some missed time.&lt;/p&gt;

&lt;p&gt;For 2019:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Best day was 25,708 steps. That’s pretty low, really.&lt;/li&gt;
&lt;li&gt;2,370,187 total steps&lt;/li&gt;
&lt;li&gt;75 Average Sleep Score (new with new Fitbit HR device)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Work Environment and Gear
&lt;/h2&gt;

&lt;p&gt;I try to keep &lt;a href="https://ardalis.com/tools-used"&gt;my current list of gear and tools used&lt;/a&gt; up to date. In 2019 I did choose to upgrade a lot of my hardware that was getting really up there in age. I don’t think I’ll be getting any new laptops or desktops in the next year or two as a result. My desktop configuration is still &lt;a href="https://ardalis.com/ultimate-developer-rig-2019"&gt;this one&lt;/a&gt;. I’ll try to write a quick post about my Dell XPS laptop I got last month some time soon.&lt;/p&gt;

&lt;p&gt;I did move my office at the end of last year. I’m pretty happy with how it turned out in terms of recording and streaming. I now have a green screen wall that works pretty well (I need to get a little better lighting but it’s 95% good as is). I also put in some matching sound panels. The &lt;a href="https://ardalis.com/walking-while-working"&gt;treadmill desk still gets a lot of steps every day&lt;/a&gt;, though at this moment I’ve got my chair on it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1ZXKcktm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/IMG_1703-1-1024x768.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1ZXKcktm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://ardalis.com/wp-content/uploads/2020/01/IMG_1703-1-1024x768.jpg" alt=""&gt;&lt;/a&gt;My office set up in January 2020.&lt;/p&gt;

&lt;p&gt;(this is getting rather long – is anyone still reading?)&lt;/p&gt;

&lt;p&gt;In terms of gear a couple other things I got this year that I’m happy with are &lt;a href="https://www.youtube.com/watch?v=JzCBrJslNhc"&gt;a Stream Deck, which I talked about here&lt;/a&gt;, and a Tesla Model X. I’ve wanted a Tesla for a very long time and the incentives, timing, and cash flow finally aligned to let me do it. I’ve been very pleased with the car, and its over the air updates have improved it over time (unlike every other car I’ve owned that has only degraded with time). I haven’t missed gas stations, the car is super fun, and it just charges in my garage. It’s been fine for relatively short road trips (3-4 hours away), but for family vacations we’ll stick with the minivan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Work Stuff
&lt;/h2&gt;

&lt;p&gt;My wife Michelle and I run a bunch of businesses together. Too many, in fact. In 2019 we were able to wind one down, which was a good thing. Our main revenue-producing business is software training, mentoring, and consulting, and we hired our second employee in 2019. Things are going well and we’re looking to probably hire another 1-2 senior people in 2020 assuming things keep going well.&lt;/p&gt;

&lt;h2&gt;
  
  
  That’s It
&lt;/h2&gt;

&lt;p&gt;Thanks for reading this far. Like I said, this is mostly so I can look back years later and see where things were at this point in time. Hopefully if you’re not me doing that you found some useful tidbits here. If you want to &lt;a href="https://ardalis.com/year-in-review-post-checklist"&gt;write your own year in review blog post, I wrote a checklist here&lt;/a&gt; that is probably longer than most people will want but you can just pick and choose what works for you.&lt;/p&gt;

&lt;p&gt;Good luck in 2020 and beyond!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://ardalis.com/2019-year-in-review"&gt;2019 Year in Review&lt;/a&gt; appeared first on &lt;a href="https://ardalis.com"&gt;ardalis&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>personal</category>
      <category>softwaredevelopment</category>
      <category>yearinreview</category>
    </item>
    <item>
      <title>Year in Review Post Checklist</title>
      <dc:creator>Steve Smith</dc:creator>
      <pubDate>Mon, 06 Jan 2020 19:33:00 +0000</pubDate>
      <link>https://dev.to/ardalis/year-in-review-post-checklist-1jbn</link>
      <guid>https://dev.to/ardalis/year-in-review-post-checklist-1jbn</guid>
      <description>&lt;p&gt;You have a blog. It’s early January. You need something to post. Why not post a [Current Year – 1] in Review post? Something like this &lt;a href="https://ardalis.com/2017-in-review"&gt;2017 in Review&lt;/a&gt; or &lt;a href="https://ardalis.com/2018-year-in-review"&gt;2018 Year in Review&lt;/a&gt; or any of these &lt;a href="https://www.google.com/search?q=developer+blog+year+in+review"&gt;developer year in review posts&lt;/a&gt;? Great idea! But what should you include? You don’t want to forget anything important. That’s why I’m creating this software developer blog year in review article checklist. Now you can just read this year in review meta post and pick and choose the bits that make sense for your own year in review blog post. Enjoy and please share and add anything I’ve missed in the comments.&lt;/p&gt;

&lt;p&gt;By the way, I recommend including a bunch of pictures, ideally both photos and screenshots, in your post. It’ll add a great deal to the visual interest and people love graphs and charts so if you’re sharing stats and have charts to go with it, be sure to include them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is kind of long but the idea is to be comprehensive. Skip anything that doesn’t apply or you don’t care to include. Don’t &lt;em&gt;not&lt;/em&gt; post something just because you can’t include everything listed below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your Blog
&lt;/h2&gt;

&lt;p&gt;This one should be obvious. Write about the highlights and stats for &lt;a href="https://ardalis.com/blog"&gt;your blog&lt;/a&gt;. Consider covering any or all of these things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many posts did you publish?&lt;/li&gt;
&lt;li&gt;How many page views / sessions did you get per month/year?&lt;/li&gt;
&lt;li&gt;What were the top 10 posts?&lt;/li&gt;
&lt;li&gt;Did you have any goals? Did you meet them?&lt;/li&gt;
&lt;li&gt;Anything else you want to share. Did you hit some milestone? Most web hosts or blog platforms? This is your chance for some meta-blogging about your blogging.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Mailing List
&lt;/h2&gt;

&lt;p&gt;If you have a &lt;a href="https://ardalis.com/tips"&gt;mailing list&lt;/a&gt;… If you don’t, you should start one. Literally every other way people can find you is through a platform over which you have no control. Email is your direct link to people who want to hear from you, and building that list of subscribers takes time. The sooner you start, the better. Here you might include things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of subscribers&lt;/li&gt;
&lt;li&gt;Number of emails sent&lt;/li&gt;
&lt;li&gt;Most popular (in terms of engagement) email(s) sent&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Podcast
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://www.weeklydevtips.com/"&gt;podcast&lt;/a&gt;, even if you don’t update it regularly, provides another way for you to share your ideas with the world. If you have one, consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of episodes published&lt;/li&gt;
&lt;li&gt;Number of downloads&lt;/li&gt;
&lt;li&gt;Number of guests (if it’s not 1 per episode)&lt;/li&gt;
&lt;li&gt;Anything new that happened with the show. New co-host. New platform. Etc.&lt;/li&gt;
&lt;li&gt;Recap your goals and if you met them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don’t forget to also list &lt;a href="https://ardalis.com/interviews"&gt;any guest appearances or interviews you made on other podcasts&lt;/a&gt;!&lt;/p&gt;

&lt;h2&gt;
  
  
  Your YouTube Channel
&lt;/h2&gt;

&lt;p&gt;Creating a &lt;a href="https://www.youtube.com/ardalis"&gt;YouTube&lt;/a&gt; channel takes about 5 minutes. If nothing else you can upload a video introducing yourself and what you’re into. Later on you might post helpful tips or other videos. In any case, if you have one, you might include these in your review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Number of videos published&lt;/li&gt;
&lt;li&gt;Channel subscribers&lt;/li&gt;
&lt;li&gt;Most popular video(s)&lt;/li&gt;
&lt;li&gt;Any milestones you hit, goals you had and how you did, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Twitch Stream
&lt;/h2&gt;

&lt;p&gt;Are you streaming &lt;a href="https://www.twitch.tv/ardalis"&gt;Twitch&lt;/a&gt; (or another platform)? If so, you can use this opportunity to share some of your experience with that.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total followers and/or subscribers&lt;/li&gt;
&lt;li&gt;How many streams did you do?&lt;/li&gt;
&lt;li&gt;How many hours did you stream?&lt;/li&gt;
&lt;li&gt;Any favorite events, clips, anecdotes, etc. you want to share?&lt;/li&gt;
&lt;li&gt;Any big changes? Did you start last year? Did you change anything major last year?&lt;/li&gt;
&lt;li&gt;Were you on anyone else’s streams?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your GitHub Contributions
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/ardalis"&gt;GitHub&lt;/a&gt; has become the place to go for open source software. If you’ve contributed or if you have your own projects, share what’s happened with them over the past year.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does your GitHub contributions graph look like for last year?&lt;/li&gt;
&lt;li&gt;What are your most popular repositories, in terms of stars or forks or both?&lt;/li&gt;
&lt;li&gt;How many repositories do you have, total?&lt;/li&gt;
&lt;li&gt;How many followers do you have?&lt;/li&gt;
&lt;li&gt;Did you have any goals? Did you meet them?&lt;/li&gt;
&lt;li&gt;What are your plans for this year?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Social Media
&lt;/h2&gt;

&lt;p&gt;Yes, I know GitHub and YouTube are kind of social media, too, but here I’m referring to the ones that are just about being social, like &lt;a href="https://twitter.com/ardalis"&gt;Twitter&lt;/a&gt;, &lt;a href="https://www.facebook.com/StevenAndrewSmith"&gt;Facebook&lt;/a&gt;, &lt;a href="https://www.instagram.com/ardalis_steve/"&gt;Instagram&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/stevenandrewsmith"&gt;LinkedIn&lt;/a&gt;, and whatever the kids are using these days.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did you start a new account anywhere? How do you like it? Are you going to keep using it?&lt;/li&gt;
&lt;li&gt;What are your current follower/fan/whatever stats?&lt;/li&gt;
&lt;li&gt;How many posts did you make last year?&lt;/li&gt;
&lt;li&gt;Did you have any goals and did you meet them?&lt;/li&gt;
&lt;li&gt;What are your thoughts about how you’ll use social media in general (and whichever specific ones you’re using) this year?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other Social Media
&lt;/h2&gt;

&lt;p&gt;Other sites you might include, along with relevant stats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/users/13729/ssmith"&gt;Stack Overflow&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/ardalis"&gt;Dev.to&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@ardalis"&gt;Medium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.reddit.com/user/ardalis/"&gt;Reddit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitLab&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Pluralsight (or wherever) Course(s)
&lt;/h2&gt;

&lt;p&gt;Did you publish any courses last year on &lt;a href="https://www.pluralsight.com/authors/steve-smith"&gt;Pluralsight&lt;/a&gt; or somewhere else? If so, recap them and how they’re doing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Courses published&lt;/li&gt;
&lt;li&gt;Goals and stats. Downloads, viewers, sales, whatever you have.&lt;/li&gt;
&lt;li&gt;Plans for the coming year&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Books
&lt;/h2&gt;

&lt;p&gt;Did you publish or contribute to any &lt;a href="https://ardalis.com/architecture-ebook"&gt;books&lt;/a&gt;? Recap here and link to them, or to the posts where you talked about them already.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Books published&lt;/li&gt;
&lt;li&gt;Sales/download stats, if you have any you want to share&lt;/li&gt;
&lt;li&gt;Reviews (count, stars, etc)&lt;/li&gt;
&lt;li&gt;Links to buy/download/review&lt;/li&gt;
&lt;li&gt;Status of any in-progress books&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Public Speaking
&lt;/h2&gt;

&lt;p&gt;You can break this up into separate categories for user groups and conferences if you’re a prolific speaker and that helps. If you’re not speaking at events, you can obviously skip this one but it’s certainly a good thing to try.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total events attended&lt;/li&gt;
&lt;li&gt;Total talks given&lt;/li&gt;
&lt;li&gt;Most popular or favorite session and why&lt;/li&gt;
&lt;li&gt;Planned speaking engagements for this year&lt;/li&gt;
&lt;li&gt;Anything you learned or feel like sharing about your experience as a speaker&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Travels
&lt;/h2&gt;

&lt;p&gt;Traveling is a goal for many of us, and this often dovetails nicely with speaking opportunities. But even if it was just a vacation you took somewhere, this is a good place to recap some of the new places you visited in the last year.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many states/countries/continents did you visit?&lt;/li&gt;
&lt;li&gt;What new (to you) places did you explore?&lt;/li&gt;
&lt;li&gt;Share any stats like total miles flown if you want. Be prepared to defend your carbon footprint…&lt;/li&gt;
&lt;li&gt;This is a great time to share a few photos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Work Environment
&lt;/h2&gt;

&lt;p&gt;Did your work area change dramatically last year in a way you want to share or remember? New office, new desk, new computer, etc? I don’t buy a new computer all that often, so when I do I often try to blog about it, and this is a good place to recap &lt;a href="https://ardalis.com/tools-used"&gt;your current tools used list&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What’s your office look like?&lt;/li&gt;
&lt;li&gt;What’s your desk setup look like?&lt;/li&gt;
&lt;li&gt;Link to your post describing your new desk/chair/computer/monitor/whatever&lt;/li&gt;
&lt;li&gt;Talk about how you like (or don’t) your setup and any plans you have to update/change it this year&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Tech
&lt;/h2&gt;

&lt;p&gt;If you got any new toys you’re especially excited about and think others would be interested in, that you didn’t already cover in your work environment, consider sharing here (ideally with links to your posts that already talk about these things). It’s easy for this to come off as bragging about all the things you can afford so try to focus on being helpful and sharing with the intent of helping others decide if (whatever) is something they would want to invest in.&lt;/p&gt;

&lt;p&gt;Some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phone&lt;/li&gt;
&lt;li&gt;Camera&lt;/li&gt;
&lt;li&gt;Stream Deck or similar&lt;/li&gt;
&lt;li&gt;Audio Equipment&lt;/li&gt;
&lt;li&gt;Laptop&lt;/li&gt;
&lt;li&gt;Desktop&lt;/li&gt;
&lt;li&gt;Tablet&lt;/li&gt;
&lt;li&gt;Car&lt;/li&gt;
&lt;li&gt;Other gadgets&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Job
&lt;/h2&gt;

&lt;p&gt;Whether you’re an employee or independent or a business owner, you may want to share some things about the actual work you do.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What did you do last year?&lt;/li&gt;
&lt;li&gt;Where did you work?&lt;/li&gt;
&lt;li&gt;Were there any big changes? New job? Promotion?&lt;/li&gt;
&lt;li&gt;How are things looking this year?&lt;/li&gt;
&lt;li&gt;Any metrics you can share? Most folks keep things like compensation private (or at least not out on the Internet) but if there are any public metrics you’re proud of related to your work, share them here.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your Life
&lt;/h2&gt;

&lt;p&gt;Another year of your life is in the books. What do you want to remember about it when you read this post in 5 or 10 or 20 years? Maybe you already post updates to some social media account, but this blog post will probably be easier for you to find, later.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Any major life events? Graduations, weddings, anniversaries, births, deaths?&lt;/li&gt;
&lt;li&gt;Personal accomplishments? Awards? New black belt in karate? Finally got your pilot license?&lt;/li&gt;
&lt;li&gt;Favorite things you did with friends or family (even if vague) that you want to be sure you make time to do again in the future&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;If you have other ideas, please share them in the comments and I’ll update this post to include them and credit you. If you use this list as an inspiration for your own year in review blog post, I’d love it if you’d link to this article from your post. Feel free to add your post in the comments below or to reply to or retweet this tweet with your own post:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Year in Review Post Checklist post&lt;br&gt;&lt;br&gt;
&lt;a href="https://t.co/z7aOMfcIDU"&gt;https://t.co/z7aOMfcIDU&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Steve "ardalis" Smith (&lt;a class="comment-mentioned-user" href="https://dev.to/ardalis"&gt;@ardalis&lt;/a&gt;
) &lt;a href="https://twitter.com/ardalis/status/1214268985119821826?ref_src=twsrc%5Etfw"&gt;January 6, 2020&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;



&lt;p&gt;Thanks and (assuming you’re most likely reading this in early January) happy new year!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://ardalis.com/year-in-review-post-checklist"&gt;Year in Review Post Checklist&lt;/a&gt; appeared first on &lt;a href="https://ardalis.com"&gt;ardalis&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>productivity</category>
      <category>career</category>
      <category>writing</category>
    </item>
    <item>
      <title>Be Humble and Kind</title>
      <dc:creator>Steve Smith</dc:creator>
      <pubDate>Mon, 28 Oct 2019 13:05:37 +0000</pubDate>
      <link>https://dev.to/ardalis/be-humble-and-kind-2b22</link>
      <guid>https://dev.to/ardalis/be-humble-and-kind-2b22</guid>
      <description>&lt;p&gt;&lt;em&gt;This originally went out just to my Weekly Dev Tips mailing list, but I got a lot of positive comments and requests to share it, so I’m publishing it here.&lt;/em&gt; &lt;a href="https://dev.to/tips"&gt;&lt;em&gt;Sign up for Weekly Dev Tips&lt;/em&gt;&lt;/a&gt; &lt;em&gt;to get a new tip in your inbox each Wednesday.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I’m not a big fan of country music (my wife is, however) but &lt;a href="https://www.google.com/search?q=humble+and+kind+lyrics&amp;amp;oq=humble+and+kind+lyrics"&gt;Tim McGraw’s Humble and Kind&lt;/a&gt; has it right. Don’t let success get to your head. You don’t know everything – be open to others’ input. You can disagree with others respectfully. Be kind when you feel the need to disagree or correct someone. Take extra care that your correction is actually helpful, especially if there’s a big power differential between you and the person you’re correcting, and especially if you’re doing it in public. Remember “ &lt;strong&gt;praise in public; criticize in private&lt;/strong&gt; ” when you’re in a position of authority. It’s good advice and will serve you well.&lt;/p&gt;

&lt;p&gt;Why am I writing this as a _dev tip _(if that’s not obvious)? Because being humble and kind is a part of being professional as much as it is a part of just being a good person, neighbor, coworker, and citizen. I’ve&lt;a href="https://ardalis.com/be-a-thankful-developer"&gt; written and published before on the value of being thankful.&lt;/a&gt; See also &lt;a href="https://weeklydevtips.com/episodes/013-fbd3d747"&gt;this podcast episode&lt;/a&gt;. This ties right into that. It requires a measure of empathy. Empathy involves allowing yourself to consider how another person experiences the world. If you’re able to experience empathy for someone, it’s very easy to be kind to them.  &lt;strong&gt;If you lack empathy, it’s easy for you to be a jerk.&lt;/strong&gt;  People don’t want more jerks in their lives – most of us know enough of them already.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So don’t be a jerk.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Professionally it’s obviously a good idea for you to not be a jerk to your boss. It’s probably a good idea not to be a jerk to your peers. It’s generally a good idea not to be a jerk in public, especially in public where things can be widely shared (with your boss, your customers, etc). But guess what? You really shouldn’t be a jerk in private, either. Not to your subordinates. Not to your spouse. Not to your friends. Not to your kids. Not even to strangers or when you think you can get away with it. Strive to be more humble, more kind, and more professional, when you can. And when you can’t, strive to at least take ownership of that rather than getting angry or defensive. It’s not easy, but  &lt;strong&gt;it’s one more thing that will make you a better professional software developer.&lt;/strong&gt;  And person.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://ardalis.com/be-humble-and-kind"&gt;Be Humble and Kind&lt;/a&gt; appeared first on &lt;a href="https://ardalis.com"&gt;ardalis&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>softwaredevelopment</category>
      <category>career</category>
      <category>mentoring</category>
    </item>
    <item>
      <title>Configure Different Implementations for Different Controllers in ConfigureServices</title>
      <dc:creator>Steve Smith</dc:creator>
      <pubDate>Wed, 09 Oct 2019 04:28:51 +0000</pubDate>
      <link>https://dev.to/ardalis/configure-different-implementations-for-different-controllers-in-configureservices-2n6h</link>
      <guid>https://dev.to/ardalis/configure-different-implementations-for-different-controllers-in-configureservices-2n6h</guid>
      <description>&lt;p&gt;You may find yourself in a position where you need to have two (or more) different implementations of the same interface within your ASP.NET Core application. This may be because your application is too big to allow you to fully replace one implementation with another all at once, so you’re rolling out the updates one type at a time. Let’s say the services in question relate to persistence, and you’re using some variation of the Repository pattern for the interface. You can easily create separate implementation-specific classes that implement your Repository interface – but how do you dynamically determine which endpoints in your system will use which implementations?&lt;/p&gt;

&lt;p&gt;Your basic ConfigureServices code for just wiring up a repository to a single implementation looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services.AddScoped(typeof(IAsyncRepository\&amp;lt;\&amp;gt;), typeof(EfRepository\&amp;lt;\&amp;gt;));
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You can see an example of this approach in the &lt;a href="https://github.com/dotnet-architecture/eShopOnWeb/blob/master/src/Web/Startup.cs"&gt;eShopOnWeb reference application&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using Different Services in Different Controllers
&lt;/h2&gt;

&lt;p&gt;The problem arises when you have multiple controllers and you want to use different services with each one. There are actually several ways you can address this problem. One approach assuming you’re using a generic repository is to vary your implementation with the type of the entity, rather than with the controller. For example, you could have one entity use an EfRepository while another uses a DapperRepository, like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// specify specific repo implementation types per entity services.AddScoped\&amp;lt;IAsyncRepository\&amp;lt;Customer\&amp;gt;, EfAsyncRepository\&amp;lt;Customer\&amp;gt;\&amp;gt;(); services.AddScoped\&amp;lt;IAsyncRepository\&amp;lt;Product\&amp;gt;, DapperProductRepository\&amp;gt;(x =\&amp;gt; new DapperProductRepository(Configuration.GetConnectionString("DefaultConnection")));
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;With this approach, everywhere in your application that you use a repository to fetch an entity, if that entity is a &lt;code&gt;Customer&lt;/code&gt; then you’ll use EF Core to get it, but if it’s a &lt;code&gt;Product&lt;/code&gt; then you’ll use Dapper to get it.&lt;/p&gt;

&lt;p&gt;This may be sufficient or perhaps preferable to configuring the services per Controller, but of course you can do that, too.&lt;/p&gt;

&lt;p&gt;To do so, add some variation of this code to ConfigureServices:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// specify specific repo implementation to use per controller services.AddScoped\&amp;lt;EfAsyncRepository\&amp;lt;Car\&amp;gt;\&amp;gt;(); services.AddScoped\&amp;lt;CarsController\&amp;gt;(x =\&amp;gt; new CarsController(x.GetRequiredService\&amp;lt;EfAsyncRepository\&amp;lt;Car\&amp;gt;\&amp;gt;()));
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now when the CarsController is accessed, it will specifically use the EF Repository (of Car) instead of whatever the default implementation might be for the generic repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For this to work, you need to add controllers as services using &lt;code&gt;services.AddMvc().AddControllersAsServices();&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can see the code and &lt;a href="https://github.com/ardalis/RepoMultiImplementation"&gt;download and run the sample from its GitHub repo here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://ardalis.com/configure-different-implementations-for-different-controllers-in-configureservices"&gt;Configure Different Implementations for Different Controllers in ConfigureServices&lt;/a&gt; appeared first on &lt;a href="https://ardalis.com"&gt;ardalis&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>aspnetcore</category>
      <category>dependencyinjection</category>
      <category>di</category>
    </item>
    <item>
      <title>Attacking Technical Debt</title>
      <dc:creator>Steve Smith</dc:creator>
      <pubDate>Wed, 18 Sep 2019 01:07:52 +0000</pubDate>
      <link>https://dev.to/ardalis/attacking-technical-debt-2k7g</link>
      <guid>https://dev.to/ardalis/attacking-technical-debt-2k7g</guid>
      <description>&lt;p&gt;&lt;a href="https://deviq.com/technical-debt/"&gt;Technical Debt&lt;/a&gt; is a metaphor for shortcuts and hacks in software that make it more difficult to change and maintain than it could be with an optimal design. Many applications have accumulated a large amount of technical debt, and figuring out how to deal with it is a fairly common challenge for many developers, especially senior developers starting new contracts or jobs at companies that need help with their legacy code and its huge technical debt.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, how should you approach paying down technical debt?
&lt;/h2&gt;

&lt;p&gt;In some cases, you shouldn’t. It may make sense to rewrite the app. Declare “technical bankruptcy.” This should be rare, and it’s likely not a decision a developer is going to be making. Let’s assume that’s not an option (or not the decision that was made) in this scenario. Now what?&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop the bleeding
&lt;/h2&gt;

&lt;p&gt;Step one is to stop the bleeding. If you’re a doctor and you have a patient who is bleeding profusely, the first thing you need to do is &lt;strong&gt;stop the bleeding&lt;/strong&gt; , not perform a bunch of other diagnostics or gather medical history or get a CT scan done. Stopping the bleeding buys you time to assess the situation and correct things without things continuing to get worse.&lt;/p&gt;

&lt;p&gt;Going back to the debt metaphor, if you’re advising someone on how to get out of debt, and their biggest problem is they’re constantly outspending their income using credit cards, the first thing you do is &lt;strong&gt;cut up the credit cards&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;One last metaphor for you. If you’re in a deep hole and are wondering how you’re going to get out, the first thing to do is to stop &lt;strong&gt;digging yourself deeper into the ground&lt;/strong&gt;. You’re only making the future problem harder to solve.&lt;/p&gt;

&lt;p&gt;What does this look like in terms of your software project? Technical debt increases when you add untested, difficult to test, tightly coupled code (among other things). So, step one is to stop doing that. New code will follow standards. It will be tested. It will be well-factored. Even updates to large legacy codebases can be written using new classes that can be well-designed. &lt;a href="https://weeklydevtips.com/episodes/015"&gt;Maintain legacy code by adding new code&lt;/a&gt;, not by changing existing code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Refactor, while adding value
&lt;/h2&gt;

&lt;p&gt;Getting rid of technical debt is what refactoring is all about. There are many specific techniques you can use and code smells you can identify that contribute to technical debt. I’ve written three courses on refactoring that you may find useful when you get to this step:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.pluralsight.com/courses/refactoring-csharp-developers"&gt;Refactoring for C# Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pluralsight.com/courses/microsoft-azure-code-refactoring"&gt;Microsoft Azure Developer: Refactoring Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pluralsight.com/courses/refactoring-fundamentals"&gt;Refactoring Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One thing that’s common to all of them is the idea of &lt;em&gt;when should you refactor&lt;/em&gt;? The approach I recommend is to refactor in the course of making necessary updates to the code – fixing bugs or adding new features. Customers and stakeholders expect development teams to make changes that they can see and appreciate. If you try to just stop delivering value and spend an extended period of time “cleaning up” the code, you’re sending a very dangerous message to stakeholders. What’s more, you’re not necessarily focusing your efforts where they matter most and will have the most immediate return on investment.&lt;/p&gt;

&lt;p&gt;When you refactor as you add value, you’re making the code that you’re already working on better. The benefits of your refactoring efforts are felt immediately. And, typically, the areas of the code that you’re working on at any point in time are likely to be worked on again in the near future. Bugs and features tend to affect certain areas of the codebase more than others, not to be evenly distributed. If you take a broad, sweeping approach to your refactoring efforts, odds are good you’re going to be cleaning up code that you otherwise were never going to need to touch, which doesn’t add much value (it might be a complete waste of time and worse, might break something that would have been fine if you’d let it be).&lt;/p&gt;

&lt;h2&gt;
  
  
  Measure and Keep Quality Increasing
&lt;/h2&gt;

&lt;p&gt;Once you decide to stop making things worse and start following the Boy Scout Rule and making the code at least a little bit better with each new pull request, you’re on the right track. Now’s a good time to monitor the quality of the application using whatever metrics you find valuable. Some metrics I use include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/tag/code-coverage"&gt;Code Test Coverage&lt;/a&gt; – Keep it trending upward over time&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ardalis.com/measuring-aggregate-complexity-in-software-applications"&gt;Aggregate Complexity&lt;/a&gt; – Keep it trending toward zero&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ndepend.com/"&gt;NDepend&lt;/a&gt; Technical Debt – Keep it trending down&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also use some of the metrics available in Visual Studio, or &lt;a href="https://www.sonarqube.org"&gt;SonarQube&lt;/a&gt;. But whatever metrics you pick, you want to be able to look at a trend over time of your code’s quality using some kind of metric to give you confidence that you are, in fact, moving things in the right direction.&lt;/p&gt;

&lt;p&gt;Other things you may want to track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total passing tests (more is better)&lt;/li&gt;
&lt;li&gt;Frequency of deployments (more often is better)&lt;/li&gt;
&lt;li&gt;Cycle time for new work (faster is better)&lt;/li&gt;
&lt;li&gt;Frequency of bug reports&lt;/li&gt;
&lt;li&gt;Frequency of deployment rollbacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don’t need to track all of these things, but if you’re going to go to the trouble of making a concerted effort to clean up your code, it’s worth identifying up front how you’re going to measure your progress. What metrics are valuable to your team or your stakeholders? How can you move them in the right direction with your efforts? That’s how you’ll know if you’re on the right track.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;p&gt;Have you gone through a major refactoring effort? What worked and what didn’t? Share your thoughts below. What about metrics? How did you know when you were done? Or that it was “better”? Were there certain metrics you used to guide your effort? Please share. Thanks!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://ardalis.com/attacking-technical-debt"&gt;Attacking Technical Debt&lt;/a&gt; appeared first on &lt;a href="https://ardalis.com"&gt;ardalis&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>cleancode</category>
      <category>codequality</category>
      <category>refactoring</category>
    </item>
  </channel>
</rss>
