<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>Matt Terski's Blog</title>
    <link>http://www.terski.com/blog/</link>
    <description>Writing tomorrow's legacy applications today</description>
    <copyright>Matt Terski</copyright>
    <lastBuildDate>Sat, 11 Jun 2005 04:17:08 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.7.5016.0</generator>
    <managingEditor>blogg@terski.com</managingEditor>
    <webMaster>blogg@terski.com</webMaster>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,1df88858-fe09-4bd4-986f-699a6bff3e75.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,1df88858-fe09-4bd4-986f-699a6bff3e75.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,1df88858-fe09-4bd4-986f-699a6bff3e75.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=1df88858-fe09-4bd4-986f-699a6bff3e75</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.damonpayne.com/PermaLink,guid,5d81269b-1b34-4407-9cb3-3a462f4dfa70.aspx">Damon
      seems fired-up </a>about the new DSL tools in Visual Studio 2005. But he asks:
   </p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>Why limit the use of this tool to visual studio users?  Suppose you work
      in a business with a fairly well defined domain, such as selling mutual funds for
      a specific company.  If you could define your domain entities, attributes, connections,
      rules, etc and then put this tool into the hands of people like, oh, say, business
      analysts you may have a very powerful code-generation and/or documentation tool that
      is usable by the people who supposedly know the business best.</em>
          </p>
        </blockquote>
        <p>
      I'll tell you why.
   </p>
        <p>
      When presented with the idea, most people will claim they want a tool that allows
      a domain expert, rather than a software developer, to create software. Or at least
      they’ll say they want a tool that lets the domain expert <em>configure</em> or <em>assemble</em> software.
      After all, who knows the business better than a business person? Give these people
      a nice DSL tool or BizTalk and let <em>them</em> construct the system.
   </p>
        <p>
      In my experience, however, I've found this desire is not genuine. It's incredibly
      difficult to get the business folks to commit to a domain model. I’m not implying
      that we developers are necessarily any smarter or more analytical, but we’re better
      equipped – and more interested – in creating a logical domain model of a business
      than a business person is. If you, the developer, create a domain model, a business
      expert can probably tell you where the model falls short of reality. But I’ve yet
      to meet a business person that could synthesize a good domain model. Get five business
      experts in the room and you’ll get five varying models (of the same business).
   </p>
        <p>
      More importantly, business folks don’t really want responsibility for the solution.
      For most developers, our work is an expense to the business and the business will
      (rightly) try to minimize that expense. A company needs to keep its toilets operating;
      this is another expense. The company also wants to spend as little money as possible
      on toilet operation. But, when a toilet breaks, the business folks don’t want an easy-to-use,
      next-generation set of pipe-wrenches. They want a plumber – someone with valuable
      expertise in something other than the business’ own core-competency.
   </p>
        <p>
      Likewise, a company needs to keep its software operating. The moment a business person
      makes a software change that unexpectedly halts the inflow of revenue, they won’t
      want a great tool. “They'll want a throat to choke,” as my friend Philippe says.
   </p>
        <p>
      Despite these comments, I’m a firm believer in modeling tools. I think they are useful
      and will become increasingly effective. But they won’t turn business analysts into
      programmers. They will be used by software developers to make ourselves more productive
      – much like a better pipe wrench could make a plumber more productive. These tools
      will alter the nature of our work, and businesses will earn a better return on their
      software development investment. But the role of the software developer won't be going
      away. Luckily for us, nearly all companies need toilets and software to stay in business.
   </p>
        <img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=1df88858-fe09-4bd4-986f-699a6bff3e75" />
      </body>
      <title>Business Analysts and DSL Tools</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,1df88858-fe09-4bd4-986f-699a6bff3e75.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,1df88858-fe09-4bd4-986f-699a6bff3e75.aspx</link>
      <pubDate>Sat, 11 Jun 2005 04:17:08 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://www.damonpayne.com/PermaLink,guid,5d81269b-1b34-4407-9cb3-3a462f4dfa70.aspx"&gt;Damon
   seems fired-up &lt;/a&gt;about the new DSL tools in Visual Studio 2005. But he asks:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
   &lt;em&gt;Why limit the use of this tool to visual studio users?&amp;nbsp; Suppose you work
   in a business with a fairly well defined domain, such as selling mutual funds for
   a specific company.&amp;nbsp; If you could define your domain entities, attributes, connections,
   rules, etc and then put this tool into the hands of people like, oh, say, business
   analysts you may have a very powerful code-generation and/or documentation tool that
   is usable by the people who supposedly know the business best.&lt;/em&gt; 
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   I'll tell you why.
&lt;/p&gt;
&lt;p&gt;
   When presented with the idea, most people will claim they want a tool that allows
   a domain expert, rather than a software developer, to create software. Or at least
   they’ll say they want a tool that lets the domain expert &lt;em&gt;configure&lt;/em&gt; or &lt;em&gt;assemble&lt;/em&gt; software.
   After all, who knows the business better than a business person? Give these people
   a nice DSL tool or BizTalk and let &lt;em&gt;them&lt;/em&gt; construct the system.
&lt;/p&gt;
&lt;p&gt;
   In my experience, however, I've found this desire is not genuine. It's incredibly
   difficult to get the business folks to commit to a domain model. I’m not implying
   that we developers are necessarily any smarter or more analytical, but we’re better
   equipped – and more interested – in creating a logical domain model of a business
   than a business person is. If you, the developer, create a domain model, a business
   expert can probably tell you where the model falls short of reality. But I’ve yet
   to meet a business person that could synthesize a good domain model. Get five business
   experts in the room and you’ll get five varying models (of the same business).
&lt;/p&gt;
&lt;p&gt;
   More importantly, business folks don’t really want responsibility for the solution.
   For most developers, our work is an expense to the business and the business will
   (rightly) try to minimize that expense. A company needs to keep its toilets operating;
   this is another expense. The company also wants to spend as little money as possible
   on toilet operation. But, when a toilet breaks, the business folks don’t want an easy-to-use,
   next-generation set of pipe-wrenches. They want a plumber – someone with valuable
   expertise in something other than the business’ own core-competency.
&lt;/p&gt;
&lt;p&gt;
   Likewise, a company needs to keep its software operating. The moment a business person
   makes a software change that unexpectedly halts the inflow of revenue, they won’t
   want a great tool. “They'll want a throat to choke,” as my friend Philippe says.
&lt;/p&gt;
&lt;p&gt;
   Despite these comments, I’m a firm believer in modeling tools. I think they are useful
   and will become increasingly effective. But they won’t turn business analysts into
   programmers. They will be used by software developers to make ourselves more productive
   – much like a better pipe wrench could make a plumber more productive. These tools
   will alter the nature of our work, and businesses will earn a better return on their
   software development investment. But the role of the software developer won't be going
   away. Luckily for us, nearly all companies need toilets and software to stay in business.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=1df88858-fe09-4bd4-986f-699a6bff3e75"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,1df88858-fe09-4bd4-986f-699a6bff3e75.aspx</comments>
      <category>Business</category>
    </item>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,af58ad62-f89c-42d5-964c-ba6f0a345131.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,af58ad62-f89c-42d5-964c-ba6f0a345131.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,af58ad62-f89c-42d5-964c-ba6f0a345131.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=af58ad62-f89c-42d5-964c-ba6f0a345131</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      [<a href="http://www.booch.com/architecture/blog.jsp">Grady Booch</a>] ... <em>Glen
      Vandergurg's collection of </em><a href="http://www.vanderburg.org/Misc/Quotes/soft-quotes.html"><em>quotations
      on software design</em></a><em> make for fun reading.</em></p>
        <p>
      I've seen many of these before. A few that I haven't are hilarious.
   </p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>To a database person, every nail looks like a thumb. Or something like that. </em>
          </p>
        </blockquote>
        <p align="right">
          <em>- Jamie Zawinski</em>
        </p>
        <img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=af58ad62-f89c-42d5-964c-ba6f0a345131" />
      </body>
      <title>Quotations on Software Design</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,af58ad62-f89c-42d5-964c-ba6f0a345131.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,af58ad62-f89c-42d5-964c-ba6f0a345131.aspx</link>
      <pubDate>Fri, 13 May 2005 03:16:08 GMT</pubDate>
      <description>&lt;p&gt;
   [&lt;a href="http://www.booch.com/architecture/blog.jsp"&gt;Grady Booch&lt;/a&gt;] ... &lt;em&gt;Glen
   Vandergurg's collection of &lt;/em&gt;&lt;a href="http://www.vanderburg.org/Misc/Quotes/soft-quotes.html"&gt;&lt;em&gt;quotations
   on software design&lt;/em&gt;&lt;/a&gt;&lt;em&gt; make for fun reading.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
   I've seen many of these before. A few that I haven't are hilarious.
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
   &lt;em&gt;To a database person, every nail looks like a thumb. Or something like that. &lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p align=right&gt;
   &lt;em&gt;- Jamie Zawinski&lt;/em&gt; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=af58ad62-f89c-42d5-964c-ba6f0a345131"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,af58ad62-f89c-42d5-964c-ba6f0a345131.aspx</comments>
      <category>Software Engineering</category>
    </item>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,eb19f5e4-e255-4ad7-95e9-a5982c4400f1.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,eb19f5e4-e255-4ad7-95e9-a5982c4400f1.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,eb19f5e4-e255-4ad7-95e9-a5982c4400f1.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=eb19f5e4-e255-4ad7-95e9-a5982c4400f1</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Bob Parsons, the founder and president of GoDaddy.com, has a <a href="http://www.bobparsons.com/">blog</a>. There
      are at least five reasons why this is guy interesting.
   </p>
        <p>
      First, I know everybody has a blog these days, but I’m still surprised when I see
      an executive of any sizeable corporation blogging (without a ghost writer). Today,
      an executive identity and opinion that is separate from a meticulously-crafted corporate
      message feels strangely out of place (not that I mind).
   </p>
        <p>
      Second, Bob has unconventional opinions. When most technology companies are trying
      to find ways to cut costs through offshoring, he <a href="http://www.bobparsons.com/OffshoreOutsourcingItsnotforGoDaddyt.html">posts
      a contrarian view</a>:
   </p>
        <blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
          <p>
            <em>I can tell you right now, Go Daddy is simply not interested in moving its operations
      offshore.</em>
          </p>
        </blockquote>
        <p dir="ltr">
      Bob seems to (rightly) regard software engineering as a source of competitive
      advantage, rather than an short-term expense that should be minimized regardless of
      long-term consequence.
   </p>
        <p dir="ltr">
      Third, there’s the controversy around <a href="http://news.google.com/news?q=go%20daddy%20superbowl%20commercial">Go
      Daddy’s Super Bowl commercials</a>. Conventional wisdom is that a little-known dot
      com should not purchase a spot in the Super Bowl. That was conventional wisdom circa
      2001. But the commercials were a big success for Go Daddy.
   </p>
        <p dir="ltr">
      Fourth, there are lots of programmers who spout opinions in blogs. Not all of them
      have created software companies with $100,000,000 in annual revenue.
   </p>
        <p dir="ltr">
      Fifth and finally, he has rules to live by — <a href="http://www.bobparsons.com/RoberttheycanteatyouMyrulesforsurvivalt.html">sixteen
      of them</a>.
   </p>
        <img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=eb19f5e4-e255-4ad7-95e9-a5982c4400f1" />
      </body>
      <title>Go Daddy</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,eb19f5e4-e255-4ad7-95e9-a5982c4400f1.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,eb19f5e4-e255-4ad7-95e9-a5982c4400f1.aspx</link>
      <pubDate>Wed, 23 Feb 2005 03:36:20 GMT</pubDate>
      <description>&lt;p&gt;
   Bob Parsons, the founder and president of GoDaddy.com, has a &lt;a href="http://www.bobparsons.com/"&gt;blog&lt;/a&gt;.&amp;nbsp;There
   are at least five reasons why&amp;nbsp;this is guy interesting.
&lt;/p&gt;
&lt;p&gt;
   First, I know everybody has a blog these days, but I’m still surprised when I see
   an executive of any sizeable corporation blogging (without a ghost writer). Today,
   an executive identity and opinion that is separate from a meticulously-crafted corporate
   message feels strangely out of place (not that I mind).
&lt;/p&gt;
&lt;p&gt;
   Second, Bob has&amp;nbsp;unconventional opinions. When most technology companies are trying
   to find ways to cut costs through offshoring,&amp;nbsp;he &lt;a href="http://www.bobparsons.com/OffshoreOutsourcingItsnotforGoDaddyt.html"&gt;posts
   a contrarian view&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote dir=ltr style="MARGIN-RIGHT: 0px"&gt; 
&lt;p&gt;
   &lt;em&gt;I can tell you right now, Go Daddy is simply not interested in moving its operations
   offshore.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p dir=ltr&gt;
   Bob seems to (rightly)&amp;nbsp;regard software engineering as a source of competitive
   advantage, rather than an short-term expense that should be minimized regardless of
   long-term consequence.
&lt;/p&gt;
&lt;p dir=ltr&gt;
   Third, there’s the controversy around &lt;a href="http://news.google.com/news?q=go%20daddy%20superbowl%20commercial"&gt;Go
   Daddy’s Super Bowl commercials&lt;/a&gt;. Conventional wisdom is that a little-known dot
   com should not purchase a spot in the Super Bowl. That was conventional wisdom circa
   2001. But the commercials were a big success for Go Daddy.
&lt;/p&gt;
&lt;p dir=ltr&gt;
   Fourth, there are lots of programmers who spout opinions in blogs. Not all of them
   have created software companies with $100,000,000 in annual revenue.
&lt;/p&gt;
&lt;p dir=ltr&gt;
   Fifth and finally, he has rules to live by — &lt;a href="http://www.bobparsons.com/RoberttheycanteatyouMyrulesforsurvivalt.html"&gt;sixteen
   of them&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=eb19f5e4-e255-4ad7-95e9-a5982c4400f1"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,eb19f5e4-e255-4ad7-95e9-a5982c4400f1.aspx</comments>
      <category>Business</category>
    </item>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,ec62f263-9e18-4c9b-817a-199ce369a4d9.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,ec62f263-9e18-4c9b-817a-199ce369a4d9.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,ec62f263-9e18-4c9b-817a-199ce369a4d9.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ec62f263-9e18-4c9b-817a-199ce369a4d9</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <title>INETA SOA Talk</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,ec62f263-9e18-4c9b-817a-199ce369a4d9.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,ec62f263-9e18-4c9b-817a-199ce369a4d9.aspx</link>
      <pubDate>Sat, 12 Feb 2005 04:01:53 GMT</pubDate>
      <description>&lt;div class="Section1"&gt;
   &lt;p&gt;
      Thanks to everybody who came to hear my SOA talk at the Wisconsin .NET User&amp;rsquo;s
      Group meeting (or who attended via LiveMeeting). The turnout was great. If you&amp;rsquo;re
      interested in the slides, you can &lt;a href="http://www.terski.com/blog/content/binary/SOAInDotNet-Feb2005.ppt"&gt;grab
      them here&lt;/a&gt;. I tend to write PowerPoint slides that are NOT verbose. But I&amp;rsquo;ll
      organize my notes from the talk and turn them into a series of posts over the next
      few weeks.&amp;#160; &amp;#160; 
   &lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=ec62f263-9e18-4c9b-817a-199ce369a4d9"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,ec62f263-9e18-4c9b-817a-199ce369a4d9.aspx</comments>
      <category>Talks</category>
    </item>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,246f62be-4ed3-4427-8005-259e830dff5d.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,246f62be-4ed3-4427-8005-259e830dff5d.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,246f62be-4ed3-4427-8005-259e830dff5d.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=246f62be-4ed3-4427-8005-259e830dff5d</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      After five months without posting, I was shamed into blogging again at the first Milwaukee
      area .Net geek dinner (<a href="http://www.mperfect.net/blog/browse.aspx?bid=632378739798906250">thanks
      to Casey</a>). I’ll take the fact that <strong>*Milwaukee*</strong> can support
      a geek dinner as a sure sign that the .Net platform has become ubiquitous.
   </p>
        <p>
      It’s been an insanely busy year. I’ve typically been working on two or
      three projects concurrently – each with clients expecting to see regular progress.
      Since some of them read my blog, I’d have no excuse for not meeting a deadline
      but still having time to post.
   </p>
        <p>
      But I’m not complaining. It’s a privilege, not an obligation, to get paid
      to do what I do. The day this becomes drudgery is the day I’ve lost all perspective.
      Anyhow, stay tuned for more posts; I’ve been implementing a lot with (and getting
      battle scars from) service-oriented architectures over the past year.
   </p>
        <img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=246f62be-4ed3-4427-8005-259e830dff5d" />
      </body>
      <title>Is It December Already?</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,246f62be-4ed3-4427-8005-259e830dff5d.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,246f62be-4ed3-4427-8005-259e830dff5d.aspx</link>
      <pubDate>Wed, 08 Dec 2004 04:39:37 GMT</pubDate>
      <description>&lt;p&gt;
   After five months without posting, I was shamed into blogging again at the first Milwaukee
   area .Net geek dinner (&lt;a href="http://www.mperfect.net/blog/browse.aspx?bid=632378739798906250"&gt;thanks
   to Casey&lt;/a&gt;). I&amp;#8217;ll take the fact that &lt;strong&gt;*Milwaukee*&lt;/strong&gt; can support
   a geek dinner as a sure sign that the .Net platform has become ubiquitous.
&lt;/p&gt;
&lt;p&gt;
   It&amp;#8217;s been an insanely busy year. I&amp;#8217;ve typically been working on two or
   three projects concurrently &amp;#8211; each with clients expecting to see regular progress.
   Since some of them read my blog, I&amp;#8217;d have no excuse for not meeting a deadline
   but still having time to post.
&lt;/p&gt;
&lt;p&gt;
   But I&amp;#8217;m not complaining. It&amp;#8217;s a privilege, not an obligation, to get paid
   to do what I do. The day this becomes drudgery is the day I&amp;#8217;ve lost all perspective.
   Anyhow, stay tuned for more posts; I&amp;#8217;ve been implementing a lot with (and getting
   battle scars from) service-oriented architectures over the past year.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=246f62be-4ed3-4427-8005-259e830dff5d"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,246f62be-4ed3-4427-8005-259e830dff5d.aspx</comments>
      <category>About</category>
    </item>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,f32cdeed-5394-491f-8749-e979451893db.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,f32cdeed-5394-491f-8749-e979451893db.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,f32cdeed-5394-491f-8749-e979451893db.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f32cdeed-5394-491f-8749-e979451893db</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      In a previous post, I've explained that I have an interest in rating engines. In fact,
      I have more than an interest -- I have an opinion. And that opinion is: If you plan
      on writing code to calculate an insurance premium, it's often best to write a custom
      rating engine.
   </p>
        <p>
      But before I can expound on this, I need to describe what a rating engine is. I'll
      start by describing the problem that a rating engine is supposed to solve. Insurance
      companies - more specifically, the actuaries - capture a lot of knowledge that is
      used to calculate an insurance premium. That knowledge has a few annoying characteristics:
      It is complex, it is large, and it subject to periodic, if not frequent, change.
   </p>
        <p>
      You could just write source code to calculate an insurance premium based on that actuarial
      knowledge. But your code would have a few annoying characteristics: It would be complex,
      it would be large, and it would be subject to periodic, if not frequent, change. Or,
      if you were diligent enough to prevent the first two characteristics, your code would
      accrue another characteristic: It would be very costly.
   </p>
        <p>
      So a rating engine should incorporate all of that actuarial knowledge to calculate
      a premium, but be neither too large nor too complex. It should deal with change gracefully.
      But still, what exactly does a rating engine do? 
   </p>
        <p>
      A rating engine has one primary function and a few supporting functions. Expressed
      as a use case, the primary function is to <em>Calculate Premium</em> for a proposed
      set of coverages.
   </p>
        <p>
          <img height="186" src="/blog/content/binary/re-uc.GIF" width="485" border="0" />
        </p>
        <p>
      But in order to calculate that premium, the user (let's call them <em>Rate Consumers</em>)
      needs to know how to assemble a valid set of proposed coverages. Insurance companies
      have lots of dependencies and constraints that describe what coverages and options
      can go together. This aspect of insurance - product design - involves capturing the
      knowledge of the product designer. The engine needs to expose this knowledge to the
      Rate Consumer in some way. We'll call this use case <em>Get Coverage Catalog</em>.
   </p>
        <p>
      It only stands to reason that when a Rate Consumer asks for a premium, the engine
      should check whether the proposed coverages are valid according to the coverage catalog.
      This functionality is really part of the Calculate Premium use case, but to draw attention
      to it, we'll put it in its own use case, <em>Validate Proposed Coverage</em>.
   </p>
        <p>
      Finally, there needs to be some way to transform the knowledge that exists in the
      heads of the actuaries and product designers into a form the rating engine can use.
      The actor responsible for doing this is a Rate Administrator. We'll call this use
      case <em>Manage Coverage Catalog and Rates</em>.
   </p>
        <img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=f32cdeed-5394-491f-8749-e979451893db" />
      </body>
      <title>What is a Rating Engine?</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,f32cdeed-5394-491f-8749-e979451893db.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,f32cdeed-5394-491f-8749-e979451893db.aspx</link>
      <pubDate>Tue, 20 Jul 2004 04:43:01 GMT</pubDate>
      <description>&lt;p&gt;
   In a previous post, I've explained that I have an interest in rating engines. In fact,
   I have more than an interest -- I have an opinion. And that opinion is: If you plan
   on writing code to calculate an insurance premium, it's often best to write a custom
   rating engine.
&lt;/p&gt;
&lt;p&gt;
   But before I can expound on this, I need to describe what a rating engine is. I'll
   start by describing the problem that a rating engine is supposed to solve. Insurance
   companies - more specifically, the actuaries - capture a lot of knowledge that is
   used to calculate an insurance premium. That knowledge has a few annoying characteristics:
   It is complex, it is large, and it subject to periodic, if not frequent, change.
&lt;/p&gt;
&lt;p&gt;
   You could just write source code to calculate an insurance premium based on that actuarial
   knowledge. But your code would have a few annoying characteristics: It would be complex,
   it would be large, and it would be subject to periodic, if not frequent, change. Or,
   if you were diligent enough to prevent the first two characteristics, your code would
   accrue another characteristic: It would be very costly.
&lt;/p&gt;
&lt;p&gt;
   So a rating engine should incorporate all of that actuarial knowledge to calculate
   a premium, but be neither too large nor too complex. It should deal with change gracefully.
   But still, what exactly does a rating engine do? 
&lt;/p&gt;
&lt;p&gt;
   A rating engine has one primary function and a few supporting functions. Expressed
   as a use case, the primary function is to &lt;em&gt;Calculate Premium&lt;/em&gt; for a proposed
   set of coverages.
&lt;/p&gt;
&lt;p&gt;
   &lt;img height=186 src="/blog/content/binary/re-uc.GIF" width=485 border=0&gt;
&lt;/p&gt;
&lt;p&gt;
   But in order to calculate that premium, the user (let's call them &lt;em&gt;Rate Consumers&lt;/em&gt;)
   needs to know how to assemble a valid set of proposed coverages. Insurance companies
   have lots of dependencies and constraints that describe what coverages and options
   can go together. This aspect of insurance - product design - involves capturing the
   knowledge of the product designer. The engine needs to expose this knowledge to the
   Rate Consumer in some way. We'll call this use case &lt;em&gt;Get Coverage Catalog&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
   It only stands to reason that when a Rate Consumer asks for a premium, the engine
   should check whether the proposed coverages are valid according to the coverage catalog.
   This functionality is really part of the Calculate Premium use case, but to draw attention
   to it, we'll put it in its own use case, &lt;em&gt;Validate Proposed Coverage&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
   Finally, there needs to be some way to transform the knowledge that exists in the
   heads of the actuaries and product designers into a form the rating engine can use.
   The actor responsible for doing this is a Rate Administrator. We'll call this use
   case &lt;em&gt;Manage Coverage Catalog and Rates&lt;/em&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=f32cdeed-5394-491f-8749-e979451893db"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,f32cdeed-5394-491f-8749-e979451893db.aspx</comments>
      <category>Rating Engines</category>
    </item>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,9e4c38e9-c902-43db-81dc-a9c77273b888.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,9e4c38e9-c902-43db-81dc-a9c77273b888.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,9e4c38e9-c902-43db-81dc-a9c77273b888.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9e4c38e9-c902-43db-81dc-a9c77273b888</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p>
         My friend Bill <a href="http://www.straightlinesoft.com/PermaLink.aspx?guid=0812055c-8ac5-440e-a4ed-83ff21ed942a">points
         out</a> that ObjectSpaces has been delayed until Longhorn. I could be wrong, but I
         sense the initial enthusiasm for ObjectSpaces is waning. So now I’m pondering: 
      </p>
          <p style="MARGIN-LEFT: 0.5in">
            <span>Do we need O/R mappers anymore? Did we ever?</span>
          </p>
          <p>
         At the risk of sounding like someone who thinks SOA will solve all of the world’s
         problems, I want to spend some time testing the following hypothesis: 
      </p>
          <p style="MARGIN-LEFT: 0.5in">
            <span>Does a service-oriented architecture diminish the need for an O/R mapper?</span>
          </p>
          <p>
         SOA changes not only the way we build our back-end services, but also the way we build
         our front-ends. In a recent conversation with <a href="http://www.lhotka.net/WeBlog">Rocky
         Lhotka</a>, he made the point that in an SOA, the client and the service are really
         separate applications – separated by a trust boundary. He also pointed out that
         invoking a service is a lot like invoking a stored procedure: 1) construct a request
         by filling in some parameters, 2) invoke a named operation, and 3) handle the response. 
      </p>
          <p>
         Clemens has posted recently about something he calls <a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=04cfedd9-12d3-4070-ab7c-b52bc67fda2d">data
         services</a>. In short, he makes the case for accessing your data through a service. 
      </p>
          <p>
         Continuing these thoughts, I’m now asking, “Can a service be akin to a
         smarter stored procedure?” If you look at it this way, you can write your ‘stored
         procedures’ in C# without Yukon ;-) 
      </p>
          <p>
         In an SOA, the client has its own layers (presentation, business, data) as does the
         service. But the client’s data layer does not necessarily connect to a database,
         It might just connect to a service. This gets to my reasons for asking whether we
         need O/R mappers: 
      </p>
          <p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">      </span></span> The
         client’s business layer no longer needs to map to a relational database. Instead,
         it needs to map to service requests and responses. 
      </p>
          <p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">      </span></span> If
         the service itself is a ‘smarter stored procedure’, does it need a rich
         domain model? If not, it doesn’t need to map this domain model to a relational
         model. 
      </p>
          <p>
         I’m writing more questions than answers in this post, but here’s one more: 
      </p>
          <p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in">
            <span style="FONT-FAMILY: Symbol">·<span style="FONT: 7pt 'Times New Roman'">      </span></span> If
         we really needed O/R mappers, wouldn’t we already have them? Yes, I know a number
         of vendors already sell O/R mappers, but if they were so vital, wouldn’t they
         be built into the fabric of every platform by now? I mean, saving objects into a relational
         database is something we’ve been doing for a long time. If O/R mappers were
         really the answer, wouldn’t this be a solved problem by now? 
      </p>
        </div>
        <img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=9e4c38e9-c902-43db-81dc-a9c77273b888" />
      </body>
      <title>Is O/R Mapping Necessary Anymore?</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,9e4c38e9-c902-43db-81dc-a9c77273b888.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,9e4c38e9-c902-43db-81dc-a9c77273b888.aspx</link>
      <pubDate>Tue, 25 May 2004 03:29:01 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
   &lt;p&gt;
      My friend Bill &lt;a href="http://www.straightlinesoft.com/PermaLink.aspx?guid=0812055c-8ac5-440e-a4ed-83ff21ed942a"&gt;points
      out&lt;/a&gt; that ObjectSpaces has been delayed until Longhorn. I could be wrong, but I
      sense the initial enthusiasm for ObjectSpaces is waning. So now I&amp;#8217;m pondering: 
   &lt;/p&gt;
   &lt;p style="MARGIN-LEFT: 0.5in"&gt;
      &lt;span&gt;Do we need O/R mappers anymore? Did we ever?&lt;/span&gt; 
   &lt;/p&gt;
   &lt;p&gt;
      At the risk of sounding like someone who thinks SOA will solve all of the world&amp;#8217;s
      problems, I want to spend some time testing the following hypothesis: 
   &lt;/p&gt;
   &lt;p style="MARGIN-LEFT: 0.5in"&gt;
      &lt;span&gt;Does a service-oriented architecture diminish the need for an O/R mapper?&lt;/span&gt; 
   &lt;/p&gt;
   &lt;p&gt;
      SOA changes not only the way we build our back-end services, but also the way we build
      our front-ends. In a recent conversation with &lt;a href="http://www.lhotka.net/WeBlog"&gt;Rocky
      Lhotka&lt;/a&gt;, he made the point that in an SOA, the client and the service are really
      separate applications &amp;#8211; separated by a trust boundary. He also pointed out that
      invoking a service is a lot like invoking a stored procedure: 1) construct a request
      by filling in some parameters, 2) invoke a named operation, and 3) handle the response. 
   &lt;/p&gt;
   &lt;p&gt;
      Clemens has posted recently about something he calls &lt;a href="http://staff.newtelligence.net/clemensv/PermaLink.aspx?guid=04cfedd9-12d3-4070-ab7c-b52bc67fda2d"&gt;data
      services&lt;/a&gt;. In short, he makes the case for accessing your data through a service. 
   &lt;/p&gt;
   &lt;p&gt;
      Continuing these thoughts, I&amp;#8217;m now asking, &amp;#8220;Can a service be akin to a
      smarter stored procedure?&amp;#8221; If you look at it this way, you can write your &amp;#8216;stored
      procedures&amp;#8217; in C# without Yukon ;-) 
   &lt;/p&gt;
   &lt;p&gt;
      In an SOA, the client has its own layers (presentation, business, data) as does the
      service. But the client&amp;#8217;s data layer does not necessarily connect to a database,
      It might just connect to a service. This gets to my reasons for asking whether we
      need O/R mappers: 
   &lt;/p&gt;
   &lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;
      &lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; The
      client&amp;#8217;s business layer no longer needs to map to a relational database. Instead,
      it needs to map to service requests and responses. 
   &lt;/p&gt;
   &lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;
      &lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; If
      the service itself is a &amp;#8216;smarter stored procedure&amp;#8217;, does it need a rich
      domain model? If not, it doesn&amp;#8217;t need to map this domain model to a relational
      model. 
   &lt;/p&gt;
   &lt;p&gt;
      I&amp;#8217;m writing more questions than answers in this post, but here&amp;#8217;s one more: 
   &lt;/p&gt;
   &lt;p style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in"&gt;
      &lt;span style="FONT-FAMILY: Symbol"&gt;&amp;#183;&lt;span style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; If
      we really needed O/R mappers, wouldn&amp;#8217;t we already have them? Yes, I know a number
      of vendors already sell O/R mappers, but if they were so vital, wouldn&amp;#8217;t they
      be built into the fabric of every platform by now? I mean, saving objects into a relational
      database is something we&amp;#8217;ve been doing for a long time. If O/R mappers were
      really the answer, wouldn&amp;#8217;t this be a solved problem by now? 
   &lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=9e4c38e9-c902-43db-81dc-a9c77273b888"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,9e4c38e9-c902-43db-81dc-a9c77273b888.aspx</comments>
      <category>Software Architecture</category>
    </item>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,703ff4e5-03db-4db7-bf93-8e76d58ea42d.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,703ff4e5-03db-4db7-bf93-8e76d58ea42d.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,703ff4e5-03db-4db7-bf93-8e76d58ea42d.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=703ff4e5-03db-4db7-bf93-8e76d58ea42d</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      You read it here first: The term service-oriented architecture shall be renamed to
      message-oriented architecture. SOA shall become MOA.
   </p>
        <p>
      Well, not really. It won’t happen, even though it should.
   </p>
        <p>
      The entire point of SOA is to achieve loose coupling between applications. That’s
      it. Loose coupling.
   </p>
        <p>
      But that loose coupling has important second-order effects. It allows applications
      to evolve independently. It allows applications to scale independently. It allows
      applications to change deployment models independently. All without breaking one another.
   </p>
        <p>
          <a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=9e06bcfd-380d-4ef6-9263-2f8527492945">As
      many have rightly pointed out</a>, this goodness comes at a price: The only way
      to talk to a “service-oriented” application is to send it a message. You
      don’t get to see its types. You don’t know where it is really executing.
      You get to send it a message. It might send you a message in reply.
   </p>
        <p>
      So, shouldn’t we call it, “Message-Oriented Architecture?”
   </p>
        <img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=703ff4e5-03db-4db7-bf93-8e76d58ea42d" />
      </body>
      <title>Service-Oriented Architecture Misnamed?</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,703ff4e5-03db-4db7-bf93-8e76d58ea42d.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,703ff4e5-03db-4db7-bf93-8e76d58ea42d.aspx</link>
      <pubDate>Thu, 20 May 2004 21:35:53 GMT</pubDate>
      <description>&lt;p&gt;
   You read it here first: The term service-oriented architecture shall be renamed to
   message-oriented architecture. SOA shall become MOA.
&lt;/p&gt;
&lt;p&gt;
   Well, not really. It won&amp;#8217;t happen, even though it should.
&lt;/p&gt;
&lt;p&gt;
   The entire point of SOA is to achieve loose coupling between applications. That&amp;#8217;s
   it. Loose coupling.
&lt;/p&gt;
&lt;p&gt;
   But that loose coupling has important second-order effects. It allows applications
   to evolve independently. It allows applications to scale independently. It allows
   applications to change deployment models independently. All without breaking one another.
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://www.lhotka.net/WeBlog/PermaLink.aspx?guid=9e06bcfd-380d-4ef6-9263-2f8527492945"&gt;As
   many have rightly&amp;nbsp;pointed out&lt;/a&gt;, this goodness comes at a price: The only way
   to talk to a &amp;#8220;service-oriented&amp;#8221; application is to send it a message. You
   don&amp;#8217;t get to see its types. You don&amp;#8217;t know where it is really executing.
   You get to send it a message. It might send you a message in reply.
&lt;/p&gt;
&lt;p&gt;
   So, shouldn&amp;#8217;t we call it, &amp;#8220;Message-Oriented Architecture?&amp;#8221;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=703ff4e5-03db-4db7-bf93-8e76d58ea42d"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,703ff4e5-03db-4db7-bf93-8e76d58ea42d.aspx</comments>
      <category>Software Architecture</category>
    </item>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,5e303e37-b564-4bac-9d59-5b3e68520c9a.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,5e303e37-b564-4bac-9d59-5b3e68520c9a.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,5e303e37-b564-4bac-9d59-5b3e68520c9a.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=5e303e37-b564-4bac-9d59-5b3e68520c9a</wfw:commentRss>
      <slash:comments>0</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      In a <a href="/blog/PermaLink,guid,f10e9281-c5cf-4b74-aee1-948daeb880a0.aspx">previous
      entry</a>, I brought up the challenge of preserving the original caller’s identity
      across tiers. Sure, this can be solved in a half-a-dozen ways, but which is the right
      way for the given situation? When designing a real software system, it’s all
      about the tradeoffs. 
   </p>
        <p>
      And the tradeoff I faced is that I want to know the identity of the caller even after
      I cross from the presentation tier to the application service tier to the database
      tier. But I don’t want to incur the cost of authenticating a second or third
      time (at each tier). Remember, my callers’ identities are not guaranteed to
      be in Active Directory, so a service invocation would mean an extra trip to my own
      authentication service and database.
   </p>
        <p>
      My solution is to pass the caller’s identity, out-of-band, as I cross from the
      presentation tier to the application service tier. Note, I said the caller’s
      identity, not credentials (by identity, mean all of the information that is required
      to construct a custom Principal). On the application service tier, I’ll use
      an HttpModule to pull the identity out of a SOAP header, reconstruct a principal,
      and attach it to the current request. Now, I can perform role-based authorization
      in the application service tier.
   </p>
        <p>
      Of course, passing identity information around the network, even within the external
      firewall, is dicey. I’ll use IPSec to preserve the integrity of the data that
      moves between these two tiers.
   </p>
        <p>
      So, I get the benefit of a trusted-subsystem authentication model, without loosing
      the ability to perform role-based authorization based on the original caller.
   </p>
        <img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=5e303e37-b564-4bac-9d59-5b3e68520c9a" />
      </body>
      <title>Identity Flow in SOA: One Solution</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,5e303e37-b564-4bac-9d59-5b3e68520c9a.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,5e303e37-b564-4bac-9d59-5b3e68520c9a.aspx</link>
      <pubDate>Fri, 14 May 2004 12:05:39 GMT</pubDate>
      <description>&lt;p&gt;
   In a &lt;a href="/blog/PermaLink,guid,f10e9281-c5cf-4b74-aee1-948daeb880a0.aspx"&gt;previous
   entry&lt;/a&gt;, I brought up the challenge of preserving the original caller&amp;#8217;s identity
   across tiers. Sure, this can be solved in a half-a-dozen ways, but which is the right
   way for the given situation? When designing a real software system, it&amp;#8217;s all
   about the tradeoffs. 
&lt;/p&gt;
&lt;p&gt;
   And the tradeoff I faced is that I want to know the identity of the caller even after
   I cross from the presentation tier to the application service tier to the database
   tier. But I don&amp;#8217;t want to incur the cost of authenticating a second or third
   time (at each tier). Remember, my callers&amp;#8217; identities are not guaranteed to
   be in Active Directory, so a service invocation would mean an extra trip to my own
   authentication service and database.
&lt;/p&gt;
&lt;p&gt;
   My solution is to pass the caller&amp;#8217;s identity, out-of-band, as I cross from the
   presentation tier to the application service tier. Note, I said the caller&amp;#8217;s
   identity, not credentials (by identity, mean all of the information that is required
   to construct a custom Principal). On the application service tier, I&amp;#8217;ll use
   an HttpModule to pull the identity out of a SOAP header, reconstruct a principal,
   and attach it to the current request. Now, I can perform role-based authorization
   in the application service tier.
&lt;/p&gt;
&lt;p&gt;
   Of course, passing identity information around the network, even within the external
   firewall, is dicey. I&amp;#8217;ll use IPSec to preserve the integrity of the data that
   moves between these two tiers.
&lt;/p&gt;
&lt;p&gt;
   So, I get the benefit of a trusted-subsystem authentication model, without loosing
   the ability to perform role-based authorization based on the original caller.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=5e303e37-b564-4bac-9d59-5b3e68520c9a"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,5e303e37-b564-4bac-9d59-5b3e68520c9a.aspx</comments>
      <category>Security</category>
    </item>
    <item>
      <trackback:ping>http://www.terski.com/blog/Trackback,guid,aaaa4ee9-c67f-44b4-aa4d-27ab513fd0c2.aspx</trackback:ping>
      <pingback:server>http://www.terski.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.terski.com/blog/PermaLink,guid,aaaa4ee9-c67f-44b4-aa4d-27ab513fd0c2.aspx</pingback:target>
      <wfw:comment>http://www.terski.com/blog/CommentView,guid,aaaa4ee9-c67f-44b4-aa4d-27ab513fd0c2.aspx</wfw:comment>
      <wfw:commentRss>http://www.terski.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=aaaa4ee9-c67f-44b4-aa4d-27ab513fd0c2</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div class="Section1">
          <p>
         I’ve been avoiding the ‘about me’ post until I first contributed
         some content to this blog. I didn’t want the inaugural entry to tell you what
         an interesting guy I was, only to be followed by the dead silence that comes from
         having nothing else to say. 
      </p>
          <p>
         But now that I’ve written a few entries, I’d like you to read them. And
         if I expect you to take interest in my writing, it’s only fair that I tell you
         a bit about me. 
      </p>
          <p>
         Like <a href="http://www.notalegend.com/">Eric Sink</a>, I’m not a <a href="http://www.softwarelegends.com/">software
         legend</a>. I haven’t written any books. You probably haven’t heard me
         give a talk. I don’t live in California or Washington. I live in Wisconsin.
         Yes, Wisconsin. 
      </p>
          <p>
         But if your home contains an item from the <a href="http://www.pg.com/">largest consumer
         products company in the world</a> (Pringles, Puffs, or Tide to name a few), know that
         I helped design and construct the software that moved that product off the production
         line, through the warehouse, onto the truck, and into your local retailer. The next
         time you reach for the Charmin, think of Terski. If you own a pair of shoes with a
         swoosh on them, it’s possible that they were conveyed, sorted, and packed by
         software that I helped design, build, and deploy (along with <a href="http://www.straightlinesoft.com/">this
         guy</a>). 
      </p>
          <p>
         I spent the first era of my software career building logistics execution software
         for big clients. In those days I learned hard lessons about performance, scalability,
         and reliability. Nothing says, “Your software sucks,” quite like a stream
         of boxes falling off the end of a conveyor or semi-trucks backed up for two miles
         waiting to be diverted to the right dock door. 
      </p>
          <p>
         During this time, I got excited about the Booch notation – and later the UML.
         I thought these design notations were a key to advancing software engineering’s
         state-of-the-practice. Ironically, core development team for Rational Rose was located
         about two miles from where I was working at the time (yes, in Wisconsin). When I found
         this out, I got myself hired by Rational and began the second era of my career. 
      </p>
          <p>
         I spent the next few years working on Rose and its successor, XDE. I liked being at
         Rational and worked with some great people. But admittedly, I grew somewhat disillusioned
         with the UML and the efficacy of the modeling tools of the day. 
      </p>
          <p>
         So in 2002, I started the third era of my career when I co-founded Serlio Software
         with three of my colleagues from Rational. I’ll spare you the sales-pitch, but
         at Serlio we’re passionate about software engineering and the .Net development
         platform. My current technical interests include service-oriented architectures and
         rules-based systems (a.k.a. rules engines). 
      </p>
          <p>
         I’ll blog about these topics and more. I hope you’ll stick around. 
      </p>
        </div>
        <img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=aaaa4ee9-c67f-44b4-aa4d-27ab513fd0c2" />
      </body>
      <title>Bio</title>
      <guid>http://www.terski.com/blog/PermaLink,guid,aaaa4ee9-c67f-44b4-aa4d-27ab513fd0c2.aspx</guid>
      <link>http://www.terski.com/blog/PermaLink,guid,aaaa4ee9-c67f-44b4-aa4d-27ab513fd0c2.aspx</link>
      <pubDate>Tue, 11 May 2004 03:56:00 GMT</pubDate>
      <description>&lt;div class=Section1&gt;
   &lt;p&gt;
      I&amp;#8217;ve been avoiding the &amp;#8216;about me&amp;#8217; post until I first contributed
      some content to this blog. I didn&amp;#8217;t want the inaugural entry to tell you what
      an interesting guy I was, only to be followed by the dead silence that comes from
      having nothing else to say. 
   &lt;/p&gt;
   &lt;p&gt;
      But now that I&amp;#8217;ve written a few entries, I&amp;#8217;d like you to read them. And
      if I expect you to take interest in my writing, it&amp;#8217;s only fair that I tell you
      a bit about me. 
   &lt;/p&gt;
   &lt;p&gt;
      Like &lt;a href="http://www.notalegend.com/"&gt;Eric Sink&lt;/a&gt;, I&amp;#8217;m not a &lt;a href="http://www.softwarelegends.com/"&gt;software
      legend&lt;/a&gt;. I haven&amp;#8217;t written any books. You probably haven&amp;#8217;t heard me
      give a talk. I don&amp;#8217;t live in California or Washington. I live in Wisconsin.
      Yes, Wisconsin. 
   &lt;/p&gt;
   &lt;p&gt;
      But if your home contains an item from the &lt;a href="http://www.pg.com/"&gt;largest consumer
      products company in the world&lt;/a&gt; (Pringles, Puffs, or Tide to name a few), know that
      I helped design and construct the software that moved that product off the production
      line, through the warehouse, onto the truck, and into your local retailer. The next
      time you reach for the Charmin, think of Terski. If you own a pair of shoes with a
      swoosh on them, it&amp;#8217;s possible that they were conveyed, sorted, and packed by
      software that I helped design, build, and deploy (along with &lt;a href="http://www.straightlinesoft.com/"&gt;this
      guy&lt;/a&gt;). 
   &lt;/p&gt;
   &lt;p&gt;
      I spent the first era of my software career building logistics execution software
      for big clients. In those days I learned hard lessons about performance, scalability,
      and reliability. Nothing says, &amp;#8220;Your software sucks,&amp;#8221; quite like a stream
      of boxes falling off the end of a conveyor or semi-trucks backed up for two miles
      waiting to be diverted to the right dock door. 
   &lt;/p&gt;
   &lt;p&gt;
      During this time, I got excited about the Booch notation &amp;#8211; and later the UML.
      I thought these design notations were a key to advancing software engineering&amp;#8217;s
      state-of-the-practice. Ironically, core development team for Rational Rose was located
      about two miles from where I was working at the time (yes, in Wisconsin). When I found
      this out, I got myself hired by Rational and began the second era of my career. 
   &lt;/p&gt;
   &lt;p&gt;
      I spent the next few years working on Rose and its successor, XDE. I liked being at
      Rational and worked with some great people. But admittedly, I grew somewhat disillusioned
      with the UML and the efficacy of the modeling tools of the day. 
   &lt;/p&gt;
   &lt;p&gt;
      So in 2002, I started the third era of my career when I co-founded Serlio Software
      with three of my colleagues from Rational. I&amp;#8217;ll spare you the sales-pitch, but
      at Serlio we&amp;#8217;re passionate about software engineering and the .Net development
      platform. My current technical interests include service-oriented architectures and
      rules-based systems (a.k.a. rules engines). 
   &lt;/p&gt;
   &lt;p&gt;
      I&amp;#8217;ll blog about these topics and more. I hope you&amp;#8217;ll stick around. 
   &lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.terski.com/blog/aggbug.ashx?id=aaaa4ee9-c67f-44b4-aa4d-27ab513fd0c2"&gt;</description>
      <comments>http://www.terski.com/blog/CommentView,guid,aaaa4ee9-c67f-44b4-aa4d-27ab513fd0c2.aspx</comments>
      <category>About</category>
    </item>
  </channel>
</rss>