CINXE.COM
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="ie=edge"/><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/><meta name="generator" content="Gatsby 4.24.4"/><meta data-react-helmet="true" name="description" content="Steve is an experienced software architect and trainer, focusing currently on ASP.NET Core and Domain-Driven Design."/><meta data-react-helmet="true" name="theme-color" content="#fff"/><meta data-react-helmet="true" property="og:type" content="business.business"/><meta data-react-helmet="true" property="og:title" content="Ardalis is Steve Smith - ardalis"/><meta data-react-helmet="true" property="og:url" content="/"/><meta data-react-helmet="true" property="og:image" content="/img/og-image.jpg"/><style data-href="/styles.eb8fec05cba5de708da7.css" data-identity="gatsby-global-css">@import url(https://fonts.googleapis.com/css?family=Open+Sans:300,400);pre[class*=language-].line-numbers{counter-reset:linenumber;padding-left:3.8em;position:relative}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{border-right:1px solid #999;font-size:100%;left:-3.8em;letter-spacing:-1px;pointer-events:none;position:absolute;top:0;-webkit-user-select:none;user-select:none;width:3em}.line-numbers-rows>span{counter-increment:linenumber;display:block}.line-numbers-rows>span:before{color:#999;content:counter(linenumber);display:block;padding-right:.8em;text-align:right}.command-line-prompt{border-right:1px solid #999;display:block;float:left;font-size:100%;letter-spacing:-1px;margin-right:1em;pointer-events:none;text-align:right;-webkit-user-select:none;user-select:none}.command-line-prompt>span:before{content:" ";display:block;opacity:.7;padding-right:.8em}.command-line-prompt>span[data-user]:before{content:"[" attr(data-user) "@" attr(data-host) "] $"}.command-line-prompt>span[data-user=root]:before{content:"[" attr(data-user) "@" attr(data-host) "] #"}.command-line-prompt>span[data-prompt]:before{content:attr(data-prompt)}.command-line-prompt>span[data-continuation-prompt]:before{content:attr(data-continuation-prompt)}.command-line span.token.output{opacity:.7}code[class*=language-],pre[class*=language-]{word-wrap:normal;background:none;color:#f8f8f2;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;line-height:1.5;text-shadow:0 1px rgba(0,0,0,.3)}pre[class*=language-]{border-radius:.3em;padding:1em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#8292a2}.token.punctuation{color:#f8f8f2}.token.namespace{opacity:.7}.token.constant,.token.deleted,.token.property,.token.symbol,.token.tag{color:#f92672}.token.boolean,.token.number{color:#ae81ff}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#a6e22e}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url,.token.variable{color:#f8f8f2}.token.atrule,.token.attr-value,.token.class-name,.token.function{color:#e6db74}.token.keyword{color:#66d9ef}.token.important,.token.regex{color:#fd971f}.token.bold,.token.important{font-weight:700}.token.entity{cursor:help}.badgescard,.firstinfo{align-items:center;display:flex;justify-content:center}.container{background-color:#fff;z-index:10}.content-card{-webkit-animation:animatop .9s cubic-bezier(.425,1.14,.47,1.125) forwards;animation:animatop .9s cubic-bezier(.425,1.14,.47,1.125) forwards;position:relative}.card{border-radius:3px;box-shadow:0 10px 20px rgba(0,0,0,.2);font-size:18px;min-height:100px;overflow:hidden;padding:20px;width:700px}.card:after{-webkit-animation:rotatemagic .75s cubic-bezier(.425,1.04,.47,1.105) 1s both;animation:rotatemagic .75s cubic-bezier(.425,1.04,.47,1.105) 1s both;background:#3571b8;content:"";display:block;height:300px;position:absolute;width:190px}.card-sidebar{background-color:#fff;border-radius:3px;font-size:15px;left:0;margin-top:-4%;min-height:100px;overflow:hidden;padding:10px;position:relative;width:400px!important}.card-sidebar:after{-webkit-animation:rotatemagic .75s cubic-bezier(.425,1.04,.47,1.105) 1s both;animation:rotatemagic .75s cubic-bezier(.425,1.04,.47,1.105) 1s both;background:#3571b8;content:"";display:block;height:300px;position:absolute;width:190px}.tile.is-child{width:100%}.tile:not(.is-child){display:flex;width:100%}@media only screen and (max-width:1024px){.card{display:none}.card-sidebar,.recent-post{width:100%!important}.twitter-timeline{margin-left:2%!important;width:600px!important}.blog-list-item .featured-thumbnail{margin:0 0 1em;text-align:center;width:100%}.blog-list-item header{display:block;width:800px!important}}@media only screen and (max-width:480px){.card{display:none}.card-sidebar{background-color:#fff;border-radius:3px;font-size:12px;left:0;min-height:180px;overflow:hidden;padding:0;position:relative;width:340px!important}.card-sidebar:after{-webkit-animation:rotatemagic .75s cubic-bezier(.425,1.04,.47,1.105) 1s both;animation:rotatemagic .75s cubic-bezier(.425,1.04,.47,1.105) 1s both;background:#3571b8;content:"";display:block;height:240px;position:absolute;width:150px}.sidebar{left:50%!important;margin:0!important;visibility:collapse;width:380px!important}.tile:not(.is-child){display:block;width:100%}.recent-post{width:320px!important}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding-bottom:0!important;padding-left:0!important;padding-right:0!important;padding-top:0}.MuiButton-root{margin-left:-5%!important;margin-top:5%!important}.MuiOutlinedInput-input{padding:14.5px 10px!important;width:280px!important}}@media only screen and (min-width:320px){.MuiOutlinedInput-input{padding:14.5px 10px!important;width:250px!important}}.sidebar{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(43,37,35,.1),0 0 0 1px rgba(43,37,35,.02);color:#4a4a4a;display:block;left:50%;padding-top:1.25rem;position:absolute;-webkit-transform:translate(-50%);transform:translate(-50%);z-index:0}.sidebar,ul li:before{font-weight:400;line-height:20px}.sidebar,h2,ul li:before{float:none;list-style:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIlJREFUeNpiYCATMKILmBbuMABSAUA84XS/xwdcGpmwiO0H4noQDTREgBSNMGCATzM2jYXEaGbEZhpQYQKQmo8kdAGIHZH9jNWpQAULgFQims3rifUjyBaSQhUWJaDQhfntA5rfccYjuiaQ/y4QE494NRHyI05NIMCCRcwRmuQWADU9YKA2AAgwANXjLnb5SuGCAAAAAElFTkSuQmCC);padding-right:.5em;position:relative;text-decoration:none}.sidebar,h2{font-weight:700;line-height:30px}.twitter-timeline{margin-left:2%!important}.firstinfo{flex-direction:row;padding:0;position:relative;z-index:2}.firstinfo img{border-radius:50%;height:120px;width:120px}.firstinfo .profileinfo{padding:0 10px 0 0}.firstinfo .profileinfo h1{font-size:1.8em}.firstinfo .profileinfo h3{color:#3571b8;font-size:1.2em;font-style:italic}.firstinfo .profileinfo p.bio{color:#5a5a5a;font-style:normal;line-height:1.2;padding:0}@-webkit-keyframes animatop{0%{bottom:-500px;opacity:0}to{bottom:0;opacity:1}}@keyframes animatop{0%{bottom:-500px;opacity:0}to{bottom:0;opacity:1}}@-webkit-keyframes animainfos{0%{bottom:10px}to{bottom:-42px}}@keyframes animainfos{0%{bottom:10px}to{bottom:-42px}}@-webkit-keyframes rotatemagic{0%{left:-253px;opacity:0;top:-24px;-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{left:-78px;top:-24px;-webkit-transform:rotate(-30deg);transform:rotate(-30deg)}}@keyframes rotatemagic{0%{left:-253px;opacity:0;top:-24px;-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{left:-78px;top:-24px;-webkit-transform:rotate(-30deg);transform:rotate(-30deg)}}.message-body{border-color:#5bc0de!important;border-radius:4px!important;border-style:solid;border-width:0 0 0 6px!important;font-size:1.7em}cite{color:#5bc0de!important}form input{border:2px;border-radius:6px;box-shadow:0 4px 1px rgba(0,0,0,.1);display:block;font-family:Merriweather,sans-serif;font-size:1.5em;margin-top:.5em;outline:0;padding:.7em;resize:none;width:60%}.form-control input:focus{background-color:#ffdae8}.section{padding:.8rem 1.5rem!important}.box{box-shadow:none!important}.navbar{font-size:1.2em;font-variant:unset;font-weight:600;min-height:5em}.recent-post{align-items:center;display:block;font-size:1em;margin-left:13px;width:340px}.recent-post,ul li:before{float:none;font-weight:400;left:3%;line-height:30px;list-style:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIlJREFUeNpiYCATMKILmBbuMABSAUA84XS/xwdcGpmwiO0H4noQDTREgBSNMGCATzM2jYXEaGbEZhpQYQKQmo8kdAGIHZH9jNWpQAULgFQims3rifUjyBaSQhUWJaDQhfntA5rfccYjuiaQ/y4QE494NRHyI05NIMCCRcwRmuQWADU9YKA2AAgwANXjLnb5SuGCAAAAAElFTkSuQmCC);padding-right:.5em;position:relative;text-decoration:none}@media print,screen and (min-width:769px){.column.is-12{flex:none;width:100%}}.subtitle{font-size:1rem!important;padding-top:4px}@media screen and (max-width:768px){.blog-list-item .featured-thumbnail{margin:0 0 1em;max-width:100%;text-align:center}.blog-list-item header{display:block;width:360px!important}}@media screen and (min-width:1024px){.navbar{min-height:4.25rem!important}}pre{font-family:Courier\ 10 Pitch,Courier,monospace;white-space:pre}code,pre{font-size:95%;line-height:140%;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-o-pre-wrap}code{background:#faf8f0;font-family:Monaco,Consolas,Andale Mono,DejaVu Sans Mono,monospace}#content code{border:1px solid #bebab0;display:block;padding:.5em 1em}body{margin:0;overflow:hidden;padding:0;width:100vw}.content .taglist{line-height:.5px!important;padding:2px!important}.MuiButton-root{height:55px!important;left:5%!important}.MuiOutlinedInput-input{width:300px!important}.MuiButton-containedPrimary{background-color:#3571b8!important;color:#fff}.form{left:55%!important;padding:10px!important}.content .catlist{align-items:center;display:block;flex-wrap:wrap;justify-content:left;list-style:none;margin:1.5rem 1.5rem 0 0;word-break:break-word!important}.gatsby-highlight-code-line{background-color:#feb;border-left:.25em solid #f99;display:block;margin-left:-1em;margin-right:-1em;padding-left:.75em;padding-right:1em}.gatsby-highlight pre[class*=language-].line-numbers{overflow:initial;padding:0 0 0 2.8em}.googletextbox{font-size:1em;padding:.1em}code[class*=language-],pre[class*=language-]{color:#9efeff;direction:ltr;font-family:Operator Mono,Fira Code,Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:17px;font-weight:400;-webkit-hyphens:none;hyphens:none;letter-spacing:.5px;line-height:25px;-o-tab-size:4;tab-size:4;text-align:left;text-shadow:0 1px #222245;white-space:pre;word-break:normal;word-spacing:normal}code[class*=language-] ::-moz-selection,code[class*=language-] ::selection,code[class*=language-]::-moz-selection,code[class*=language-]::selection,pre[class*=language-] ::-moz-selection,pre[class*=language-] ::selection,pre[class*=language-]::-moz-selection,pre[class*=language-]::selection{background:#a599e9;color:inherit}pre[class*=language-]{margin:.5em 0;overflow:auto;padding:2em}:not(pre)>code[class*=language-],pre[class*=language-]{background:#1e1e3f}:not(pre)>code[class*=language-]{border-radius:.3em;padding:.1em}.token{font-weight:400}.token.cdata,.token.comment,.token.prolog{color:#b362ff}.token.atrule,.token.delimiter,.token.important,.token.keyword,.token.selector{color:#ff9d00}.token.attr-name,.token.operator{color:#ffb454}.token.punctuation{color:#fff}.token.boolean{color:#ff628c}.token.builtin,.token.doctype,.token.tag,.token.tag .punctuation{color:#ff9d00}.token.entity,.token.symbol{color:#6897bb}.token.constant,.token.number,.token.property,.token.variable{color:#ff628c}.token.char,.token.string{color:#a5ff90}.token.attr-value,.token.attr-value .punctuation{color:#a5c261}.token.attr-value .punctuation:first-child{color:#a9b7c6}.token.url{color:#287bde;text-decoration:underline}.token.function{color:#fad000}.token.regex{background:#364135}.token.bold{font-weight:700}.token.italic{font-style:italic}.token.inserted{background:#0f0}.token.deleted{background:#ff000d}code.language-css .token.property,code.language-css .token.property+.token.punctuation{color:#a9b7c6}code.language-css .token.id,code.language-css .token.selector>.token.attribute,code.language-css .token.selector>.token.class,code.language-css .token.selector>.token.pseudo-class,code.language-css .token.selector>.token.pseudo-element{color:#ffc66d}.token.class-name{color:#fb94ff}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{background:none}pre .line-highlight,pre .line-highlight.line-highlight,pre>code.line-highlight{background:linear-gradient(90deg,rgba(179,98,255,.17),transparent);margin-top:36px}pre .line-highlight:before,pre .line-highlight[data-end]:after,pre>code.line-highlight:before,pre>code.line-highlight[data-end]:after{content:""}pre code{padding-left:0}.navbar .navbar-menu{box-shadow:none!important}.content .taglist{align-items:center;display:flex;flex-wrap:wrap;justify-content:left;list-style:none;margin:1.5rem 1.5rem 0 0}.content .taglist li{margin-bottom:1.5rem;margin-top:0;padding:0 2rem 1rem 0}.full-width-image-container{left:50%;margin:2em -50vw;position:relative;right:50%}.full-width-image,.full-width-image-container{align-items:center;background-position:bottom;background-size:cover;display:flex;height:400px;justify-content:center;width:100vw}.btn{background-color:#fff;border-radius:.25rem;box-shadow:inset 0 0 0 2px #3571b8;color:#000;display:inline-block;font-size:18px;font-size:1rem;font-weight:700;line-height:1.25;padding:12px 16px 10px;text-align:center;text-decoration:none;transition:all .15s ease}.btn:hover{background-color:#3571b8;color:#fff}.margin-top-0{margin-top:0!important}.navbar-item .icon{color:#2b2523}.icon svg{fill:currentColor;height:1.5rem;width:1.5rem}.navbar-brand .navbar-item.logo{padding:0 1rem}footer.footer{background-color:transparent;padding:3rem 0 0}.social{padding:2em}.social a{background-color:#f5f5f5;border-radius:1em;display:inline;height:1em;margin:.5em;padding:.5em .5em .3em;vertical-align:middle;width:1em}.blog-list-item.is-featured{background-color:#2989d879}.blog-list-item header{display:flex;margin-bottom:1em}.blog-list-item .featured-thumbnail{flex-basis:100%;margin:0}/*! bulma.io v0.8.2 | MIT License | github.com/jgthms/bulma */@-webkit-keyframes spinAround{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spinAround{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.button{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.box:not(:last-child),.content:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.subtitle:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.button,.input,.textarea{align-items:center;-moz-appearance:none;-webkit-appearance:none;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding:calc(.5em - 1px) calc(.75em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.input:active,.input:focus,.is-active.button,.is-active.input,.is-active.textarea,.textarea:active,.textarea:focus{outline:none}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */body,h1,h2,h3,h4,html,li,p,textarea,ul{margin:0;padding:0}h1,h2,h3,h4{font-size:100%;font-weight:400}ul{list-style:none}button,input,textarea{margin:0}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}html{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;background-color:#fff;font-size:16px;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility}article,footer,header,section{display:block}body,button,input,textarea{font-family:BlinkMacSystemFont,-apple-system,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,Helvetica,Arial,sans-serif}code{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#333;font-size:1em;font-weight:400;line-height:1.5}a{color:#3273dc;cursor:pointer}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#f14668;font-size:.875em;font-weight:400;padding:.25em .5em}img{height:auto;max-width:100%}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}@media screen and (max-width:768px){.is-size-3-mobile{font-size:2rem!important}.is-size-5-mobile{font-size:1.25rem!important}}@media print,screen and (min-width:769px){.is-size-2-tablet{font-size:2.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-4-widescreen{font-size:1.5rem!important}}.has-text-centered{text-align:center!important}.has-background-black{background-color:#2b2523!important}.has-text-primary{color:#2b2523!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#0f0d0c!important}.has-text-white-ter{color:#f5f5f5!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-block{display:block!important}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(43,37,35,.1),0 0 0 1px rgba(43,37,35,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(43,37,35,.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(43,37,35,.2),0 0 0 1px #3273dc}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding:calc(.5em - 1px) 1em;text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button:hover{border-color:#b5b5b5;color:#363636}.button:focus{border-color:#3273dc;color:#363636}.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-link{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link:hover{background-color:#276cda}.button.is-link:focus,.button.is-link:hover{border-color:transparent;color:#fff}.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#2366d1;border-color:transparent;color:#fff}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (min-width:1216px){.container{max-width:1152px}}@media screen and (min-width:1408px){.container{max-width:1344px}}.content li+li{margin-top:.25em}.content p:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4{color:#363636;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.icon{align-items:center;display:inline-flex;height:1.5rem;justify-content:center;width:1.5rem}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.notification{background-color:#f5f5f5;border-radius:4px;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code{background:#fff}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-link{background-color:#3273dc;color:#fff}@-webkit-keyframes moveIndeterminate{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{0%{background-position:200% 0}to{background-position:-200% 0}}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tag:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#4a4a4a;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body).is-link{background-color:#3273dc;color:#fff}.tag:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle span,.title span{font-weight:inherit}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-4{font-size:1.5rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.input,.textarea{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.textarea:hover{border-color:#b5b5b5}.input:active,.input:focus,.is-active.input,.is-active.textarea,.textarea:active,.textarea:focus{border-color:#3273dc;box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(43,37,35,.05);max-width:100%;width:100%}.is-link.input,.is-link.textarea{border-color:#3273dc}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.field:not(:last-child){margin-bottom:.75rem}.control{box-sizing:border-box;clear:both;font-size:1rem;text-align:left}.card,.control{position:relative}.card{background-color:#fff;box-shadow:0 .5em 1em -.125em rgba(43,37,35,.1),0 0 0 1px rgba(43,37,35,.02);color:#4a4a4a;max-width:100%}.menu,.message{font-size:1rem}.message{background-color:#f5f5f5;border-radius:4px}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-link{background-color:#eef3fc}.message.is-link .message-body{border-color:#3273dc;color:#2160c4}.message-body{border:solid #dbdbdb;border-radius:4px;border-width:0 0 0 4px;color:#4a4a4a;padding:1.25em 1.5em}.message-body code,.navbar{background-color:#fff}.navbar{min-height:3.25rem;position:relative;z-index:30}.navbar.is-link{background-color:#3273dc;color:#fff}.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#2366d1;color:#fff}}.navbar>.container{width:100%}.navbar-brand,.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem}.navbar-brand{flex-shrink:0}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;margin-left:auto;position:relative;width:3.25rem}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;-webkit-transform-origin:center;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,-webkit-transform;transition-property:background-color,opacity,transform;transition-property:background-color,opacity,transform,-webkit-transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:first-child{top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:first-child{-webkit-transform:translateY(5px) rotate(45deg);transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:translateY(-5px) rotate(-45deg);transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item{color:#4a4a4a;display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}a.navbar-item{cursor:pointer}a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:#fafafa;color:#3273dc}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item{align-items:center;display:flex}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(43,37,35,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar-burger{display:none}.navbar-item{align-items:center;display:flex}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-left:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-right:-.75rem}a.navbar-item.is-active{color:#2b2523}a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}@media print,screen and (min-width:769px){.column.is-offset-1{margin-left:8.33333%}.column.is-4{flex:none;width:33.33333%}.column.is-6{flex:none;width:50%}.column.is-7{flex:none;width:58.33333%}.column.is-10{flex:none;width:83.33333%}.column.is-12{flex:none;width:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:.75rem}.columns.is-multiline{flex-wrap:wrap}@media print,screen and (min-width:769px){.columns:not(.is-desktop){display:flex}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media print,screen and (min-width:769px){.tile:not(.is-child){display:flex}.tile.is-4{flex:none;width:33.33333%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-10{flex:none;width:83.33333%}.tile.is-12{flex:none;width:100%}}.section{padding:3rem 1.5rem}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}@media screen and (min-width:769px) and (max-width:1023px){.blog-list-item .featured-thumbnail{flex-basis:50%}}@media screen and (max-width:768px){.blog-list-item header{display:block}.blog-list-item .featured-thumbnail{margin:0 0 1em;max-width:70%;text-align:center}}a{text-decoration:none}</style><script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl+'';f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer', 'GTM-NVBMVX8');</script><title data-react-helmet="true">Ardalis is Steve Smith - ardalis</title><link data-react-helmet="true" rel="alternate" type="application/rss+xml" title="RSS Feed for Ardalis" href="/rss.xml/"/><link data-react-helmet="true" rel="apple-touch-icon" sizes="180x180" href="/img/apple-touch-icon.png"/><link data-react-helmet="true" rel="icon" type="image/png" href="/img/favicon-32x32.png" sizes="32x32"/><link data-react-helmet="true" rel="icon" type="image/png" href="/img/favicon-16x16.png" sizes="16x16"/><link data-react-helmet="true" rel="mask-icon" href="/img/safari-pinned-tab.svg" color="#ff4400"/><link rel="sitemap" type="application/xml" href="/sitemap/sitemap-index.xml"/><style id="jss-server-side"></style></head><body><noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NVBMVX8" height="0" width="0" style="display: none; visibility: hidden" aria-hidden="true"></iframe></noscript><div id="___gatsby"><div style="outline:none" tabindex="-1" id="gatsby-focus-wrapper"><div><nav class="navbar is-transparent" role="navigation" aria-label="main-navigation"><div class="container"><div class="navbar-brand"><a aria-current="page" class="navbar-item" title="Logo" href="/"><img src="data:image/png;base64,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" alt="Ardalis" style="width:150px"/></a><div class="navbar-burger burger " data-target="navMenu" role="button" tabindex="0"><span></span><span></span><span></span></div></div><div id="navMenu" class="navbar-menu "><div class="navbar-start has-text-centered"><a class="navbar-item" href="/blog">Blog</a><a class="navbar-item" href="/training-classes">Training</a><a class="navbar-item" href="/mentoring">Mentoring</a><a class="navbar-item" href="/tips">Subscribe</a><a class="navbar-item" href="/interviews">Interviews</a><a class="navbar-item" href="/books">Books</a><a class="navbar-item" href="/tools-used">Tools Used</a><a class="navbar-item" href="/contact-us">Contact</a></div><div class="navbar-end has-text-centered"><a class="navbar-item" href="https://www.facebook.com/StevenAndrewSmith" target="_blank" rel="noopener noreferrer"><span class="icon"><img src="data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+RmFjZWJvb2sgaWNvbjwvdGl0bGU+PHBhdGggZD0iTTIyLjY3NiAwSDEuMzI0Qy41OTMgMCAwIC41OTMgMCAxLjMyNHYyMS4zNTJDMCAyMy40MDguNTkzIDI0IDEuMzI0IDI0aDExLjQ5NHYtOS4yOTRIOS42ODl2LTMuNjIxaDMuMTI5VjguNDFjMC0zLjA5OSAxLjg5NC00Ljc4NSA0LjY1OS00Ljc4NSAxLjMyNSAwIDIuNDY0LjA5NyAyLjc5Ni4xNDF2My4yNGgtMS45MjFjLTEuNSAwLTEuNzkyLjcyMS0xLjc5MiAxLjc3MXYyLjMxMWgzLjU4NGwtLjQ2NSAzLjYzSDE2LjU2VjI0aDYuMTE1Yy43MzMgMCAxLjMyNS0uNTkyIDEuMzI1LTEuMzI0VjEuMzI0QzI0IC41OTMgMjMuNDA4IDAgMjIuNjc2IDAiLz48L3N2Zz4=" alt="facebook"/></span></a><a class="navbar-item" href="https://www.linkedin.com/in/stevenandrewsmith" target="_blank" rel="noopener noreferrer"><span class="icon"><img src="data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+TGlua2VkSW4gaWNvbjwvdGl0bGU+PHBhdGggZD0iTTIwLjQ0NyAyMC40NTJoLTMuNTU0di01LjU2OWMwLTEuMzI4LS4wMjctMy4wMzctMS44NTItMy4wMzctMS44NTMgMC0yLjEzNiAxLjQ0NS0yLjEzNiAyLjkzOXY1LjY2N0g5LjM1MVY5aDMuNDE0djEuNTYxaC4wNDZjLjQ3Ny0uOSAxLjYzNy0xLjg1IDMuMzctMS44NSAzLjYwMSAwIDQuMjY3IDIuMzcgNC4yNjcgNS40NTV2Ni4yODZ6TTUuMzM3IDcuNDMzYy0xLjE0NCAwLTIuMDYzLS45MjYtMi4wNjMtMi4wNjUgMC0xLjEzOC45Mi0yLjA2MyAyLjA2My0yLjA2MyAxLjE0IDAgMi4wNjQuOTI1IDIuMDY0IDIuMDYzIDAgMS4xMzktLjkyNSAyLjA2NS0yLjA2NCAyLjA2NXptMS43ODIgMTMuMDE5SDMuNTU1VjloMy41NjR2MTEuNDUyek0yMi4yMjUgMEgxLjc3MUMuNzkyIDAgMCAuNzc0IDAgMS43Mjl2MjAuNTQyQzAgMjMuMjI3Ljc5MiAyNCAxLjc3MSAyNGgyMC40NTFDMjMuMiAyNCAyNCAyMy4yMjcgMjQgMjIuMjcxVjEuNzI5QzI0IC43NzQgMjMuMiAwIDIyLjIyMiAwaC4wMDN6Ii8+PC9zdmc+" alt="linkedin"/></span></a><a class="navbar-item" href="https://twitter.com/ardalis" target="_blank" rel="noopener noreferrer"><span class="icon"><img src="data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+VHdpdHRlciBpY29uPC90aXRsZT48cGF0aCBkPSJNMjMuOTU0IDQuNTY5Yy0uODg1LjM4OS0xLjgzLjY1NC0yLjgyNS43NzUgMS4wMTQtLjYxMSAxLjc5NC0xLjU3NCAyLjE2My0yLjcyMy0uOTUxLjU1NS0yLjAwNS45NTktMy4xMjcgMS4xODQtLjg5Ni0uOTU5LTIuMTczLTEuNTU5LTMuNTkxLTEuNTU5LTIuNzE3IDAtNC45MiAyLjIwMy00LjkyIDQuOTE3IDAgLjM5LjA0NS43NjUuMTI3IDEuMTI0QzcuNjkxIDguMDk0IDQuMDY2IDYuMTMgMS42NCAzLjE2MWMtLjQyNy43MjItLjY2NiAxLjU2MS0uNjY2IDIuNDc1IDAgMS43MS44NyAzLjIxMyAyLjE4OCA0LjA5Ni0uODA3LS4wMjYtMS41NjYtLjI0OC0yLjIyOC0uNjE2di4wNjFjMCAyLjM4NSAxLjY5MyA0LjM3NCAzLjk0NiA0LjgyNy0uNDEzLjExMS0uODQ5LjE3MS0xLjI5Ni4xNzEtLjMxNCAwLS42MTUtLjAzLS45MTYtLjA4Ni42MzEgMS45NTMgMi40NDUgMy4zNzcgNC42MDQgMy40MTctMS42OCAxLjMxOS0zLjgwOSAyLjEwNS02LjEwMiAyLjEwNS0uMzkgMC0uNzc5LS4wMjMtMS4xNy0uMDY3IDIuMTg5IDEuMzk0IDQuNzY4IDIuMjA5IDcuNTU3IDIuMjA5IDkuMDU0IDAgMTMuOTk5LTcuNDk2IDEzLjk5OS0xMy45ODYgMC0uMjA5IDAtLjQyLS4wMTUtLjYzLjk2MS0uNjg5IDEuOC0xLjU2IDIuNDYtMi41NDhsLS4wNDctLjAyeiIvPjwvc3ZnPg==" alt="twitter"/></span></a><a class="navbar-item" href="https://www.youtube.com/ardalis/" target="_blank" rel="noopener noreferrer"><span class="icon"><img src="data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0Ij48dGl0bGU+WW91VHViZSBpY29uPC90aXRsZT48cGF0aCBkPSJNMjMuNDk1IDYuMjA1YTMuMDA3IDMuMDA3IDAgMCAwLTIuMDg4LTIuMDg4Yy0xLjg3LS41MDEtOS4zOTYtLjUwMS05LjM5Ni0uNTAxcy03LjUwNy0uMDEtOS4zOTYuNTAxQTMuMDA3IDMuMDA3IDAgMCAwIC41MjcgNi4yMDVhMzEuMjQ3IDMxLjI0NyAwIDAgMC0uNTIyIDUuODA1IDMxLjI0NyAzMS4yNDcgMCAwIDAgLjUyMiA1Ljc4MyAzLjAwNyAzLjAwNyAwIDAgMCAyLjA4OCAyLjA4OGMxLjg2OC41MDIgOS4zOTYuNTAyIDkuMzk2LjUwMnM3LjUwNiAwIDkuMzk2LS41MDJhMy4wMDcgMy4wMDcgMCAwIDAgMi4wODgtMi4wODggMzEuMjQ3IDMxLjI0NyAwIDAgMCAuNS01Ljc4MyAzMS4yNDcgMzEuMjQ3IDAgMCAwLS41LTUuODA1ek05LjYwOSAxNS42MDFWOC40MDhsNi4yNjQgMy42MDJ6Ii8+PC9zdmc+" alt="youtube"/></span></a><a class="navbar-item" href="https://github.com/ardalis" target="_blank" rel="noopener noreferrer"><span class="icon"><img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBpZD0iQ2FwYV8xIiB3aWR0aD0iNDM4LjU0OSIgaGVpZ2h0PSI0MzguNTQ5IiB4PSIwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MzguNTQ5IDQzOC41NDkiIHk9IjAiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDQzOC41NDkgNDM4LjU0OSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGc+PHBhdGggZD0iTTQwOS4xMzIsMTE0LjU3M2MtMTkuNjA4LTMzLjU5Ni00Ni4yMDUtNjAuMTk0LTc5Ljc5OC03OS44QzI5NS43MzYsMTUuMTY2LDI1OS4wNTcsNS4zNjUsMjE5LjI3MSw1LjM2NSBjLTM5Ljc4MSwwLTc2LjQ3Miw5LjgwNC0xMTAuMDYzLDI5LjQwOGMtMzMuNTk2LDE5LjYwNS02MC4xOTIsNDYuMjA0LTc5LjgsNzkuOEM5LjgwMywxNDguMTY4LDAsMTg0Ljg1NCwwLDIyNC42MyBjMCw0Ny43OCwxMy45NCw5MC43NDUsNDEuODI3LDEyOC45MDZjMjcuODg0LDM4LjE2NCw2My45MDYsNjQuNTcyLDEwOC4wNjMsNzkuMjI3YzUuMTQsMC45NTQsOC45NDUsMC4yODMsMTEuNDE5LTEuOTk2IGMyLjQ3NS0yLjI4MiwzLjcxMS01LjE0LDMuNzExLTguNTYyYzAtMC41NzEtMC4wNDktNS43MDgtMC4xNDQtMTUuNDE3Yy0wLjA5OC05LjcwOS0wLjE0NC0xOC4xNzktMC4xNDQtMjUuNDA2bC02LjU2NywxLjEzNiBjLTQuMTg3LDAuNzY3LTkuNDY5LDEuMDkyLTE1Ljg0NiwxYy02LjM3NC0wLjA4OS0xMi45OTEtMC43NTctMTkuODQyLTEuOTk5Yy02Ljg1NC0xLjIzMS0xMy4yMjktNC4wODYtMTkuMTMtOC41NTkgYy01Ljg5OC00LjQ3My0xMC4wODUtMTAuMzI4LTEyLjU2LTE3LjU1NmwtMi44NTUtNi41N2MtMS45MDMtNC4zNzQtNC44OTktOS4yMzMtOC45OTItMTQuNTU5IGMtNC4wOTMtNS4zMzEtOC4yMzItOC45NDUtMTIuNDE5LTEwLjg0OGwtMS45OTktMS40MzFjLTEuMzMyLTAuOTUxLTIuNTY4LTIuMDk4LTMuNzExLTMuNDI5Yy0xLjE0Mi0xLjMzMS0xLjk5Ny0yLjY2My0yLjU2OC0zLjk5NyBjLTAuNTcyLTEuMzM1LTAuMDk4LTIuNDMsMS40MjctMy4yODljMS41MjUtMC44NTksNC4yODEtMS4yNzYsOC4yOC0xLjI3Nmw1LjcwOCwwLjg1M2MzLjgwNywwLjc2Myw4LjUxNiwzLjA0MiwxNC4xMzMsNi44NTEgYzUuNjE0LDMuODA2LDEwLjIyOSw4Ljc1NCwxMy44NDYsMTQuODQyYzQuMzgsNy44MDYsOS42NTcsMTMuNzU0LDE1Ljg0NiwxNy44NDdjNi4xODQsNC4wOTMsMTIuNDE5LDYuMTM2LDE4LjY5OSw2LjEzNiBjNi4yOCwwLDExLjcwNC0wLjQ3NiwxNi4yNzQtMS40MjNjNC41NjUtMC45NTIsOC44NDgtMi4zODMsMTIuODQ3LTQuMjg1YzEuNzEzLTEyLjc1OCw2LjM3Ny0yMi41NTksMTMuOTg4LTI5LjQxIGMtMTAuODQ4LTEuMTQtMjAuNjAxLTIuODU3LTI5LjI2NC01LjE0Yy04LjY1OC0yLjI4Ni0xNy42MDUtNS45OTYtMjYuODM1LTExLjE0Yy05LjIzNS01LjEzNy0xNi44OTYtMTEuNTE2LTIyLjk4NS0xOS4xMjYgYy02LjA5LTcuNjE0LTExLjA4OC0xNy42MS0xNC45ODctMjkuOTc5Yy0zLjkwMS0xMi4zNzQtNS44NTItMjYuNjQ4LTUuODUyLTQyLjgyNmMwLTIzLjAzNSw3LjUyLTQyLjYzNywyMi41NTctNTguODE3IGMtNy4wNDQtMTcuMzE4LTYuMzc5LTM2LjczMiwxLjk5Ny01OC4yNGM1LjUyLTEuNzE1LDEzLjcwNi0wLjQyOCwyNC41NTQsMy44NTNjMTAuODUsNC4yODMsMTguNzk0LDcuOTUyLDIzLjg0LDEwLjk5NCBjNS4wNDYsMy4wNDEsOS4wODksNS42MTgsMTIuMTM1LDcuNzA4YzE3LjcwNS00Ljk0NywzNS45NzYtNy40MjEsNTQuODE4LTcuNDIxczM3LjExNywyLjQ3NCw1NC44MjMsNy40MjFsMTAuODQ5LTYuODQ5IGM3LjQxOS00LjU3LDE2LjE4LTguNzU4LDI2LjI2Mi0xMi41NjVjMTAuMDg4LTMuODA1LDE3LjgwMi00Ljg1MywyMy4xMzQtMy4xMzhjOC41NjIsMjEuNTA5LDkuMzI1LDQwLjkyMiwyLjI3OSw1OC4yNCBjMTUuMDM2LDE2LjE4LDIyLjU1OSwzNS43ODcsMjIuNTU5LDU4LjgxN2MwLDE2LjE3OC0xLjk1OCwzMC40OTctNS44NTMsNDIuOTY2Yy0zLjksMTIuNDcxLTguOTQxLDIyLjQ1Ny0xNS4xMjUsMjkuOTc5IGMtNi4xOTEsNy41MjEtMTMuOTAxLDEzLjg1LTIzLjEzMSwxOC45ODZjLTkuMjMyLDUuMTQtMTguMTgyLDguODUtMjYuODQsMTEuMTM2Yy04LjY2MiwyLjI4Ni0xOC40MTUsNC4wMDQtMjkuMjYzLDUuMTQ2IGM5Ljg5NCw4LjU2MiwxNC44NDIsMjIuMDc3LDE0Ljg0Miw0MC41Mzl2NjAuMjM3YzAsMy40MjIsMS4xOSw2LjI3OSwzLjU3Miw4LjU2MmMyLjM3OSwyLjI3OSw2LjEzNiwyLjk1LDExLjI3NiwxLjk5NSBjNDQuMTYzLTE0LjY1Myw4MC4xODUtNDEuMDYyLDEwOC4wNjgtNzkuMjI2YzI3Ljg4LTM4LjE2MSw0MS44MjUtODEuMTI2LDQxLjgyNS0xMjguOTA2IEM0MzguNTM2LDE4NC44NTEsNDI4LjcyOCwxNDguMTY4LDQwOS4xMzIsMTE0LjU3M3oiLz48L2c+PGRpdiBpZD0iZGl2U2NyaXB0c1VzZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiLz48c2NyaXB0IGlkPSJnbG9iYWxWYXJzRGV0ZWN0aW9uIiBzcmM9ImNocm9tZS1leHRlbnNpb246Ly9jbWtkYm1mbmRrZmdlYmxkaG5rYmZobG5lZWZkYWFpcC9qcy93cnNfZW52LmpzIi8+PC9zdmc+" alt="Github"/></span></a></div></div></div></nav><div><div><div class="full-width-image margin-top-0" style="background-image:url(/static/ee7ea99ec121c98352aa293172d0aa9f/28339/home-sl%C4%B1der.jpg);background-position:top left;background-attachment:fixed"><div style="display:flex;height:150px;line-height:1;justify-content:space-around;align-items:left;flex-direction:column"><h1 class="has-text-weight-bold is-size-3-mobile is-size-2-tablet is-size-1-widescreen" style="background-color:#3571B8;color:white;line-height:1;padding:0.25em">Become a Better Developer with me!</h1><h3 class="has-text-weight-bold is-size-5-mobile is-size-5-tablet is-size-4-widescreen" style="background-color:#3571B8;color:white;line-height:1;padding:0.25em">Master software development and your career</h3></div></div><section class="section section--gradient"><div class="container"><div class="section"><div class="tile is-ancestor"><div class="tile is-vertical is-7"><div class="tile"><div class="tile is-parent"><article class="tile is-child box"><h1 class="title">Ardalis is Steve Smith</h1><div class="tile"><h3 class="subtitle"><p><img src="/img/steve-microsoft-2015-11-970x450.jpg" alt="Ardalis is Steve Smith"/></p><h2><strong>Proven Expertise</strong></h2><p>Steve Smith has been recognized by Microsoft as a Most Valuable Professional (<a href="https://mvp.microsoft.com/en-us/PublicProfile/7716?fullName=Steven%20A.%20Smith">MVP</a>) 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 <a href="http://docs.asp.net/">official documentation</a> on <a href="https://github.com/aspnet/Docs/graphs/contributors">GitHub</a>.</p></h3></div><br/><div class="columns"><div class="column is-12"><h4 class="has-text-centered" style="font-size:28px;padding:7px;font-weight:bolder">How can I help you</h4><p>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.</p></div></div><div class="columns is-multiline"><div class="column is-6"><section class="section"><div class="has-text-centered"><h1 class="has-text-centered" style="font-size:28px;padding:7px"><strong>Mentoring</strong></h1><div style="width:240px;display:inline-block"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:80%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC00lEQVQ4y+2RXUgUURTH76qEDz1F0WsQ0UPRQ/TWW0FQaEqh5MxqQUlJqdUuMxuy58xuKYt9SCmImqCLaH5gq2XGuu7MahjaQ5J9mLtzMzMz3JIoE3XdG3d2V4zoofcu/DmXc+f/O/97h5D/K7FETSeCRo0aE11X6b/CKBHUuFnVk0SVJosaTRI1o8YH/QUKAAQRDfH9VdlCtjKWSGISVbqWKjFEUCkRApOk7sjeP/yJhgkRkw0BJNnKK4joD5mEGOSgqNJOQaWPRFUXeK+g+THZxRhBABMAJMe9nEEM2G9TEMm5Fm+K6A/y6x4WNcq4hHgVVb2In51t9aXgOl9cpkTULYhYjoj1gLiv1FJI0t8w/lZeA6bSRUGlS3HwZH5HYMMV100CimMbIlYCQDUA7FyfcBAAmCHEH4C4w3qnliccFlSdJ1sWNRox9qo+lzm2nHq9IC8VEN+u+QCmEXEzB+7hDURcRsTvgMjsiqOwuO4eMfdPQBzIzEZSnYn+UHNxbQuxOxyH+LeIuIg8RIyRwYGbAGAGY4cMAZjd4TxQUuoiWaMLxKxRR7Zfn8rqD300a/QuYYxcaLhPSkpd2xHgZ8IXB+5OPOZ+AHgNdvsMKEqRfKOScGNegJ7M9AVbr43OjFe8nNUzfcHu3AC9mN85uNFSVU/A4cwAAAoAU4goGG/odDrTZFlWa2pqZj2ernlZkl4oZa7sE08+tORqOkv3Bpk7GGZ909/Y0b4g472cwakhubohXbZaBhvd7nBbW9sXSZKGnU7nGaIoCpMkibW3t7PhkREmXSr+mv/w2ZAQmGR5mr6S5p1Y6Xo/v/o8vLCa0ReM5Gr6kqC9Y6d842NWy2Xa09PDAgMDzGq1Ms7iwKjNZltpdLsjvQ+62fmyW705T2fnRH+I/4joMV+I3X71OdoUCkeP+0JR3hP9oWjO0Kel01Xu7o7mpkinx8NkWY4oirL6C1U+FWKA8o/CAAAAAElFTkSuQmCC" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/855678fde6b16e286c3e445579f2636a/d32b9/mentoring.png 60w, /static/855678fde6b16e286c3e445579f2636a/d08e9/mentoring.png 120w, /static/855678fde6b16e286c3e445579f2636a/1a97c/mentoring.png 240w" sizes="(max-width: 240px) 100vw, 240px" /><img loading="lazy" sizes="(max-width: 240px) 100vw, 240px" srcset="/static/855678fde6b16e286c3e445579f2636a/d32b9/mentoring.png 60w, /static/855678fde6b16e286c3e445579f2636a/d08e9/mentoring.png 120w, /static/855678fde6b16e286c3e445579f2636a/1a97c/mentoring.png 240w" src="/static/855678fde6b16e286c3e445579f2636a/1a97c/mentoring.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></div><p><p>You or your team can benefit from Steve’s experience with ASP.NET using <a href="https://www.pluralsight.com/courses/principles-oo-design">SOLID development principles</a>, proven <a href="https://www.pluralsight.com/courses/patterns-library">design patterns</a>, and <a href="https://www.pluralsight.com/courses/domain-driven-design-fundamentals">Domain-Driven Design (DDD)</a>.</p><p>“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.”</p><p>“[Steve] is able to quickly understand the problems we are trying to solve and then works with us to solve the problems.”</p><p><a href="http://services.ardalis.com/products/mentoring">Read more…</a></p></p></section></div><div class="column is-6"><section class="section"><div class="has-text-centered"><h1 class="has-text-centered" style="font-size:28px;padding:7px"><strong>Online Training</strong></h1><div style="width:240px;display:inline-block"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:80%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAACIUlEQVQ4y42SW2sTQRTHZzcV+yBKilZUsEVDbLJids5/NrubbLaJoompRXvBFmsoXogiVqlWY1ttvGARUUQU/DC+ePkCPgjiN/AT+CYrU2ZlkCbNwLCz5/I7/zlnGNMWAEZE8muqcz+A8wDuqN0AkJS+OEbuTVfs1GApAO8ATANIA0gRUZ2IpM3dEqqUxd9dRPQewN7Yrvm2q0LDym50BBJRQgU1iaiqXdtUu1/5cwCWld/cFKhXA/BI65WubiOGiGRcWyvQtYcxcIeCjBNREYBFRHNagVXZmq49jOUDeEBER1RiGcBLAE8BTCr/gPxXOUa3ocRAH8Daxlk42wCcACBVJhVkAcA5fdIdpywDtKRZpzpmQog6hKjA9XYCkIof/9fzLd9i/HTW56KI8XSqwtOHC6+jiBHn9wBkVTuMeGDdga5r8pE0I9tedadmP/qNq1/9i1c+eRcufRFB+CG4vcLy4xNMjFY6q9OBIgj7yLYl8HLxxlIUPnkThe1XUXB3LcrXxt46J2ssX6331T7/7A78B/X8hFTIrcyMP9/8XXr4IiqtrP8p3rwfidFK2ykfZ86p0wn37DTraRHnRm7/Hpbbt/tg/szEj+JC63vx1vI3b6bxi4+kPVkMrmeWWs96A/rzTcazGZNbWUZHrSX70PA1e+jAFM9mnksbtzLmscEkK1xf7A2orm3ALzARlgfguovIuy0RhENwHAbHMbIdkv8C2xO+D3AdXvEAAAAASUVORK5CYII=" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/e20bd09855dd8824f9d42b6b6152b123/d32b9/training-classes.png 60w, /static/e20bd09855dd8824f9d42b6b6152b123/d08e9/training-classes.png 120w, /static/e20bd09855dd8824f9d42b6b6152b123/1a97c/training-classes.png 240w" sizes="(max-width: 240px) 100vw, 240px" /><img loading="lazy" sizes="(max-width: 240px) 100vw, 240px" srcset="/static/e20bd09855dd8824f9d42b6b6152b123/d32b9/training-classes.png 60w, /static/e20bd09855dd8824f9d42b6b6152b123/d08e9/training-classes.png 120w, /static/e20bd09855dd8824f9d42b6b6152b123/1a97c/training-classes.png 240w" src="/static/e20bd09855dd8824f9d42b6b6152b123/1a97c/training-classes.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></div><p><p><a href="https://ardalis.com/PS-stevesmith">Steve has published many courses on Pluralsight</a>, covering topics from N-Tier architecture to Refactoring to Domain-Driven Design. You can also <a href="https://www.youtube.com/channel/UCkvBKVrZ_RepwX7UgfnFIUA">follow Steve on YouTube</a> for more online video content. See <a href="/training-classes">what others say</a> about Steve’s courses.</p></p></section></div><div class="column is-6"><section class="section"><div class="has-text-centered"><h1 class="has-text-centered" style="font-size:28px;padding:7px"><strong>Assessments</strong></h1><div style="width:240px;display:inline-block"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:80%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAACz0lEQVQ4y12UXU8TQRSG2/ITiAnxZzUG2516Q0KMoGBIuPDCG4Ubbkkw8Qd4pQTjjSh0higWDJGSEI3QGSlQELdL6de23Y95zczOlsImZ3eye86z58x5zyQIEwlllnkSypNmfZcwMUuY+EiY+KWNcrWetaj+liAs8u3HMpFIDL6wKI9tmjDRyDGB20aYgEV5nTAxrXxJH8Y15/qFyiyCLaqgLOVIr5W89FopSK+VQmNBhnLPQBV8UUMpT/YzJFQvhkyGU8r5fp77Y1/+hC92K5jfO5Mvi5HNFc/k+Ncj9T0kTPgGOqUYFuVDxGSYVOkSJkYIE1fKyaI8LFbbACBrzR5kIBH4IRBK7DuufLChM1RQEMZVzEhUPk/q7Mw+ziiH0Tz3HhfKuGj25M+TBv41uqhcdnBkt3Fsu3BaPTzdOpajea721LMUlIoZy1Sq6k+Z+lfich9tlmW146HV8fH3qotQSvhBCCklWl6AJ4Wy8pM5JnwSlb1iGKnBzm4bYDBZKMtKo4uDShO1lofzWgcnVRenjouLRgfThbKqRBImAhJt0XbMGWi76AMnvpWl7Xqotz2cOC6aHR+1tod6q4uaB0zsXGhgjonAiqS0fa1DylNW1JTluGSV4Wm9i9+VJlpdH3ajh3OnhfMO0Nz/gU/PnyEbZRiXvKwZVKT6kiFUxJLxJjbLcINQ6jarG0J9hytw+T6Dpdev5OjGMYjSpAJGclP9GDKy0eneIUw4RjbBntM2vAiJxgGuVjPY3Hkrs9+ryNJSQBiHxYRjYjXLjB2Phf1wQNjB3O4Z5osVObdnyw/snVxafSPHCjay64cK5keS0TF9xuAcxqO3cGv0/PTngyC7zoN7GxU/kz/0dGZUi3pB6c+6rjKRMFPSNwMdJ0zYtw+FHC2Zw0HYhPHxaI5vxuqL3DyC4r8NE8onLdV9yne0Mb5sUTFJKB8e9I1j1fUfSSRj592kjtEAAAAASUVORK5CYII=" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/342cc63830a50c88ff0417ab781871be/d32b9/assessments.png 60w, /static/342cc63830a50c88ff0417ab781871be/d08e9/assessments.png 120w, /static/342cc63830a50c88ff0417ab781871be/1a97c/assessments.png 240w" sizes="(max-width: 240px) 100vw, 240px" /><img loading="lazy" sizes="(max-width: 240px) 100vw, 240px" srcset="/static/342cc63830a50c88ff0417ab781871be/d32b9/assessments.png 60w, /static/342cc63830a50c88ff0417ab781871be/d08e9/assessments.png 120w, /static/342cc63830a50c88ff0417ab781871be/1a97c/assessments.png 240w" src="/static/342cc63830a50c88ff0417ab781871be/1a97c/assessments.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></div><p><p>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. <a href="https://services.ardalis.com/collections/assessments/products/application-assessment">Read more…</a></p></p></section></div><div class="column is-6"><section class="section"><div class="has-text-centered"><h1 class="has-text-centered" style="font-size:28px;padding:7px"><strong>Workshops</strong></h1><div style="width:240px;display:inline-block"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:80%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAADXklEQVQ4y51T32/bVBQ+qHtB4xUQEo/8CTzxVqG+8AAdLWu2RCxp6sS+x3aaaItKDS21A62ykgUSlaYbScYghXWQVNUSiFDQ1mRJGOtAGrRS1EotaTeChEQBwZrFB90sE5Umflr69F1/53yfr4+vgTEGHIj4v7HfD7quQ09PD785yBgzEDGCiKcQMcwYC9/jv0KnHmKMxRhjz4DVau1aWVkBj8fzKCL+iogkyzJxZoy1+Z+wr+8k9Pb2Ar+6u7sPImKdFwVB2BNFsYmITcbY34L3IOLvnUAdlpaWjFgstpnL5SRBENZVVaVQKNTy+/0kSdK/2aHZCeVrA4LB4A82m41isdg1n89XC4VCFIlEWtPT0+Ryuf57YKFQWJydnaVKpfLWzMzMumEYFA6HW6qqmp3ZmJ05cb5P6+h/Bo6Nje2Ojo7emZiY2B0fH29Go1HT6/OZblHkDa12ADfyNcrEGe/XbnON8UBuuPeVeNgJv5/cQ06SJZE3cGOzzZJI6Bbu7NPuBruEvU4Y13XI5XIvZbNZfz6f10c1zXQNOX+UgtETQjDqQ0ncvhsmkTjyypTz7Xk3MlbtmImpw+cG30k7mcf7QSf0dZicnARN09pHRxTFNQXxtYFq4/JAtXGdyYofZbmpDB47c2R5601L+fuWMBWRZEnaUVxDZdviF25L+RbZMpXjiuBcZYo6AoFAoEvTtK7T8wsHiAhOjWvgKG/POa7Uz00+DsC1k0ufg716C+2lrVL/Dj1ytUkQv74Bx77++Sl7cWvF/tVP3bEva2DV3zjQ/g+/XVsDogY3P2hkS2fs6Ss37enyzVcvllJE9FDo05J3MF3acWTKdTVTrO5urT+Rq1x72p0u1hyZyndCurSRLl59zhpOAHi9XqhWq13f3LgBa6urz45N6DQkSiRIjEa0l2m7Xj8+FQz+4pIYibJCyrCXCoVC9P1UqiSiTJKikpshxROJjfbc+Cs1Go0HOBPRwx9/dOG9RDy+mIzHMwvnz39IRI9lsxeNZCL+STIRvzCfSuVrtdqTy8vLh99NJj87m0wunE0m8pcvXXIHDAPANE3Y3NyE327vgUkEvmEPWJ4/BJa+Q6Aiaz8woOtwpL8Pjr7QB65BBxSLRUgmEnD0cD+8aBlo107PzbU3+AdtMar0H779SAAAAABJRU5ErkJggg==" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/fde4a9fa8681f78d181a7ea442bf9e1d/d32b9/workshops.png 60w, /static/fde4a9fa8681f78d181a7ea442bf9e1d/d08e9/workshops.png 120w, /static/fde4a9fa8681f78d181a7ea442bf9e1d/1a97c/workshops.png 240w" sizes="(max-width: 240px) 100vw, 240px" /><img loading="lazy" sizes="(max-width: 240px) 100vw, 240px" srcset="/static/fde4a9fa8681f78d181a7ea442bf9e1d/d32b9/workshops.png 60w, /static/fde4a9fa8681f78d181a7ea442bf9e1d/d08e9/workshops.png 120w, /static/fde4a9fa8681f78d181a7ea442bf9e1d/1a97c/workshops.png 240w" src="/static/fde4a9fa8681f78d181a7ea442bf9e1d/1a97c/workshops.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></div><p><p>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. <a href="/contact-us">Contact Steve</a> for more details.</p></p></section></div><div class="column is-6"><section class="section"><div class="has-text-centered"><h1 class="has-text-centered" style="font-size:28px;padding:7px"><strong>Speaking Engagements</strong></h1><div style="width:240px;display:inline-block"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:100%"></div><img aria-hidden="true" src="data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAMEBf/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAB708a56KCavnDQD//xAAcEAACAgIDAAAAAAAAAAAAAAABAgMQERIAEzH/2gAIAQEAAQUCJxxGzWr9hQ6wghT5FEI6/8QAFREBAQAAAAAAAAAAAAAAAAAAIEH/2gAIAQMBAT8Bo//EABURAQEAAAAAAAAAAAAAAAAAACBB/9oACAECAQE/AYP/xAAfEAABAgYDAAAAAAAAAAAAAAABABAREiEiMUJRUoH/2gAIAQEABj8CWWFdyre6M3JYwJ9b/8QAHRAAAgICAwEAAAAAAAAAAAAAAREAIRAxQVGRwf/aAAgBAQABPyEAQIkptbxZmjtcKC8BXyMlf2gMh3LAX2x//9oADAMBAAIAAwAAABAzxzz/xAAXEQEBAQEAAAAAAAAAAAAAAAABESAx/9oACAEDAQE/EFYnMf/EABYRAQEBAAAAAAAAAAAAAAAAABEBIP/aAAgBAgEBPxCCx//EAB4QAQACAQUBAQAAAAAAAAAAAAERIQAQMUFRsYHw/9oACAEBAAE/EHKssMBu1NYvoCKl9P3rQFAdQ5PBMYyWmrg17g5ImKivycshIJJuYmo2SS7af//Z" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/7301ee12d0a31b3354c6825a3c49ba84/7efcf/speaking.jpg 60w, /static/7301ee12d0a31b3354c6825a3c49ba84/3f4db/speaking.jpg 120w, /static/7301ee12d0a31b3354c6825a3c49ba84/c4526/speaking.jpg 240w, /static/7301ee12d0a31b3354c6825a3c49ba84/d1e9b/speaking.jpg 360w, /static/7301ee12d0a31b3354c6825a3c49ba84/a2c17/speaking.jpg 480w, /static/7301ee12d0a31b3354c6825a3c49ba84/ebcde/speaking.jpg 1275w" sizes="(max-width: 240px) 100vw, 240px" /><img loading="lazy" sizes="(max-width: 240px) 100vw, 240px" srcset="/static/7301ee12d0a31b3354c6825a3c49ba84/7efcf/speaking.jpg 60w, /static/7301ee12d0a31b3354c6825a3c49ba84/3f4db/speaking.jpg 120w, /static/7301ee12d0a31b3354c6825a3c49ba84/c4526/speaking.jpg 240w, /static/7301ee12d0a31b3354c6825a3c49ba84/d1e9b/speaking.jpg 360w, /static/7301ee12d0a31b3354c6825a3c49ba84/a2c17/speaking.jpg 480w, /static/7301ee12d0a31b3354c6825a3c49ba84/ebcde/speaking.jpg 1275w" src="/static/7301ee12d0a31b3354c6825a3c49ba84/c4526/speaking.jpg" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></div><p><p>Steve is a regular speaker at tech conferences like <a href="https://codemash.org/">Codemash</a>, <a href="https://stirtrek.com/">Stir Trek</a>, <a href="https://devintersection.com/">DevIntersection</a>, and more. You can find some of his past presentations on <a href="https://www.slideshare.net/ardalis">SlideShare</a> and <a href="https://speakerdeck.com/ardalis">SpeakerDeck</a>.</p><p>Watch <a href="https://channel9.msdn.com/Events/Seth-on-the-Road/DevIntersection-2015/Software-Quality-with-Steve-Smith">Steve discuss Software Quality on Channel 9</a> with Seth Juarez:</p><iframe width="100%" height="315" frameBorder="0" allowfullscreen="" src="https://channel9.msdn.com/Events/Seth-on-the-Road/DevIntersection-2015/Software-Quality-with-Steve-Smith/player"></iframe></p></section></div><div class="column is-6"><section class="section"><div class="has-text-centered"><h1 class="has-text-centered" style="font-size:28px;padding:7px"><strong>Interviews and Podcasts</strong></h1><div style="width:240px;display:inline-block"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:80%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAADTUlEQVQ4y1WU309TSRTHh5b/Yn10N1FffNCYbPTFH/FBjWCx7b23cTfRaHwzamLW6GY1RE18Vxch4cUQ4EFaNxToj5kWimLosoogpcy0oID4I2wQWdvCOZtzZ1qxyUl7M7ef+X6/c84wxhhzhGK2kMzhisrrPnNJtc8R6vdAUrYd7pt+eDyWv3pmsLAnJJT7H0fod3VJxr7BCOBCPLTgCLXbESrjCIWBpMTzmVlsmXqPl0bmsDE+gyGh4jaX22nT76GKsU0PXg1VPptLJJgj1Lo/OVO5PPKmPLz0ufx6ea3SlvuwcUJDv9pcHjTqvDWVtoZ5zG67COaWUOUQl3AyKeHsUBHEwgr0FJdhYnkNmscWSj4NXbO5/MkI8lBkbFNeVBmjrOwQNFWEX3keRpZWMLO0is/fr8Lg4gqkF1fIeimk340YYJ3DtUKPge4lmM3lhs0lnBqag2M9WbjYOYCIgKtfS3hvcgnvvFiEuy8XweISHKHcsoXc4TrlykOnW292uG7sVkLpWfD/9Q/svNmC17r6sXVwFNszWWwe/4AHeqewKTGjQVxWdN7yfDVLUuY1dh/SYihVLPsiWTjy4DFarT14uTuG9Cmtr+Mf2bd4YbiAv6QLtDFBKyaiOwZYr489VaDvFlo8+WSsfLS9Dw79GcHE9Bxe6o7jiJpHUXiHV3s4xuc+oS8h6UA0UHfELeOynlmJfL3J8LdA9BU2dA1VGjpScLA1ChcjGXyq5vFG9Ck29+rfV0YXXMshY9nNXagz1dZjgb4JT3DgNQv2T+72977EpnB2o7F7GAh6qC0K1qMYTix8xLF3/+LptEJqIwMDY5eg1dapY3ZyhjVFsnX+6DizYrkBf3Qcm8KjpcbuYfR1puHn+0/gRt8zvDU2j0cHpuFUyoURqKSBsqPWhzQpdiJPpRuby21WPPefv7cGhYYOAY3hLAT5d8oMTH10hNpS60MCBmM5ZsVzlKXXQPdb8dwXrTQLgf7JSihdJFuVWmZaIcF2mfxr8+wqDMamyC6z4tNeisDhcmswNhW2E3lwUgWsjqOBEZRs/kCza7t3gKyOsL5xCOIL/+1C7UTeSzPpj75iTqpAN8o5m8vb1Bo2l6cdoX6sXShcVXu4BvsfdfUsEFRpTSUAAAAASUVORK5CYII=" alt="" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/1a2a761dd19eddac9553c3514f10d5f9/d32b9/podcast.png 60w, /static/1a2a761dd19eddac9553c3514f10d5f9/d08e9/podcast.png 120w, /static/1a2a761dd19eddac9553c3514f10d5f9/1a97c/podcast.png 240w" sizes="(max-width: 240px) 100vw, 240px" /><img loading="lazy" sizes="(max-width: 240px) 100vw, 240px" srcset="/static/1a2a761dd19eddac9553c3514f10d5f9/d32b9/podcast.png 60w, /static/1a2a761dd19eddac9553c3514f10d5f9/d08e9/podcast.png 120w, /static/1a2a761dd19eddac9553c3514f10d5f9/1a97c/podcast.png 240w" src="/static/1a2a761dd19eddac9553c3514f10d5f9/1a97c/podcast.png" alt="" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></div><p><p>Listen to <a href="https://ardalis.com/interviews">interviews with Steve Smith</a> on various industry shows and podcasts.</p></p></section></div></div><div class="column is-12"><h3 class="has-text-weight-semibold is-size-2 has-text-centered">Latest Articles</h3><br/><div class="columns is-multiline"><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/interfaces-describe-what-implementations-describe-how/">Interfaces Describe What - Implementations Describe How</a><span> </span><span class="subtitle is-size-5 is-block">23 September 2024</span></p><p><br/>When working with software development, especially in object-oriented or component-based systems, understanding the distinction between interfaces and implementations is crucial. The two terms often come up in conversations about architecture, design patterns, and coding best practices, but what do they really mean? In this post, we'll break down the difference and why it matters. YouTube What is…<br/><br/><a class="button" href="/interfaces-describe-what-implementations-describe-how/">Keep Reading →</a></p></article></div><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/you-should-blog/">You Should Blog</a><span> </span><span class="subtitle is-size-5 is-block">26 August 2024</span></p><p><br/>As a software developer, you might spend most of your time immersed in code, solving problems, and building innovative solutions. But have you ever considered starting a blog? If you haven't, let me give you some compelling reasons why you should. This is advice I frequently give to members of my developer group coaching program at devBetter.com. Watch the Video 1. Sharpen Your Skills One of the…<br/><br/><a class="button" href="/you-should-blog/">Keep Reading →</a></p></article></div><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header><div class="featured-thumbnail"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:50.442477876106196%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACbUlEQVQozyWRW2/aBgBG/Xf2A9Y+TNq0LguFhJuNbS62sbENvmODwQacNCQKgaRTp0WKpqrd2l96prVP38ORjo70CfJAQRJbyGqPs3qNaThDd3REucVI7zMJQnaHE/PNlqHjcPfhGdObodkTllVFut1R3B2wozlWmCIk84ChPuK8cc7rn17TU0VEtcNZ/Q2SVKcldVjsH2n0RF79+AP9gUxb6SIqbbrtGrLYICm3GFMP04sQwumIqWvQ7l5SuzjH9WeMbQtlIDPQB8TzmKeXj8zSBFXt4Hgu13fvyIsFutZD77cJ5jGKpiGpKkKt2aAjNWl16kiqhOVO8CKfOIvRLZ2p71KUOX44ZexYjB2b7VXBzW3Fw9OBvEyxLQVz3MdwJgg///6GpnSB3G8hqd8rRekCXZeYuRq9XosgjvBCj76moJsDwtAkXwWsy4TyKidNpyS+judqCJdSm19rZzS7dSxTJosmlLnPppjjOOa3s7JlxiJfoA77hEnAbl9xfVtxOFQcj//vlv2+YB4bCN1eE0lsMFJbbFYR/3x+4eOnvzk9PvBwPHB6OlFsSz789SfHxyPrsuD09Mi/X7/w/PLMze2W+/uKP97vOZ2uEZKZTrHw2G0yNtucJIuJQ4ck9tlVG5I0wQtmxElAsVmzLlZYtsnENthWJbf3e673FZubd9wdbhDyfM6qXJLmKRNbR5Uv0DSVIJziuiZyr4MyUBiOZMaWTpZFhJFHq9OkXv8N1zGIVhuGxTNxeYWwXC/wY5+JYzBQLr/LYh8/8nA8m9F4hKgqiIrIaGwQpxHLVfaNd+Qeb2u/MDINzOU94XLFf1mSuQYwIp6yAAAAAElFTkSuQmCC" alt="featured image thumbnail for post From Microservices to Modular Monoliths" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/bb8769e1b15474a72ab20ff58f2dfea4/ee6d0/from-microservices-to-modular-monoliths.png 113w, /static/bb8769e1b15474a72ab20ff58f2dfea4/0c2b2/from-microservices-to-modular-monoliths.png 225w, /static/bb8769e1b15474a72ab20ff58f2dfea4/31119/from-microservices-to-modular-monoliths.png 450w, /static/bb8769e1b15474a72ab20ff58f2dfea4/ee814/from-microservices-to-modular-monoliths.png 675w, /static/bb8769e1b15474a72ab20ff58f2dfea4/03620/from-microservices-to-modular-monoliths.png 900w, /static/bb8769e1b15474a72ab20ff58f2dfea4/4e530/from-microservices-to-modular-monoliths.png 1024w" sizes="(max-width: 450px) 100vw, 450px" /><img loading="lazy" sizes="(max-width: 450px) 100vw, 450px" srcset="/static/bb8769e1b15474a72ab20ff58f2dfea4/ee6d0/from-microservices-to-modular-monoliths.png 113w, /static/bb8769e1b15474a72ab20ff58f2dfea4/0c2b2/from-microservices-to-modular-monoliths.png 225w, /static/bb8769e1b15474a72ab20ff58f2dfea4/31119/from-microservices-to-modular-monoliths.png 450w, /static/bb8769e1b15474a72ab20ff58f2dfea4/ee814/from-microservices-to-modular-monoliths.png 675w, /static/bb8769e1b15474a72ab20ff58f2dfea4/03620/from-microservices-to-modular-monoliths.png 900w, /static/bb8769e1b15474a72ab20ff58f2dfea4/4e530/from-microservices-to-modular-monoliths.png 1024w" src="/static/bb8769e1b15474a72ab20ff58f2dfea4/31119/from-microservices-to-modular-monoliths.png" alt="featured image thumbnail for post From Microservices to Modular Monoliths" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/from-microservices-to-modular-monoliths/">From Microservices to Modular Monoliths</a><span> </span><span class="subtitle is-size-5 is-block">10 July 2024</span></p><p><br/>What do you do when you find yourself in microservice hell? How do you keep the gains you (hopefully) made in breaking up your legacy ball of mud, without having to constantly contend with a massively distributed system? Migrate to a modular monolith. Microservices Microservices have been all the rage for the past several years. They offer a way to break up large, monolithic applications into…<br/><br/><a class="button" href="/from-microservices-to-modular-monoliths/">Keep Reading →</a></p></article></div><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header><div class="featured-thumbnail"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:50.442477876106196%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACjklEQVQozx3PWXcaZQCA4fkhXnhj9LQ1KSpuF7WHFG3asKRB9gFm+IYBJgQYJmyzQdhCCic2mHps0mjqje2ffD316rl+pKFSRuRkDFWlowksXWDrFZxyhUlcMDvUmaZ1Gpk84x2dRaDN2c4J40AdO1hitFOk/7nM9H4d44sXSKlMkmwmxaQoWIojlnYfu91g2GmxMk84rzZ5WWszM0yWkQajsIH/rMpgT2AHdcxtmdaDJI2tQ+Kf7iI56RJNrUxfLbO0urw7W/P+csPd75esz6Z8uHrN7XjJejFnJk54O77gQ3/Du+MVb/UZV1ETLZTg4FGU9FYEyY8WsVQV/2NRq/Ob7XLZH3LlODhmk5XtsugO6BQEk+gxbypjbvOnXCeGrHYaTB8WGP5UwNnK0nyYReqVVJycyvipwvRQ49xzWPkerxZTblYLWmabarXGhdblr9aSv6tz7qrz/71JOvjPVXqfpRl+m6X8cxLJTpYwVQX7mczaGHCd87ixT1m7HsN+F6ELIrEInmzwZ8Hl9fGY64LLbW7CbWnCuehjhYqYkSLW4xzSKJjH2s0x+r7Ipu7wfv4H/7hn/Dtf88o95Y06YZnvYWkGnnzERrO50yZsDI+L7piFOcDMCbygTO9+GqnxKI0VzLF40GAQSDHIlvBVDUso1OIZ/IDM8keB9yRP8vAA47sXqIkUrajMJKwwe1rCjylYcZX2dh7J2E7QupfG3lbwvynS+iVNo6LSU8rYZY2+JnAUgVutEdvfJxwKI++nGCV0RrLOKKbiBlSUPQ8RNZFqX/5K55MMna8yGPcOaIRSnD4XrOI6L4t1lmWDqVKlZeg8fhJi74ddjr/Oso7VmeYrOIpGM11BDZ9QPDjiP8lmwIqlGdaTAAAAAElFTkSuQmCC" alt="featured image thumbnail for post Modeling Navigation Properties Between Aggregates or Modules" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/cf9e9e1b9e6684d276bf60c4670afe27/ee6d0/modeling-navigation-properties-between-aggregates-modules.png 113w, /static/cf9e9e1b9e6684d276bf60c4670afe27/0c2b2/modeling-navigation-properties-between-aggregates-modules.png 225w, /static/cf9e9e1b9e6684d276bf60c4670afe27/31119/modeling-navigation-properties-between-aggregates-modules.png 450w, /static/cf9e9e1b9e6684d276bf60c4670afe27/ee814/modeling-navigation-properties-between-aggregates-modules.png 675w, /static/cf9e9e1b9e6684d276bf60c4670afe27/03620/modeling-navigation-properties-between-aggregates-modules.png 900w, /static/cf9e9e1b9e6684d276bf60c4670afe27/4e530/modeling-navigation-properties-between-aggregates-modules.png 1024w" sizes="(max-width: 450px) 100vw, 450px" /><img loading="lazy" sizes="(max-width: 450px) 100vw, 450px" srcset="/static/cf9e9e1b9e6684d276bf60c4670afe27/ee6d0/modeling-navigation-properties-between-aggregates-modules.png 113w, /static/cf9e9e1b9e6684d276bf60c4670afe27/0c2b2/modeling-navigation-properties-between-aggregates-modules.png 225w, /static/cf9e9e1b9e6684d276bf60c4670afe27/31119/modeling-navigation-properties-between-aggregates-modules.png 450w, /static/cf9e9e1b9e6684d276bf60c4670afe27/ee814/modeling-navigation-properties-between-aggregates-modules.png 675w, /static/cf9e9e1b9e6684d276bf60c4670afe27/03620/modeling-navigation-properties-between-aggregates-modules.png 900w, /static/cf9e9e1b9e6684d276bf60c4670afe27/4e530/modeling-navigation-properties-between-aggregates-modules.png 1024w" src="/static/cf9e9e1b9e6684d276bf60c4670afe27/31119/modeling-navigation-properties-between-aggregates-modules.png" alt="featured image thumbnail for post Modeling Navigation Properties Between Aggregates or Modules" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/navigation-properties-between-aggregates-modules/">Modeling Navigation Properties Between Aggregates or Modules</a><span> </span><span class="subtitle is-size-5 is-block">19 June 2024</span></p><p><br/>One of the key challenges in developing a modular monolith is managing the communication between different modules, especially when it comes to handling data dependencies across module boundaries. Recently, I received an interesting question from one of the students of my modular monoliths course, which I thought others might appreciate. Student Query Modular Monolith course question (EFCore…<br/><br/><a class="button" href="/navigation-properties-between-aggregates-modules/">Keep Reading →</a></p></article></div><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header><div class="featured-thumbnail"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:50.442477876106196%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABn0lEQVQoz1WS2W7bMBAA8795KBK0qJOglS1ZF2WJFLnkkrqp00eb5hMLJbGBAAS4DxxgZsE7oVEgClSgkSvpJN4v4jy4Pzbu9nnnEpIfEkgSAQZhfanWc0XubpNAtc/igMY+OWyevMenl/vNdyfys1wQkocBo0J8wniD3y+p0afxAdgwzYyVgCWgwapOFbAC5suxtWPTjGDwCqsPWIHWGXCfxrosddGCrNphbOxQdb2puqJrZWOWy7mzC+UgbvKIqzYYnQoW0mS5XOpqkqasu6GxIwNUpqq6npeqGe20XObj+bNZX7VB6xRYQImdBsQWVFk0rSyqNAcwpanbmFFj6+l4KowF/UV7recod4l/fv1zOr+23VL3fdF03TB30zQeT5mUdh7//nurq4mj/NL8vjAT0oRp0Y+Tki1XOleaKw3aZFx6WVTbtrEDyPrWzD+aV3NErtTPvRfnaZqCsyXbIHQjsvWjze53xBIwGIYsy0EalUrzjYyhKG/a6ydJhXRIEOYxZWrnZM+u+xI6KVDGVOBxQkQuldQygeIhGfa8+g/N6FwyCfBdDwAAAABJRU5ErkJggg==" alt="featured image thumbnail for post Comparing Unit Testable Code with Maintainable Code" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/560bccdc6e765c0a3e800eface52047d/ee6d0/comparing-unit-testable-code-with-maintainable-code.png 113w, /static/560bccdc6e765c0a3e800eface52047d/0c2b2/comparing-unit-testable-code-with-maintainable-code.png 225w, /static/560bccdc6e765c0a3e800eface52047d/31119/comparing-unit-testable-code-with-maintainable-code.png 450w, /static/560bccdc6e765c0a3e800eface52047d/ee814/comparing-unit-testable-code-with-maintainable-code.png 675w, /static/560bccdc6e765c0a3e800eface52047d/03620/comparing-unit-testable-code-with-maintainable-code.png 900w, /static/560bccdc6e765c0a3e800eface52047d/4e530/comparing-unit-testable-code-with-maintainable-code.png 1024w" sizes="(max-width: 450px) 100vw, 450px" /><img loading="lazy" sizes="(max-width: 450px) 100vw, 450px" srcset="/static/560bccdc6e765c0a3e800eface52047d/ee6d0/comparing-unit-testable-code-with-maintainable-code.png 113w, /static/560bccdc6e765c0a3e800eface52047d/0c2b2/comparing-unit-testable-code-with-maintainable-code.png 225w, /static/560bccdc6e765c0a3e800eface52047d/31119/comparing-unit-testable-code-with-maintainable-code.png 450w, /static/560bccdc6e765c0a3e800eface52047d/ee814/comparing-unit-testable-code-with-maintainable-code.png 675w, /static/560bccdc6e765c0a3e800eface52047d/03620/comparing-unit-testable-code-with-maintainable-code.png 900w, /static/560bccdc6e765c0a3e800eface52047d/4e530/comparing-unit-testable-code-with-maintainable-code.png 1024w" src="/static/560bccdc6e765c0a3e800eface52047d/31119/comparing-unit-testable-code-with-maintainable-code.png" alt="featured image thumbnail for post Comparing Unit Testable Code with Maintainable Code" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/comparing-unit-testable-code-with-maintainable-code/">Comparing Unit Testable Code with Maintainable Code</a><span> </span><span class="subtitle is-size-5 is-block">12 June 2024</span></p><p><br/>Writing maintainable code should be a goal in most software engineering projects. Although definitions and especially hard measurements of what maintainable means with regard to software may vary, it can be useful to compare maintainable code to the much more easily verified unit testability of that code. Introduction When discussing software quality, two important concepts often arise: unit…<br/><br/><a class="button" href="/comparing-unit-testable-code-with-maintainable-code/">Keep Reading →</a></p></article></div><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header><div class="featured-thumbnail"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:50.442477876106196%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACTElEQVQozwXBa1fSYAAA4P0PFJUiYcIru7CBC5AxxkUujsuGjAFz4ICFIEigHDGMU0ZiljdISz0nP9g5/ceeB9KZgM4MFgFqsGHoOo0zbHp7m06lmUw2s1MSqyrJsiQTCAhCSJKxYFxvsc3BYA626swAWrCsLgHEABATQZIsS3PxnFoqNuqZ3Xb343F7+CEkq7AnwFdrqR3VGQ6vUC7LGmVE8HkYQPoVABOExekgGF80JyoNTalX5Zr6/edtrbNfaWrn05vh+WT/+Chb0+Ky7E8lcK/X4nAaVhEIJp0mHF/z+za2eKGslFptLlfMVHfHs/tS+yBR0kZnk9nTU2cwODw5zlXKiYLkiWygrrcLFgC9sqGIx8uIhXS5rLbqzaNBrt7eG42H364ap5fxWq8zHI2n91KjFU7xsZyYf1dbC4Vhwr4EEMgAbHZ/wF+sBLPibrf14272+PJydj1NaZ3e9Nm3JSeVypfZ/eebaVKpxMRsUVOpYAD1uJdxAjJidiOK2iinJxqWGo3T66u7P4/9yYU7KbH56k6vP5qMZ48Pl78fzqY3jW4rIWUdAdaEY28wO6QzWc120hUKemIRfyaTVRXtfas56Nd7B/mqdvvw6/nf308XX2khK5TLglIg/QygKANCwE4XtGC1vUZxmHRgNI37aJrb5IpSWi50T472Bv3m8KTe79UPu1xeDPEpf2LTwdBGwr0S0fSYF5qHgc5sXQTIIkCBy+2JRalINJThfRy3IUluXlrnuLDAB9JJC0WZCIcRxcwO9zIt6BHXf9b1yD8rQjS8AAAAAElFTkSuQmCC" alt="featured image thumbnail for post Effectively Sharing Resources Between Modules in a Modular Monolith" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/9c59956eb676d2885e904b84ead8b856/ee6d0/effectively-sharing-resources-between-modules-modular-monolith.png 113w, /static/9c59956eb676d2885e904b84ead8b856/0c2b2/effectively-sharing-resources-between-modules-modular-monolith.png 225w, /static/9c59956eb676d2885e904b84ead8b856/31119/effectively-sharing-resources-between-modules-modular-monolith.png 450w, /static/9c59956eb676d2885e904b84ead8b856/ee814/effectively-sharing-resources-between-modules-modular-monolith.png 675w, /static/9c59956eb676d2885e904b84ead8b856/03620/effectively-sharing-resources-between-modules-modular-monolith.png 900w, /static/9c59956eb676d2885e904b84ead8b856/4e530/effectively-sharing-resources-between-modules-modular-monolith.png 1024w" sizes="(max-width: 450px) 100vw, 450px" /><img loading="lazy" sizes="(max-width: 450px) 100vw, 450px" srcset="/static/9c59956eb676d2885e904b84ead8b856/ee6d0/effectively-sharing-resources-between-modules-modular-monolith.png 113w, /static/9c59956eb676d2885e904b84ead8b856/0c2b2/effectively-sharing-resources-between-modules-modular-monolith.png 225w, /static/9c59956eb676d2885e904b84ead8b856/31119/effectively-sharing-resources-between-modules-modular-monolith.png 450w, /static/9c59956eb676d2885e904b84ead8b856/ee814/effectively-sharing-resources-between-modules-modular-monolith.png 675w, /static/9c59956eb676d2885e904b84ead8b856/03620/effectively-sharing-resources-between-modules-modular-monolith.png 900w, /static/9c59956eb676d2885e904b84ead8b856/4e530/effectively-sharing-resources-between-modules-modular-monolith.png 1024w" src="/static/9c59956eb676d2885e904b84ead8b856/31119/effectively-sharing-resources-between-modules-modular-monolith.png" alt="featured image thumbnail for post Effectively Sharing Resources Between Modules in a Modular Monolith" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/effectively-sharing-resources-between-modules-modular-monolith/">Effectively Sharing Resources Between Modules in a Modular Monolith</a><span> </span><span class="subtitle is-size-5 is-block">24 May 2024</span></p><p><br/>One of the key challenges in developing a modular monolith is managing the communication between different modules, especially when it comes to handling data dependencies across module boundaries. Recently, I received an interesting question from one of the students of my modular monoliths course, which I thought others might appreciate. Student Query Hi Steve, I have another question for you…<br/><br/><a class="button" href="/effectively-sharing-resources-between-modules-modular-monolith/">Keep Reading →</a></p></article></div><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header><div class="featured-thumbnail"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:50.442477876106196%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACOUlEQVQozx3PC1OacAAAcL5La9fM6palFzplAb4VzbeSphloPlBE/YMOBEEMn03s2tau2zfdbd/g94PEpw3Q1lVBfxjNS0C3348sJeFTaXRWFT0UQOJ5LPsQKHfQHPUlfnuORs7RyKnLa7F7Ds8cEC0tc2CeG+qBtoI2FaQ59TNKqivRvFzvASJDJu7oXGNQAVr4voOkq2ietuHEsQM5ssEQP9/Sk2WU0zFGJXmdk2RWGLNg9E3V++NJunifyJc83hASINBYNlplfcWWDSdOYPTI5oTWu/3i2eyq6yR4uulrY3nCi9JYUUVtxgz4C+e1Cws6sZDDjTu9EW+hDoez1qvrIxv88cwBsfNtR9s01E1GWFD6i6ipnT7X6nE9XqgzbLZIhRMFNBiPpshk8cEVSlr+gz+cXB4cX0A943td25aVLSmugPn+4/2P+fpzOjf05QrIaoMd0u1BpcZQTbYvKsnyoxVGLZfuw1P7gfUSGm9eBkuza+zaT7v2fMfLKgv4Njc0Ns+sMCnTrWyZ8gRiiJ/AYhksU70KZz5/DVqvkH/n2f5NNd8U85ey/z01X/mJ0h3yLa6/Nk11viIrdYrhrsNJty/iTxVuObnQlYhqB8vXPIkStHxZGHvDMI2B3Kn17iYzXdL0iabPFqseGDk8uC+ewqIJNBLDiBs8lUrXGLIrhZlttDGFukKMEYjWMERSSKbiYwZFID0OpTqQHjVDo5rNYCKIE340gmOE1+1321EXHPDDiQpMpP8Cj7LrDSB03l0AAAAASUVORK5CYII=" alt="featured image thumbnail for post Clean Architecture Sucks" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/122853a6b33d0b145944a824f9fbf747/ee6d0/clean-architecture-sucks.png 113w, /static/122853a6b33d0b145944a824f9fbf747/0c2b2/clean-architecture-sucks.png 225w, /static/122853a6b33d0b145944a824f9fbf747/31119/clean-architecture-sucks.png 450w, /static/122853a6b33d0b145944a824f9fbf747/ee814/clean-architecture-sucks.png 675w, /static/122853a6b33d0b145944a824f9fbf747/03620/clean-architecture-sucks.png 900w, /static/122853a6b33d0b145944a824f9fbf747/4e530/clean-architecture-sucks.png 1024w" sizes="(max-width: 450px) 100vw, 450px" /><img loading="lazy" sizes="(max-width: 450px) 100vw, 450px" srcset="/static/122853a6b33d0b145944a824f9fbf747/ee6d0/clean-architecture-sucks.png 113w, /static/122853a6b33d0b145944a824f9fbf747/0c2b2/clean-architecture-sucks.png 225w, /static/122853a6b33d0b145944a824f9fbf747/31119/clean-architecture-sucks.png 450w, /static/122853a6b33d0b145944a824f9fbf747/ee814/clean-architecture-sucks.png 675w, /static/122853a6b33d0b145944a824f9fbf747/03620/clean-architecture-sucks.png 900w, /static/122853a6b33d0b145944a824f9fbf747/4e530/clean-architecture-sucks.png 1024w" src="/static/122853a6b33d0b145944a824f9fbf747/31119/clean-architecture-sucks.png" alt="featured image thumbnail for post Clean Architecture Sucks" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/clean-architecture-sucks/">Clean Architecture Sucks</a><span> </span><span class="subtitle is-size-5 is-block">23 May 2024</span></p><p><br/>The other day I was participating in a conversation online in an architecture forum. One of the participants was complaining about the mess they were cleaning up from a team they'd joined. The team had, ostensibly, been following Clean Architecture, but the code they had produced was a mess. Their conclusion: Clean Architecture sucks. They led with: Clean Architecture and its obsession with…<br/><br/><a class="button" href="/clean-architecture-sucks/">Keep Reading →</a></p></article></div><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header><div class="featured-thumbnail"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:50.442477876106196%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACIUlEQVQozx2Q6U4aUQBGeSV/NKkbJjWxbdRGTWyqBQkDmoApOOhAB1lmuPfOducuc2dXrIqguLQx/dHna+QBTr7znYwGcK1xrvzs54q1Qklu90z5rPe9cLxfqKldBJF9VCiurqwVSnJXM+SC9CW7vDI3V9rdb3VQZmASh4hWB+7sHTssxDSkXnhQOvlxqnGREC/tqO2t9W0dUeJFzIvqud3P7xdshKHNMgOD2K4HDbyXl6P05v7h5WY0bXUsV1zeTZ5ux08h582Gkl5Nxg/PYTys575uLmaRbgGLZnTDtVwPE1YsN5lIR+PH65uHLiB+cn03eXz9+y8N/NZp83byMn36EydXSjm3uZg1gANmy66JGff9ljJwWSSCS2SycqWpI8K8KIiHNoClAwnZwg8vhJ9ocnVzecWEDrBm2obNwjhJXX94PX58fk3SUQ+Qi1/jyfRldP98GUdtRU2G4/vp79Hd1Lfgt7WPhm6+wTrCBuYeI0Cq2FhQETskrNTUPsTcT1iQIk2T8kXNYEzE1BXt4/L2UtaC9uwzxBAL1jiF23uz1DEmwcmZpvZtLhImLgwIpbwETM78hLGgW69uzS/pOtFNltGBg6jvbuxoC6sOD10eUR5Wa+26AoWfMpEayCgdHA5MTkVEadCrV9YXV4/Oh00QZLQ3OBh8+KS+W3B4gGlAveiwolTlvghSKhIAkJQvA5MRHrrE751UNuazjU6gQu8/9pIwBPeXE5AAAAAASUVORK5CYII=" alt="featured image thumbnail for post Navigating the Edges of Technology in Software Development: Bleeding, Leading, Dull, and Rusting" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/783bafeeb82888452c3332521dd3f4ae/ee6d0/technology-edges-bleeding-leading-dull-rusting.png 113w, /static/783bafeeb82888452c3332521dd3f4ae/0c2b2/technology-edges-bleeding-leading-dull-rusting.png 225w, /static/783bafeeb82888452c3332521dd3f4ae/31119/technology-edges-bleeding-leading-dull-rusting.png 450w, /static/783bafeeb82888452c3332521dd3f4ae/ee814/technology-edges-bleeding-leading-dull-rusting.png 675w, /static/783bafeeb82888452c3332521dd3f4ae/03620/technology-edges-bleeding-leading-dull-rusting.png 900w, /static/783bafeeb82888452c3332521dd3f4ae/4e530/technology-edges-bleeding-leading-dull-rusting.png 1024w" sizes="(max-width: 450px) 100vw, 450px" /><img loading="lazy" sizes="(max-width: 450px) 100vw, 450px" srcset="/static/783bafeeb82888452c3332521dd3f4ae/ee6d0/technology-edges-bleeding-leading-dull-rusting.png 113w, /static/783bafeeb82888452c3332521dd3f4ae/0c2b2/technology-edges-bleeding-leading-dull-rusting.png 225w, /static/783bafeeb82888452c3332521dd3f4ae/31119/technology-edges-bleeding-leading-dull-rusting.png 450w, /static/783bafeeb82888452c3332521dd3f4ae/ee814/technology-edges-bleeding-leading-dull-rusting.png 675w, /static/783bafeeb82888452c3332521dd3f4ae/03620/technology-edges-bleeding-leading-dull-rusting.png 900w, /static/783bafeeb82888452c3332521dd3f4ae/4e530/technology-edges-bleeding-leading-dull-rusting.png 1024w" src="/static/783bafeeb82888452c3332521dd3f4ae/31119/technology-edges-bleeding-leading-dull-rusting.png" alt="featured image thumbnail for post Navigating the Edges of Technology in Software Development: Bleeding, Leading, Dull, and Rusting" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/technology-edges-bleeding-leading-rusting/">Navigating the Edges of Technology in Software Development: Bleeding, Leading, Dull, and Rusting</a><span> </span><span class="subtitle is-size-5 is-block">19 April 2024</span></p><p><br/>In the fast-evolving world of software development, keeping pace with technology trends is both a necessity and a challenge. Companies and developers often find themselves making critical decisions about whether to adopt new technologies early (bleeding edge), wait until they mature (leading edge or cutting edge), or continue using older, more established technologies (what I'll call the dull edge…<br/><br/><a class="button" href="/technology-edges-bleeding-leading-rusting/">Keep Reading →</a></p></article></div><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header><div class="featured-thumbnail"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:56.63716814159292%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACqklEQVQozwGfAmD9ACconVhTtGdnuGJkuVVet1Zbt0FOtjtLskdTrTtYtSlApBoonREtnxw2mVJaZmZrZnBzcGVmbxIgXAAYQwAUM6g5VLVJYbxGX7o/V7dWbMBUar5wgchsf8lcbcBJXroNK6MYMq8wRYKSgXK2ko2wkYdlXVkhb5QJO3IAFzClEyykCiWgBSCfIjuqUWW8VGi+DyqjByKfCSahEy6kGDKlEi6qUFyGt5eDxI6Nv5SKoYt9K0FWBSdzABUvpR42qFZpvjlQsz1StGBywj9VtTpQs0ZauDFIsBcxpxUvphs2qGxzfL2Of8WMhcGGgbuiiVVljAAzewAVNKkYOKpMZL1dccNSar9hdsRhdMVgdsZVbr5RaL0RLqMYNKQRLaxGWYikhHK+eX60gXl4cWYfRHMERIsAJxuSNh+aEBmOHSeTQDieOjumLjmbPzmeKyWeKCGfKDmwDyulIUSqQWiSjHhowYd+wY97i4uEOUp5ARpVAFUpj2o5p3FMmFBIollDs1RLnj5Gl0M4mlApqjQXqxYVhktQomuPlS9RUS47Q2lWVl1SVEZjZZWxq3SQmwDj4+bl5+nRwdzFtNiMasjDruXU3uWqveE1YKYlJpY+O64/bGkqUlEWMz4RLToLJTYQLDswT1NOcG9Qb28A7ezu+fz1o4y+ek6voXTQwKPnzt/koLrbRW+qHyiOOVSQFjg5GTpCEzA5Eis2Eyg1GC44KkpNR2tnIztCAPX19vX09t/W6eLc67CM2tS97MTW5sbY53V5nyUPUSk4Tw4sMBUxOR85Qh81QBowPBcvOS1LT0JlZDxZWgCNi4qGgIZ9coGAdoN/dYN8c3+EdJGHesM6MU0PDxIlREUIGCEWNjosRUo1REwpO0QoPkgwRUw8WlwoQEMpWRGnjIhrdQAAAABJRU5ErkJggg==" alt="featured image thumbnail for post Stop Debugging and Start Running in Visual Studio" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/2770e9f7993e484c471178ad44cced3f/ee6d0/stop-debugging-start-running-visual-studio.png 113w, /static/2770e9f7993e484c471178ad44cced3f/0c2b2/stop-debugging-start-running-visual-studio.png 225w, /static/2770e9f7993e484c471178ad44cced3f/31119/stop-debugging-start-running-visual-studio.png 450w, /static/2770e9f7993e484c471178ad44cced3f/ee814/stop-debugging-start-running-visual-studio.png 675w, /static/2770e9f7993e484c471178ad44cced3f/03620/stop-debugging-start-running-visual-studio.png 900w, /static/2770e9f7993e484c471178ad44cced3f/54311/stop-debugging-start-running-visual-studio.png 1280w" sizes="(max-width: 450px) 100vw, 450px" /><img loading="lazy" sizes="(max-width: 450px) 100vw, 450px" srcset="/static/2770e9f7993e484c471178ad44cced3f/ee6d0/stop-debugging-start-running-visual-studio.png 113w, /static/2770e9f7993e484c471178ad44cced3f/0c2b2/stop-debugging-start-running-visual-studio.png 225w, /static/2770e9f7993e484c471178ad44cced3f/31119/stop-debugging-start-running-visual-studio.png 450w, /static/2770e9f7993e484c471178ad44cced3f/ee814/stop-debugging-start-running-visual-studio.png 675w, /static/2770e9f7993e484c471178ad44cced3f/03620/stop-debugging-start-running-visual-studio.png 900w, /static/2770e9f7993e484c471178ad44cced3f/54311/stop-debugging-start-running-visual-studio.png 1280w" src="/static/2770e9f7993e484c471178ad44cced3f/31119/stop-debugging-start-running-visual-studio.png" alt="featured image thumbnail for post Stop Debugging and Start Running in Visual Studio" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/stop-debugging-start-running-visual-studio/">Stop Debugging and Start Running in Visual Studio</a><span> </span><span class="subtitle is-size-5 is-block">18 April 2024</span></p><p><br/>NOTE: Watch the video above to see actual timings of starting with and without debugging. Vote for this feature request to make Run vs Debug more obvious in Visual Studio.. Thanks! I work with a lot of different .NET developers as a trainer, architect, and consultant with NimblePros. One thing that I'm frequently pointing out to them is the difference in startup speed for their applications when…<br/><br/><a class="button" href="/stop-debugging-start-running-visual-studio/">Keep Reading →</a></p></article></div><div class="is-parent column is-6"><article class="blog-list-item tile is-child box notification "><header><div class="featured-thumbnail"><div class=" gatsby-image-wrapper" style="position:relative;overflow:hidden;border-radius:5px"><div aria-hidden="true" style="width:100%;padding-bottom:56.63716814159292%"></div><img aria-hidden="true" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAIAAADwazoUAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACqklEQVQozwGfAmD9ACkpnSYnoS82o1xet2lvv1xhuk5avGFswVdgtBQ0phoxnhkpoSE3lXZjf7acpX50kg85ZwMaTQoaWQIaRAATM6gPL6YmQq9fdMRzhstxhMpzhcpugMhidsUYMqYVMaYSMqpMS4a9kZTTnaS0lZstO3QAMHMIaZ0OPXEAFzClGDGmFjClDyqjCSWhOU6yGTOnDCiiEi2kFjGmFzGlEi+mcmmQw46PwYaSz6ama1eHAwAyAx0/CSp2ABcwpRcxpRYwpRw2qEFWtmN1w05iuhgzphgypxcxphYwph03pntqgsaMkc2JlciWlXiYpw88mQYgewU6ewAUM6gSM6gRL6YkPq2SotdrfseFlNNZb8MPMKQUNKUTLqMSL61OUouqf3/Bho2phoxDQoEAHmQDMW0KSY4ALSGYPCSfHiiWIC6VPDSdLzGjLzqdPTidMCugLiOiLkOuLVOfODp4mW54unp/pYiPZnuzQ0+dBxpdAh1WADoGcEwZkFsoiDYgkz8vqzw0kyIphzgklUMYoUYxsl90nElObCMaTisgVkc0YmJuiISepKS+xX6ivQ1ViQBOFX4sIXJqJaNmI7Q+PrNKTLZiSb1IWtQaQ6RLXIxGUm0jHlUoI1cfGlIrJ15daoRaaIM3OGJ/jJtTfKQATyjaXTjbnYvqgGjio4vohGbil4HoU0PROl+0WnWRNDhhFxNFJiFWJR9UKSNYTExzSUhwKChXW2qDZ36WAE8o02tL2pyF56uY6q2b63lc3oNp4UA3x1pcp8nFvbaalkYyTTYvV0Y8YzIsWTkzXzoyXldbeKGvtqW0uwBKJ8BbPMRWNMJbO8NlSMZcPcRaNsdCH8aBcajy0bb/3sS5losdCCoZCzQdDjcdDDUTAC6mjY7//+v7+u/7cAlSDi+m5gAAAABJRU5ErkJggg==" alt="featured image thumbnail for post 5 Rules for DTOs" style="position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;object-position:center;opacity:1;transition-delay:500ms"/><noscript><picture><source srcset="/static/91daa50bf1dfd2df7f2b1641e22251d2/ee6d0/5-Rules-DTOs.png 113w, /static/91daa50bf1dfd2df7f2b1641e22251d2/0c2b2/5-Rules-DTOs.png 225w, /static/91daa50bf1dfd2df7f2b1641e22251d2/31119/5-Rules-DTOs.png 450w, /static/91daa50bf1dfd2df7f2b1641e22251d2/ee814/5-Rules-DTOs.png 675w, /static/91daa50bf1dfd2df7f2b1641e22251d2/03620/5-Rules-DTOs.png 900w, /static/91daa50bf1dfd2df7f2b1641e22251d2/54311/5-Rules-DTOs.png 1280w" sizes="(max-width: 450px) 100vw, 450px" /><img loading="lazy" sizes="(max-width: 450px) 100vw, 450px" srcset="/static/91daa50bf1dfd2df7f2b1641e22251d2/ee6d0/5-Rules-DTOs.png 113w, /static/91daa50bf1dfd2df7f2b1641e22251d2/0c2b2/5-Rules-DTOs.png 225w, /static/91daa50bf1dfd2df7f2b1641e22251d2/31119/5-Rules-DTOs.png 450w, /static/91daa50bf1dfd2df7f2b1641e22251d2/ee814/5-Rules-DTOs.png 675w, /static/91daa50bf1dfd2df7f2b1641e22251d2/03620/5-Rules-DTOs.png 900w, /static/91daa50bf1dfd2df7f2b1641e22251d2/54311/5-Rules-DTOs.png 1280w" src="/static/91daa50bf1dfd2df7f2b1641e22251d2/31119/5-Rules-DTOs.png" alt="featured image thumbnail for post 5 Rules for DTOs" style="position:absolute;top:0;left:0;opacity:1;width:100%;height:100%;object-fit:cover;object-position:center"/></picture></noscript></div></div></header><p class="post-meta"><a class="title has-text-primary is-size-4" href="/5-rules-dtos/">5 Rules for DTOs</a><span> </span><span class="subtitle is-size-5 is-block">06 April 2024</span></p><p><br/>If you don't like reading, here's my YouTube video with samples that covers why these 5 rules will help you write better DTOs: What's a DTO? A DTO is a Data Transfer Object. Its job is to transfer data, and it can be used both to send data and to receive it. Often, data transferred will use different types (possibly even different programming languages and technology stacks) on each end of the…<br/><br/><a class="button" href="/5-rules-dtos/">Keep Reading →</a></p></article></div></div><div class="column is-12 has-text-centered"><a class="btn" href="/blog">Read more</a></div></div></article></div></div></div><div><header><div><div class="tile is-parent"><article class="tile is-child box"><div class="sidebar" id="sidebar"><div class="content has-text-centered"><div class="content-card"><div class="card-sidebar"><div class="firstinfo"><img src="/static/steve-smith-ardalis-200x200-e9fab63b806b33a2ee3ded4a954bbdfa.jpg" alt="Steve Smith"/><div class="profileinfo"><h1>About Ardalis</h1><h3>Software Architect</h3><p class="bio">Steve is an experienced software architect and trainer, focusing on code quality and Domain-Driven Design with .NET.</p></div></div></div></div></div><div style="padding:8px;margin-left:10px">Get a <a href="/tips">Free Developer Tip</a> in your inbox every Wednesday.</div><div><a href="/search"><h2 style="font-size:22px;padding:7px;margin-left:15px;font-weight:BOLD"><span role="img" aria-label="magnifying glass">🔍</span> SEARCH</h2></a></div> <br/><div><h2 style="font-size:22px;padding:7px;margin-left:15px;font-weight:BOLD"><span role="img" aria-label="graduation cap">🎓</span> ONLINE TRAINING</h2></div> <br/><div class="recent-post"><ul class="recent-post"><li><a href="https://dometrain.com/bundle/from-zero-to-hero-modular-monoliths-in-dotnet/">From Zero to Hero: Modular Monoliths in .NET</a></li><li><a href="https://www.pluralsight.com/courses/refactoring-solid-c-sharp-code">Refactoring to SOLID C# Code</a> NEW!</li><li><a href="https://www.pluralsight.com/courses/aspdotnet-core-6-web-api-best-practices">ASP.NET Core 6 Web API: Best Practices</a></li><li><a href="https://www.pluralsight.com/courses/working-c-sharp-generics-best-practices">Working with C# Generics: Best Practices</a></li><li><a href="https://www.pluralsight.com/courses/fundamentals-domain-driven-design">Domain-Driven Design Fundamentals</a></li><li><a href="https://www.pluralsight.com/courses/refactoring-csharp-developers">Refactoring for C# Devs</a></li><li><a href="https://www.pluralsight.com/courses/kanban-getting-started">Kanban: Getting Started</a></li><li><a href="https://www.pluralsight.com/courses/csharp-solid-principles">SOLID Principles for C# Devs</a></li><li><a href="https://www.pluralsight.com/courses/design-patterns-overview">Design Patterns Overview</a></li></ul></div> <br/><div class="recent-post"><h2 style="font-size:22px;padding:7px;font-weight:BOLD"><span role="img" aria-label="clipboard">📋</span> CATEGORIES</h2> <br/><ul class="recent-post" style="text-transform:uppercase"><li><a href="/category/career-advice/">Career Advice<!-- --> (<!-- -->2<!-- -->)</a></li><li><a href="/category/iraq/">Iraq<!-- --> (<!-- -->158<!-- -->)</a></li><li><a href="/category/personal/">Personal<!-- --> (<!-- -->37<!-- -->)</a></li><li><a href="/category/productivity/">Productivity<!-- --> (<!-- -->168<!-- -->)</a></li><li><a href="/category/security/">Security<!-- --> (<!-- -->7<!-- -->)</a></li><li><a href="/category/software-development/">Software Development<!-- --> (<!-- -->960<!-- -->)</a></li><li><a href="/category/uncategorized/">Uncategorized<!-- --> (<!-- -->435<!-- -->)</a></li></ul> </div><div><br/><h4 style="font-size:22px;padding:7px;margin-left:15px;font-weight:BOLD"><span role="img" aria-label="book">📘</span> FREE ARCHITECTURE EBOOK</h4><br/><center><a href="/architecture-ebook"><img src="/static/Architecture-eBook-Cover-242x300-09d775f8f28cb004b00c47b84c574494.png" alt="book"/></a><h4><a href="/architecture-ebook">Get the Book!</a></h4></center><br/><h1 style="font-size:22px;padding:7px;margin-left:15px;font-weight:BOLD"><span role="img" aria-label="pen">🖊️</span> RECENT ARTICLES</h1><br/><div class="columns is-multiline"><div><article><header><div class="recent-post"><ul class="recent-post"><li><a href="/interfaces-describe-what-implementations-describe-how/">Interfaces Describe What - Implementations Describe How</a></li></ul></div></header></article></div><div><article><header><div class="recent-post"><ul class="recent-post"><li><a href="/you-should-blog/">You Should Blog</a></li></ul></div></header></article></div><div><article><header><div class="recent-post"><ul class="recent-post"><li><a href="/from-microservices-to-modular-monoliths/">From Microservices to Modular Monoliths</a></li></ul></div></header></article></div><div><article><header><div class="recent-post"><ul class="recent-post"><li><a href="/navigation-properties-between-aggregates-modules/">Modeling Navigation Properties Between Aggregates or Modules</a></li></ul></div></header></article></div><div><article><header><div class="recent-post"><ul class="recent-post"><li><a href="/comparing-unit-testable-code-with-maintainable-code/">Comparing Unit Testable Code with Maintainable Code</a></li></ul></div></header></article></div></div><br/><h1 style="font-size:22px;padding:7px;margin-left:15px;font-weight:BOLD"><span role="img" aria-label="bird">🐦</span> RECENT TWEETS</h1><a class="twitter-timeline" data-width="400" data-height="800" data-theme="light" href="https://twitter.com/ardalis?ref_src=twsrc%5Etfw" data-chrome="noscrollbar">Tweets by ardalis</a><script async="" src="https://platform.twitter.com/widgets.js" charSet="utf-8" type="text/javascript"></script></div><div></div></div></article></div></div></header></div></div></div></div></section></div></div><footer class="footer has-background-black has-text-white-ter"><div class="content has-text-centered has-background-black has-text-white-ter"><div class="container has-background-black has-text-white-ter"><div class="columns"><div class="column is-4"><form action="https://www.google.com/search" method="get"><input type="hidden" name="q" value="site:ardalis.com"/><input type="text" name="q" alt="search" class="googletextbox"/><input type="submit" value="Search my Site with Google" class="googletextbox"/></form><br/><a href="/interviews/">Interviews</a><br/><a href="/contact">Contact</a></div><div class="column is-4"><div class="content has-text-centered"><img src="data:image/png;base64,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" alt="Ardalis" style="width:5em;height:5em"/><p>Copyright © 2024</p><br/></div></div><div class="column is-4 social"><a title="facebook" href="https://www.facebook.com/StevenAndrewSmith"><img src="data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+RmFjZWJvb2sgaWNvbjwvdGl0bGU+PHBhdGggZD0iTTIyLjY3NiAwSDEuMzI0Qy41OTMgMCAwIC41OTMgMCAxLjMyNHYyMS4zNTJDMCAyMy40MDguNTkzIDI0IDEuMzI0IDI0aDExLjQ5NHYtOS4yOTRIOS42ODl2LTMuNjIxaDMuMTI5VjguNDFjMC0zLjA5OSAxLjg5NC00Ljc4NSA0LjY1OS00Ljc4NSAxLjMyNSAwIDIuNDY0LjA5NyAyLjc5Ni4xNDF2My4yNGgtMS45MjFjLTEuNSAwLTEuNzkyLjcyMS0xLjc5MiAxLjc3MXYyLjMxMWgzLjU4NGwtLjQ2NSAzLjYzSDE2LjU2VjI0aDYuMTE1Yy43MzMgMCAxLjMyNS0uNTkyIDEuMzI1LTEuMzI0VjEuMzI0QzI0IC41OTMgMjMuNDA4IDAgMjIuNjc2IDAiLz48L3N2Zz4=" alt="Facebook" style="width:1em;height:1em"/></a><a title="linkedin" href="https://www.linkedin.com/in/stevenandrewsmith"><img src="data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+TGlua2VkSW4gaWNvbjwvdGl0bGU+PHBhdGggZD0iTTIwLjQ0NyAyMC40NTJoLTMuNTU0di01LjU2OWMwLTEuMzI4LS4wMjctMy4wMzctMS44NTItMy4wMzctMS44NTMgMC0yLjEzNiAxLjQ0NS0yLjEzNiAyLjkzOXY1LjY2N0g5LjM1MVY5aDMuNDE0djEuNTYxaC4wNDZjLjQ3Ny0uOSAxLjYzNy0xLjg1IDMuMzctMS44NSAzLjYwMSAwIDQuMjY3IDIuMzcgNC4yNjcgNS40NTV2Ni4yODZ6TTUuMzM3IDcuNDMzYy0xLjE0NCAwLTIuMDYzLS45MjYtMi4wNjMtMi4wNjUgMC0xLjEzOC45Mi0yLjA2MyAyLjA2My0yLjA2MyAxLjE0IDAgMi4wNjQuOTI1IDIuMDY0IDIuMDYzIDAgMS4xMzktLjkyNSAyLjA2NS0yLjA2NCAyLjA2NXptMS43ODIgMTMuMDE5SDMuNTU1VjloMy41NjR2MTEuNDUyek0yMi4yMjUgMEgxLjc3MUMuNzkyIDAgMCAuNzc0IDAgMS43Mjl2MjAuNTQyQzAgMjMuMjI3Ljc5MiAyNCAxLjc3MSAyNGgyMC40NTFDMjMuMiAyNCAyNCAyMy4yMjcgMjQgMjIuMjcxVjEuNzI5QzI0IC43NzQgMjMuMiAwIDIyLjIyMiAwaC4wMDN6Ii8+PC9zdmc+" alt="Linkedin" style="width:1em;height:1em"/></a><a title="twitter" href="https://twitter.com/ardalis"><img class="fas fa-lg" src="data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+VHdpdHRlciBpY29uPC90aXRsZT48cGF0aCBkPSJNMjMuOTU0IDQuNTY5Yy0uODg1LjM4OS0xLjgzLjY1NC0yLjgyNS43NzUgMS4wMTQtLjYxMSAxLjc5NC0xLjU3NCAyLjE2My0yLjcyMy0uOTUxLjU1NS0yLjAwNS45NTktMy4xMjcgMS4xODQtLjg5Ni0uOTU5LTIuMTczLTEuNTU5LTMuNTkxLTEuNTU5LTIuNzE3IDAtNC45MiAyLjIwMy00LjkyIDQuOTE3IDAgLjM5LjA0NS43NjUuMTI3IDEuMTI0QzcuNjkxIDguMDk0IDQuMDY2IDYuMTMgMS42NCAzLjE2MWMtLjQyNy43MjItLjY2NiAxLjU2MS0uNjY2IDIuNDc1IDAgMS43MS44NyAzLjIxMyAyLjE4OCA0LjA5Ni0uODA3LS4wMjYtMS41NjYtLjI0OC0yLjIyOC0uNjE2di4wNjFjMCAyLjM4NSAxLjY5MyA0LjM3NCAzLjk0NiA0LjgyNy0uNDEzLjExMS0uODQ5LjE3MS0xLjI5Ni4xNzEtLjMxNCAwLS42MTUtLjAzLS45MTYtLjA4Ni42MzEgMS45NTMgMi40NDUgMy4zNzcgNC42MDQgMy40MTctMS42OCAxLjMxOS0zLjgwOSAyLjEwNS02LjEwMiAyLjEwNS0uMzkgMC0uNzc5LS4wMjMtMS4xNy0uMDY3IDIuMTg5IDEuMzk0IDQuNzY4IDIuMjA5IDcuNTU3IDIuMjA5IDkuMDU0IDAgMTMuOTk5LTcuNDk2IDEzLjk5OS0xMy45ODYgMC0uMjA5IDAtLjQyLS4wMTUtLjYzLjk2MS0uNjg5IDEuOC0xLjU2IDIuNDYtMi41NDhsLS4wNDctLjAyeiIvPjwvc3ZnPg==" alt="Twitter" style="width:1em;height:1em"/></a><a title="youtube" href="https://www.youtube.com/ardalis/"><img src="data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDI0IDI0Ij48dGl0bGU+WW91VHViZSBpY29uPC90aXRsZT48cGF0aCBkPSJNMjMuNDk1IDYuMjA1YTMuMDA3IDMuMDA3IDAgMCAwLTIuMDg4LTIuMDg4Yy0xLjg3LS41MDEtOS4zOTYtLjUwMS05LjM5Ni0uNTAxcy03LjUwNy0uMDEtOS4zOTYuNTAxQTMuMDA3IDMuMDA3IDAgMCAwIC41MjcgNi4yMDVhMzEuMjQ3IDMxLjI0NyAwIDAgMC0uNTIyIDUuODA1IDMxLjI0NyAzMS4yNDcgMCAwIDAgLjUyMiA1Ljc4MyAzLjAwNyAzLjAwNyAwIDAgMCAyLjA4OCAyLjA4OGMxLjg2OC41MDIgOS4zOTYuNTAyIDkuMzk2LjUwMnM3LjUwNiAwIDkuMzk2LS41MDJhMy4wMDcgMy4wMDcgMCAwIDAgMi4wODgtMi4wODggMzEuMjQ3IDMxLjI0NyAwIDAgMCAuNS01Ljc4MyAzMS4yNDcgMzEuMjQ3IDAgMCAwLS41LTUuODA1ek05LjYwOSAxNS42MDFWOC40MDhsNi4yNjQgMy42MDJ6Ii8+PC9zdmc+" alt="YouTube" style="width:1em;height:1em"/></a><a title="github" href="https://github.com/ardalis"><img src="data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+R2l0SHViIGljb248L3RpdGxlPjxwYXRoIGQ9Ik0xMiAuMjk3Yy02LjYzIDAtMTIgNS4zNzMtMTIgMTIgMCA1LjMwMyAzLjQzOCA5LjggOC4yMDUgMTEuMzg1LjYuMTEzLjgyLS4yNTguODItLjU3NyAwLS4yODUtLjAxLTEuMDQtLjAxNS0yLjA0LTMuMzM4LjcyNC00LjA0Mi0xLjYxLTQuMDQyLTEuNjFDNC40MjIgMTguMDcgMy42MzMgMTcuNyAzLjYzMyAxNy43Yy0xLjA4Ny0uNzQ0LjA4NC0uNzI5LjA4NC0uNzI5IDEuMjA1LjA4NCAxLjgzOCAxLjIzNiAxLjgzOCAxLjIzNiAxLjA3IDEuODM1IDIuODA5IDEuMzA1IDMuNDk1Ljk5OC4xMDgtLjc3Ni40MTctMS4zMDUuNzYtMS42MDUtMi42NjUtLjMtNS40NjYtMS4zMzItNS40NjYtNS45MyAwLTEuMzEuNDY1LTIuMzggMS4yMzUtMy4yMi0uMTM1LS4zMDMtLjU0LTEuNTIzLjEwNS0zLjE3NiAwIDAgMS4wMDUtLjMyMiAzLjMgMS4yMy45Ni0uMjY3IDEuOTgtLjM5OSAzLS40MDUgMS4wMi4wMDYgMi4wNC4xMzggMyAuNDA1IDIuMjgtMS41NTIgMy4yODUtMS4yMyAzLjI4NS0xLjIzLjY0NSAxLjY1My4yNCAyLjg3My4xMiAzLjE3Ni43NjUuODQgMS4yMyAxLjkxIDEuMjMgMy4yMiAwIDQuNjEtMi44MDUgNS42MjUtNS40NzUgNS45Mi40Mi4zNi44MSAxLjA5Ni44MSAyLjIyIDAgMS42MDYtLjAxNSAyLjg5Ni0uMDE1IDMuMjg2IDAgLjMxNS4yMS42OS44MjUuNTdDMjAuNTY1IDIyLjA5MiAyNCAxNy41OTIgMjQgMTIuMjk3YzAtNi42MjctNS4zNzMtMTItMTItMTIiLz48L3N2Zz4=" alt="GitHub" style="width:1em;height:1em"/></a><a title="mastodon" rel="me" href="https://fosstodon.org/@ardalis">Mastodon</a></div></div><div class="columns"><div class="column is-12"> <br/></div></div></div></div></footer></div></div><div id="gatsby-announcer" style="position:absolute;top:0;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0" aria-live="assertive" aria-atomic="true"></div></div><script id="gatsby-script-loader">/*<![CDATA[*/window.pagePath="/";window.___webpackCompilationHash="9f072ce39b8c45e776d8";/*]]>*/</script><script id="gatsby-chunk-mapping">/*<![CDATA[*/window.___chunkMapping={"polyfill":["/polyfill-7da9e88def8c798a4eb9.js"],"app":["/app-405db4ecfef604df7c88.js"],"component---src-pages-404-js":["/component---src-pages-404-js-1976de88f000a167ddcd.js"],"component---src-pages-blog-xxindex-js":["/component---src-pages-blog-xxindex-js-6bcf93906ae77ae2d8f9.js"],"component---src-pages-category-index-js":["/component---src-pages-category-index-js-48d61f4a46bb641b8956.js"],"component---src-pages-contact-us-index-js":["/component---src-pages-contact-us-index-js-5b411c187d58149838fb.js"],"component---src-pages-contact-us-thanks-js":["/component---src-pages-contact-us-thanks-js-4628b8a932d6ba8aab4f.js"],"component---src-pages-search-js":["/component---src-pages-search-js-a08b213b54d487a46d0b.js"],"component---src-pages-tags-index-js":["/component---src-pages-tags-index-js-19205344ecd0edc99e53.js"],"component---src-templates-assessments-page-js":["/component---src-templates-assessments-page-js-6eb574b0cb3280515679.js"],"component---src-templates-blog-list-js":["/component---src-templates-blog-list-js-0654f80ec4fb1083e770.js"],"component---src-templates-blog-post-js":["/component---src-templates-blog-post-js-a0b924a3ca1633ff2ab9.js"],"component---src-templates-category-js":["/component---src-templates-category-js-fcf4126d77453579328c.js"],"component---src-templates-ebook-page-js":["/component---src-templates-ebook-page-js-bd3cc1f64c724e6b2225.js"],"component---src-templates-index-page-js":["/component---src-templates-index-page-js-e858569f1b057f1865d5.js"],"component---src-templates-interviews-page-js":["/component---src-templates-interviews-page-js-ba4485a2c98fe4cbe0d7.js"],"component---src-templates-mentoring-page-js":["/component---src-templates-mentoring-page-js-5bb43e188b85eb0ea5d8.js"],"component---src-templates-software-craftsmanship-2016-wall-calendar-sponsorship-page-js":["/component---src-templates-software-craftsmanship-2016-wall-calendar-sponsorship-page-js-336fba6ad39c3dd88394.js"],"component---src-templates-tags-js":["/component---src-templates-tags-js-be64cf526cda48ad19f7.js"],"component---src-templates-tips-page-js":["/component---src-templates-tips-page-js-46547b7f6de4bc8075e7.js"],"component---src-templates-tools-used-page-js":["/component---src-templates-tools-used-page-js-57cf6d51808846c98f3d.js"],"component---src-templates-training-classes-page-js":["/component---src-templates-training-classes-page-js-9f8bb3852c890a4a7db3.js"]};/*]]>*/</script><script src="/polyfill-7da9e88def8c798a4eb9.js" nomodule=""></script><script src="/app-405db4ecfef604df7c88.js" async=""></script><script src="/532a2f07-f97befafd74bf8dd0311.js" async=""></script><script src="/framework-3a4fd0dc0ae7f6fdcce7.js" async=""></script><script src="/webpack-runtime-3c5edcbff810762fe2d4.js" async=""></script></body></html>