Matt Terski's Blog
Writing tomorrow's legacy applications today

Damon seems fired-up about the new DSL tools in Visual Studio 2005. But he asks:

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.

I'll tell you why.

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 configure or assemble software. After all, who knows the business better than a business person? Give these people a nice DSL tool or BizTalk and let them construct the system.

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).

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.

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.

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.

6/10/2005 11:17:08 PM (Central Daylight Time, UTC-05:00)  #    Disclaimer  |  Comments [1]  |  Trackback

[Grady Booch] ... Glen Vandergurg's collection of quotations on software design make for fun reading.

I've seen many of these before. A few that I haven't are hilarious.

To a database person, every nail looks like a thumb. Or something like that.

- Jamie Zawinski

5/12/2005 10:16:08 PM (Central Daylight Time, UTC-05:00)  #    Disclaimer  |  Comments [0]  |  Trackback

Bob Parsons, the founder and president of GoDaddy.com, has a blog. There are at least five reasons why this is guy interesting.

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).

Second, Bob has unconventional opinions. When most technology companies are trying to find ways to cut costs through offshoring, he posts a contrarian view:

I can tell you right now, Go Daddy is simply not interested in moving its operations offshore.

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.

Third, there’s the controversy around Go Daddy’s Super Bowl commercials. 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.

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.

Fifth and finally, he has rules to live by — sixteen of them.

2/22/2005 9:36:20 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  |  Trackback

Thanks to everybody who came to hear my SOA talk at the Wisconsin .NET User’s Group meeting (or who attended via LiveMeeting). The turnout was great. If you’re interested in the slides, you can grab them here. I tend to write PowerPoint slides that are NOT verbose. But I’ll organize my notes from the talk and turn them into a series of posts over the next few weeks.   

2/11/2005 10:01:53 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback

After five months without posting, I was shamed into blogging again at the first Milwaukee area .Net geek dinner (thanks to Casey). I’ll take the fact that *Milwaukee* can support a geek dinner as a sure sign that the .Net platform has become ubiquitous.

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.

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.

12/7/2004 10:39:37 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  |  Trackback

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.

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.

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.

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?

A rating engine has one primary function and a few supporting functions. Expressed as a use case, the primary function is to Calculate Premium for a proposed set of coverages.

But in order to calculate that premium, the user (let's call them Rate Consumers) 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 Get Coverage Catalog.

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, Validate Proposed Coverage.

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 Manage Coverage Catalog and Rates.

7/19/2004 11:43:01 PM (Central Daylight Time, UTC-05:00)  #    Disclaimer  |  Comments [0]  |  Trackback

My friend Bill points out 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:

Do we need O/R mappers anymore? Did we ever?

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:

Does a service-oriented architecture diminish the need for an O/R mapper?

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 Rocky Lhotka, 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.

Clemens has posted recently about something he calls data services. In short, he makes the case for accessing your data through a service.

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 ;-)

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:

·       The client’s business layer no longer needs to map to a relational database. Instead, it needs to map to service requests and responses.

·       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.

I’m writing more questions than answers in this post, but here’s one more:

·       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?

5/24/2004 10:29:01 PM (Central Daylight Time, UTC-05:00)  #    Disclaimer  |  Comments [0]  |  Trackback

You read it here first: The term service-oriented architecture shall be renamed to message-oriented architecture. SOA shall become MOA.

Well, not really. It won’t happen, even though it should.

The entire point of SOA is to achieve loose coupling between applications. That’s it. Loose coupling.

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.

As many have rightly pointed out, 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.

So, shouldn’t we call it, “Message-Oriented Architecture?”

5/20/2004 4:35:53 PM (Central Daylight Time, UTC-05:00)  #    Disclaimer  |  Comments [3]  |  Trackback


RSS 2.0 | Atom 0.2 | CDF | Send mail to the author(s) Email
On this page
Categories
Photos (beta)
www.flickr.com
Matt Terski's photos More of Matt Terski's photos
Archives
<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

Monthly Archives
Blogroll
Advertisement
Misc

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.