Become a Better Developer with me!

Master software development and your career

Ardalis is Steve Smith

Ardalis is Steve Smith

Proven Expertise

Steve Smith has been recognized by Microsoft as a Most Valuable Professional (MVP) since 2002, and was a member of Microsoft’s Regional Director program for 10 years. He is also a founding member of the ASPInsiders, an external advisory group for the ASP.NET product team. As Microsoft launches their new version of ASP.NET, he has been contributing to the product and authoring many sections of the official documentation on GitHub.


How can I help you

I offer various different professional services that includes private training for corporate customers, accelerate your project with a bit of mentoring or even a home like inspection for your code and a software application.

Mentoring

You or your team can benefit from Steve’s experience with ASP.NET using SOLID development principles, proven design patterns, and Domain-Driven Design (DDD).

“Our team could spend many hours with other developers figuring out a problem or best practice, or we could set up a meeting with Steve.”

[Steve] is able to quickly understand the problems we are trying to solve and then works with us to solve the problems.”

Read more…

Online Training

Steve has published many courses on Pluralsight, covering topics from N-Tier architecture to Refactoring to Domain-Driven Design. You can also follow Steve on YouTube for more online video content. See what others say about Steve’s courses.

Assessments

Quickly learn where your application could be improved with an application assessment from Steve. An assessment will reveal “low hanging fruit” that will add the greatest value for the least effort, and can identify security and performance issues as well as maintainability anti-patterns and technical debt. Read more…

Workshops

Look for Steve’s workshops on software craftsmanship, ASP.NET 5, and Domain-Driven Design at an upcoming conference, or schedule one for your team. Contact Steve for more details.

Speaking Engagements

Steve is a regular speaker at tech conferences like Codemash, Stir Trek, DevIntersection, and more. You can find some of his past presentations on SlideShare and SpeakerDeck.

Watch Steve discuss Software Quality on Channel 9 with Seth Juarez:

Interviews and Podcasts

Listen to interviews with Steve Smith on various industry shows and podcasts.

Latest Articles



When it's time to build that big new system to replace the aging old one, consider Gall's Law and the benefit of frequent feedback and evolutionary development. Gall's Law states: A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a…

Keep Reading →


My blog is hosted on GitHub using GatsbyJS and Netlify. One nice thing about this setup is that I have complete control over my content, and it's all version controlled and backed up both on GitHub and on various machines where I've cloned the repo. Along with the text content, almost all of the images associated with my content are in the same repository. Sometimes they're hi-res screenshots…

Keep Reading →


When you're writing unit tests for a method, it's a good idea to test various failure conditions ("sad paths") in addition to testing the expected, everything is working condition ("happy path"). In particular, if you have a method that may throw exceptions, especially if they're custom domain exceptions, you should be sure you're testing this behavior. Another common source of exceptions is guard…

Keep Reading →


I've been using docker-compose quite a bit lately for a distributed app that includes 3 front end apps, 2 databases, RabbitMQ, and PaperCut (test email server). For the most part, this works great as a way to encapsulate all of these processes and run them in a containerized manner so that everything works together. But building this whole solution is pretty slow, by default. When you work with…

Keep Reading →


I'm using the command line to run build scripts and other tasks more and more, especially now that .NET Core / .NET 5 has the CLI and things like and are in heavy use. When you're running a single command, like or it usually tells you about how long it took to run. But when you have a scripted build that involves multiple steps, it's often nice to be able to see how long the whole thing took…

Keep Reading →


I'm working on a distributed system demo that relies on RabbitMQ for its inter-app messaging. Not wanting to force users to actually have to install RabbitMQ, I'm using Docker to run it. It's really easy to do this. If you've never tried to launch RabbitMQ, complete with its management web app, from a docker command line, try this: Once you've run that, open up localhost:15672 and you should be…

Keep Reading →


Early in my career I was taught this lesson by one of my clients. We were building an application for internal use at the company which would run on a dedicated server sitting in a server room in the same building as its users. I had concerns that some approach we were taking was inefficient. My client (and mentor at the time) explained: Hardware hides many sins. What he meant was, it didn't…

Keep Reading →


A client I'm working with wanted a set of initial decisions and questions their team should address as they begin a new project. I did a bit of research, thinking surely such a list must exist already, but I didn't find one I liked. So I made an open source one and put it on GitHub. If you just want to jump to it now, check out the Ultimate New Software Project Decision Checklist. In coming up…

Keep Reading →


A recent discussion on the devBetter.com private server spurred this article. One of the members was trying to work out a fairly complex design involving many different parts, and the idea of trying to model all of this as a set of database tables with primary key and foreign key relationships was daunting. The sheer number of many-to-many and one-to-many relationships along with recursive and…

Keep Reading →


Two terms that come up frequently when discussing software development in .NET and C# are DTO and POCO. Some developers use these terms interchangeably. So, what is the difference between a DTO and a POCO? First, let's define each term. Data Transfer Object (DTO) A DTO is a "Data Transfer Object". It's an object whose purpose is to transfer data. By definition, a DTO should only contain data, not…

Keep Reading →


Ardalis

Copyright © 2021