<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-29991918</id><updated>2011-04-21T22:16:13.572Z</updated><title type='text'>Richard's BLOG</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://richard-mitchell.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29991918.post-6155386857626171946</id><published>2009-04-12T13:44:00.010Z</published><updated>2009-04-12T14:21:35.964Z</updated><title type='text'>Start, Ruby, and me</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;Programming&lt;/em&gt;   Topic: &lt;em&gt;Building tools&lt;/em&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Ever since I heard Dave Thomas talk about it at a &lt;a href="http://www.bcs-spa.org/"&gt;Spa&lt;/a&gt; (un-)conference in 2006, I've been a big fan of the programming language Ruby.&lt;br /&gt;&lt;br /&gt;Perhaps that's partly because the first time I 'got' object-oriented programming was when I played around with Smalltalk, and Ruby reminds me of Smalltalk. But it's partly because Ruby comes with a library that makes writing small tools so easy. I'm thinking of the kind of tools that help me get computer work done more quickly and more easily.&lt;br /&gt;&lt;br /&gt;Here's an example. Because of who my clients are, I use Windows. I'm a big fan of its start menu. I don't just have shortcuts to programs such as Firefox and Thunderbird; I have shortcuts to folders I often want to open, such as the folder called Aadvark, which is where I instruct applications to save files, so that I know where to find them. &lt;br /&gt;&lt;br /&gt;(Aside: It's called Aadvark so that it appears near the beginning of where I keep almost all of my documents, in a folder called Filestore, which sits inside My Documents. I don't work directly in My Documents. I get too irritated. Windows gives me the facility to select an entry in Explorer by its first letter, but then names the folders within My Documents as My This and My That, so they all begin with 'm'. Aaaaagh!)&lt;br /&gt;&lt;br /&gt;On the start menu, I also have shortcuts to Ruby programs that open several things, ready for me to start work on a task. For instance, when I have saved yet another movie or TV program to DVD, and want to add it to my database of DVDs, I want to open:&lt;br /&gt;&lt;br /&gt;- the folder '.../Filestore/.../Lists/DVDs&lt;br /&gt;&lt;br /&gt;- the Ruby application that allows me to add a DVD to the database, and then builds a new HTML index from it, so that family members don't have to browse the database directly&lt;br /&gt;&lt;br /&gt;- 'My Computer', so that I can see what name I gave the DVD when I burned it&lt;br /&gt;&lt;br /&gt;- the &lt;a href="http://www.imdb.com/"&gt;Internet Movie Database&lt;/a&gt; website, in case I want to look up details of a movie.&lt;br /&gt;&lt;br /&gt;The Ruby program that does the opening for me uses Ruby's Win32OLE module, and is based around a two-line function:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def open(pathname)&lt;br /&gt;&amp;nbsp;&amp;nbsp;shell = WIN32OLE.new('Shell.Application')&lt;br /&gt;&amp;nbsp;&amp;nbsp;shell.ShellExecute(pathname, '', '', 'open', '')&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;For instance, the call &lt;code&gt;open('My Computer')&lt;/code&gt; opens an Explorer window on My Computer. How easy is that?&lt;br /&gt;&lt;br /&gt;If you are going to build tools to help you work, the effort you put into tool-building must be repaid (otherwise you're building the tools as a hobby). And with Ruby, the effort required to build tools is so low that I always find the effort is repaid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-6155386857626171946?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/6155386857626171946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/6155386857626171946'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2009/04/start-ruby-and-me.html' title='Start, Ruby, and me'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-29991918.post-8613400755842969995</id><published>2009-03-24T09:45:00.012Z</published><updated>2009-03-24T10:24:51.150Z</updated><title type='text'>Trading the Turtle way</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;Trading&lt;/em&gt;   Topic: &lt;em&gt;About a trading book&lt;/em&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;I've just finished reading &lt;em&gt;The Turtle Way&lt;/em&gt; by Curtis Faith, and I'm going to re-read it, now.&lt;br /&gt;&lt;br /&gt;In the 1980s, one famous trader, Rich Dennis, bet another, Bill Eckhardt, that traders are made, not born, and he could make anyone into a successful trader. Curtis Faith was one of those selected to be trained by Rich Dennis, and became the most successful of all the Turtles, as they were known.&lt;br /&gt;&lt;br /&gt;The book presents the trading rules the Turtles were taught. For me, the book is much more valuable for describing how to trade successfully. In brief, this is what you do:&lt;br /&gt;&lt;br /&gt;1. Develop the rules for a trading system&lt;br /&gt;2. Backtest the system&lt;br /&gt;3. If the backtest shows the system to be profitable, apply the rules.&lt;br /&gt;&lt;br /&gt;As Curtis Faith observes, beginners think that step 1 is the hard part; experienced traders know that step 3 is what separates successful traders from unsuccessful ones.&lt;br /&gt;&lt;br /&gt;Rich Dennis knew this, too. He's quoted in the book as saying that he could put his rules in a newspaper but most people still wouldn't follow them.&lt;br /&gt;&lt;br /&gt;The book points the reader to someone who clearly understands the importance of step 3 - &lt;a href="http://www.taylortree.com/" target="_blank"&gt;Mike Taylor&lt;/a&gt;. I had a fascinating time browsing Mike's pages.&lt;br /&gt;&lt;br /&gt;Once the book on domain modeling is out of my hands, I'll be restarting work on my backtester!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-8613400755842969995?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/8613400755842969995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/8613400755842969995'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2009/03/trading-turtle-way.html' title='Trading the Turtle way'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-29991918.post-3047794690763696958</id><published>2009-02-27T14:21:00.002Z</published><updated>2009-02-27T14:27:47.641Z</updated><title type='text'>Book: progress report</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;IT&lt;/em&gt;   Topic: &lt;em&gt;Book on domain modeling&lt;/em&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;My co-authors and I have reached an important milestone in the writing of our book. We've now got a complete draft of all chapters.&lt;br /&gt;&lt;br /&gt;My tasks for next week will be:&lt;br /&gt;&lt;br /&gt;- find a displacement activity&lt;br /&gt;&lt;br /&gt;- tell myself off for engaging in displacement activity, and stop it&lt;br /&gt;&lt;br /&gt;- find a new displacement activity&lt;br /&gt;&lt;br /&gt;- reward myself for being so busy&lt;br /&gt;&lt;br /&gt;- notice I haven't actually achieved anything useful&lt;br /&gt;&lt;br /&gt;- find a new displacement activity&lt;br /&gt;&lt;br /&gt;- finally admit that displacement activities aren't the same as writing  the book&lt;br /&gt;&lt;br /&gt;- patiently check the details of the case study in every chapter&lt;br /&gt;&lt;br /&gt;- find a displacement activity&lt;br /&gt;&lt;br /&gt;- tell myself off for engaging in displacement activity, and stop it&lt;br /&gt;&lt;br /&gt;- find a new displacement activity&lt;br /&gt;&lt;br /&gt;- admit again that displacement activities aren't the same as writing  the book&lt;br /&gt;&lt;br /&gt;- go through whole book, filling in the few remaining missing bits.&lt;br /&gt;&lt;br /&gt;You can see where the phrase "struggling artist" comes from !&lt;br /&gt;&lt;br /&gt;You might already be on our list of people we plan to ask to review the complete manuscript but, if you'd like to review the book, email me just to be sure (if you don't already have an email address for me, please use richard at inferdata dot com).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-3047794690763696958?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/3047794690763696958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/3047794690763696958'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2009/02/book-progress-report.html' title='Book: progress report'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-29991918.post-4595692159901032555</id><published>2009-02-03T10:58:00.020Z</published><updated>2009-02-27T14:21:04.237Z</updated><title type='text'>The precision gap</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;IT&lt;/em&gt;   Topic: &lt;em&gt;The dangers of imprecision&lt;/em&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Software development proceeds from a high-level, vague project vision to low-level, precise code. Most development methods, especially those based on the common mis-understanding of &lt;em&gt;top-down&lt;/em&gt; I talked about in my previous blog, imagine the route from vision to code like this:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.mitchellhorvath.com/blogstuff/Precision.2Dspace.gif" /&gt;&lt;br /&gt;&lt;br /&gt;If, however, you know how to build precise models at a high level of abstraction, you can choose this route, instead, in which a vague project vision is turned into a precise model, which is then implemented:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.mitchellhorvath.com/blogstuff/Precision.ourApproach.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Another way to see the difference between the two approaches is to remember the two kinds of detail I mentioned in an earlier blog: there's the kind of detail involved in adding precision at the current level of abstraction, and there's the kind of detail involved in changing to a lower level of abstraction.&lt;br /&gt;&lt;br /&gt;If you do see development as the one-dimensional line in the first figure, you'll need to choose some level of abstraction at which to write your functional specifications (or whatever you call the specifications of what functionality the next release of a system is to provide).&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.mitchellhorvath.com/blogstuff/Precision.levelOfSpec.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Whatever level you choose, you'll face the following problem: your functional spec will &lt;em&gt;necessarily&lt;/em&gt; be lacking some of the precision that the programmers will need in order to write code.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.mitchellhorvath.com/blogstuff/Precision.precisionGap.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Consequences of this "precision gap" can include:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;programmers keep going back to business experts for clarification&lt;/li&gt;&lt;br /&gt;&lt;li&gt;the system as built incorporates different rules from the ones the business experts imagined&lt;/li&gt;&lt;br /&gt;&lt;li&gt;programmers invent the business rules&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;To overcome some of these negative consequences, IT departments are prone to add yet lower and lower levels of detail in their functional specs. As long as you believe development is a one-dimensional path, moving to a lower level is the only way to add precision to your functional specs. There's a downward pull on the level of abstraction at which you write functional specs.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.mitchellhorvath.com/blogstuff/Precision.downwardPull.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Of course, if you understand that there are two kinds of detail, and that development is two-dimensional, you can choose to add precision to your functional specs &lt;em&gt;without&lt;/em&gt; moving to a lower-level of abstraction, following the development path illustrated in the second figure near the beginning of this blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-4595692159901032555?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/4595692159901032555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/4595692159901032555'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2009/02/precision-gap.html' title='The precision gap'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-29991918.post-4199019940091349727</id><published>2009-01-09T15:44:00.006Z</published><updated>2009-01-09T16:11:26.094Z</updated><title type='text'>Top-down development</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;IT&lt;/em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Topic: &lt;em&gt;Adding detail to descriptions&lt;/em&gt;&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;The 1980s saw a big rise in the number of methods for developing systems (consultants called them methodologies, so they could charge more for them). Most of these methods incorporated a notion of top-down development, a notion that first appeared in earlier methods for program development. &lt;br /&gt;&lt;br /&gt;But many of the &lt;em&gt;system&lt;/em&gt; methods did not use &lt;em&gt;top-down&lt;/em&gt; as envisaged by the pioneers of &lt;em&gt;program&lt;/em&gt; development methods. To understand the difference you have to understand two different kinds of detail.&lt;br /&gt;&lt;br /&gt;There's the kind of detail you add when you get nearer to finishing a description at a given level of abstraction. Think, for example, of the detail you add when you write the second half of a method in an object-oriented program. It's detail of the same kind as in the first half of the method. But the method's not complete without it. (You'll see that I am using &lt;em&gt;description&lt;/em&gt; in a very general sense.) &lt;br /&gt;&lt;br /&gt;By contrast, there's the kind of detail you add when you change to a lower level of abstraction. Think, for example, of the kind of detail to be found in a specification of a method, and the different kind of detail to be found in the code for that method.&lt;br /&gt;&lt;br /&gt;The pioneers of program development methods were clear about the difference. In an important paper entitled &lt;em&gt;Program Development by Stepwise Refinement&lt;/em&gt; (CACM, Vol 14, No 4, April 1971), Niklaus Wirth says, &lt;em&gt;"In each step, one or several instructions of the given program are decomposed into more detailed instructions."&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Developers of system development methods took this to mean that a description of a system could be built by writing a vague, high-level description, then explaining some of the vagueness at a lower level of abstraction, and explaining the vagueness in that description at yet a lower level, and so on. The problem with this approach is that none of the descriptions at any of the levels is, in any useful sense, complete (unless you continue down until you have a working program, but system development methods were meant to produce system specs, not programs).&lt;br /&gt;&lt;br /&gt;Now read what Wirth says next in his sentence: &lt;em&gt;"This successive refinement of specifications terminates when all instructions are expressed in terms of an underlying ... programming language."&lt;/em&gt; The word &lt;em&gt;specifications&lt;/em&gt; is key.&lt;br /&gt;&lt;br /&gt;At each level of abstraction we have, not a vague description to be made more precise at a lower level, but a specification appropriate to the current level of abstraction, capable of being implemented (i.e., described) at a lower level.&lt;br /&gt;&lt;br /&gt;In a future post, I'll introduce what I call the &lt;em&gt;precision gap&lt;/em&gt; that arises if you try to avoid being precise at higher levels of abstraction, and why the gap can make your development process less effective.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-4199019940091349727?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/4199019940091349727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/4199019940091349727'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2009/01/top-down-development.html' title='Top-down development'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-29991918.post-2513531348249452886</id><published>2008-12-08T10:43:00.005Z</published><updated>2008-12-08T17:51:05.673Z</updated><title type='text'>An interesting way to teach</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;Sailing&lt;/em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Topic: &lt;em&gt;Course on diesel engines&lt;/em&gt;&lt;/h3&gt;&lt;br /&gt;I recently attended an &lt;a href="http://www.rya.org.uk"&gt;RYA&lt;/a&gt; couse on diesel engine maintenance, at the Lewes campus of &lt;a href="www.sussexdowns.ac.uk"&gt;Sussex Downs College&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;From the brochure, I expected six students and an instructor clustered around a diesel engine. It wasn't like that at all.&lt;br /&gt;&lt;br /&gt;Our instructor, Graham Whittington of Southern Marine, turned up with half-a-dozen crates containing bits scavenged from lots of different engines. Eleven students sat around a large, rectangular table, and Graham built parts of engines at one end, before our very eyes.&lt;br /&gt;&lt;br /&gt;When Graham wanted to explain the fuel supply subsystem, for example, he got out a can of the kind you might have in your car, and using a variety of bits of piping connected it to the various filters and pumps you'd find on a real engine. Then he could demonstrate topics such as how air gets trapped, and how to bleed the system.&lt;br /&gt;&lt;br /&gt;There were two immediate benefits of this approach. First, we could see everything. When we were learning about crankshafts and camshafts, we could handle actual examples of these parts. Second, our attention was automatically drawn to the parts that were important to the topic under discussion. While learning about the fuel system, the bits concerned with air supply were back in their crate.&lt;br /&gt;&lt;br /&gt;Of course, we never saw a complete engine running, but what would that have added? Overall, I found the approach refreshing. My interest was held all day. And I came away confident to handle the various parts of an engine that need regular checking and maintenance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-2513531348249452886?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/2513531348249452886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/2513531348249452886'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2008/12/interesting-way-to-teach.html' title='An interesting way to teach'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-29991918.post-1540921553704864784</id><published>2008-11-21T12:23:00.007Z</published><updated>2009-01-12T14:28:30.792Z</updated><title type='text'>Domain modelling - making observations</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;IT&lt;/em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Topic: &lt;em&gt;Business Modelling&lt;/em&gt;&lt;/h3&gt;&lt;br /&gt;In my post of Oct 21st, I said that key to our approach to domain modeling is the idea of observational semantics. When we're trying to uncover the business rules for a domain, we don't ask questions such as "when actor A1 starts use case U1, what do the actor and the system do?" Instead, we shift our thinking and ask "when I observe the business running, what changes can I see taking place that I need to describe?"&lt;br /&gt;&lt;br /&gt;(Aside: the observing can be actual, if we're modeling a business as-is, or imagined, if we're modeling a to-be business.)&lt;br /&gt;&lt;br /&gt;Here's an example of how the shift in thinking can help. Imagine a large commercial bank that can lend the kinds of sums of money you'd need to build a new factory. The contract for such a loan would involve many parties. There would be other banks who were contributing to the loan. There would be the manufacturer. There would be the prime building contractor, and the major subcontractors. And so on.&lt;br /&gt;&lt;br /&gt;Each party would need to be involved in drafting, amending, and approving the contract, so lots of documents would circulate between the parties. Eventually, representatives of all the parties would meet in one place at one time to sign copies of the contract. The bank wanted a computer-based system to help them during the process of gathering together all the paperwork needed for a signing meeting.&lt;br /&gt;&lt;br /&gt;When we joined the team, they hadn't modeled a change you can imagine happening - "a document has gone missing." The team were focusing on what was going on inside the system when actors invoked use cases, and they knew they had databases that didn't lose data. Once a document was logged in the database, it couldn't go missing. But someone who could imagine observing the business running (without worrying what was IT and what wasn't) could easily see that a real physical document could go missing, independently of what was recorded in a database.&lt;br /&gt;&lt;br /&gt;It takes a while to get used to thinking just in terms of observable changes. The hard part is stopping thinking about how change is caused (e.g., which actor invokes a system function). But we've found that thinking about observable changes has helped us build better business models.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-1540921553704864784?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/1540921553704864784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/1540921553704864784'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2008/11/domain-modelling-making-observations.html' title='Domain modelling - making observations'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-29991918.post-8066001550484891294</id><published>2008-11-09T13:47:00.006Z</published><updated>2008-12-08T17:49:04.911Z</updated><title type='text'>Precise business modelling</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;IT&lt;/em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Topic: &lt;em&gt;Business Modelling&lt;/em&gt;&lt;/h3&gt;&lt;br /&gt;In the previous two entries, I talked about using observational semantics when modelling a business domain, and about modelling large domains from a number of different points of view.&lt;br /&gt;&lt;br /&gt;Here, I want to talk about a third key ingredient of the approach to domain modelling developed by staff of &lt;a href="http://www.mitchellhorvath.com"&gt;Mitchell Horvath Ltd&lt;/a&gt; and &lt;a href="http://www.inferdata.com/"&gt;InferData Ltd&lt;/a&gt;. That ingredient is &lt;span style="font-weight:bold;"&gt;precision&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Businesses run according to rules. These rules are for business people to prescribe. Yet, in many businesses, the only people who work with precise ways of expressing the business's rules are the developers writing program code.&lt;br /&gt;&lt;br /&gt;Let me take quite an extreme example. When a bank converts a sum of money from one currency to another, the result will depend on how many places of decimals are used to express the exchange rate and any intermediate calculations. Because the result depends on the number of places of decimals, that number is something the business should decide. In the banks I've worked with, there are experts in the foreign exchange part of the business who understand these issues, and who employ mathematicians to help them make the necessary decisions.&lt;br /&gt;&lt;br /&gt;But in many kinds of businesses, it's common for such precise details to be omitted from business models. There's a widespread opinion amongst business and IT professionals that precise details are somehow "low-level," and only a matter for developers. We think that opinion needs challenging. Much of the precision captured in program code is also a concern for business professionals.&lt;br /&gt;&lt;br /&gt;In the book we're writing, we show how to make domain models precise. We're not going to argue that all parts of all domain must be mathematically precise. But we would argue that most business models suffer from too much imprecision.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-8066001550484891294?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/8066001550484891294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/8066001550484891294'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2008/11/precise-business-modelling.html' title='Precise business modelling'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-29991918.post-2738312650998382780</id><published>2008-10-28T15:42:00.008Z</published><updated>2008-12-08T17:48:24.168Z</updated><title type='text'>More on business modelling</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;IT&lt;/em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Topic: &lt;em&gt;Business Modelling&lt;/em&gt;&lt;/h3&gt; &lt;br /&gt;In the previous blog entry, I talked about using observational semantics to help focus on modelling the domain of a problem, rather than software.&lt;br /&gt;&lt;br /&gt;When the domain to be modelled is big, we bring another technique to bear, too. We build a number of smaller models, each with its own point of view, and then combine these smaller models into a larger model of the whole domain. Each smaller model is built from a certain viewpoint, and captures some aspect of the business.&lt;br /&gt;&lt;br /&gt;For example, a business that rents out DVDs and a business that sells health food supplements will both have a point-of-sale aspect, characterized by the exchange of goods or services for money. Both businesses will have rules about adding a sale item to an ongoing sale, for instance, and a point-of-sale model can capture these rules.&lt;br /&gt;&lt;br /&gt;By modelling the point-of-sale aspect of your domain separately from other aspects, you can exploit expertise. If someone has become something of an expert in point-of-sale issues on one project, they can carry it over to another project more easily if the point-of-sale aspect is initially kept separate from other aspects of the problem domain.&lt;br /&gt;&lt;br /&gt;There are, of course, other ways to partition a big model. We've found modelling different views to be extremely useful in practice, and we think it's underused. That's why it'll make its way into our book.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-2738312650998382780?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/2738312650998382780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/2738312650998382780'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2008/10/more-on-business-modelling.html' title='More on business modelling'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-29991918.post-4898164656552419381</id><published>2008-10-21T14:39:00.009Z</published><updated>2008-12-08T17:47:04.187Z</updated><title type='text'>Business Modelling</title><content type='html'>&lt;h3&gt;Category: &lt;em&gt;IT&lt;/em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Topic: &lt;em&gt;Business Modelling&lt;/em&gt;&lt;/h3&gt; &lt;br /&gt;I'm working on a book describing how &lt;a href="http://www.mitchellhorvath.com/"&gt;Mitchell Horvath&lt;/a&gt; and &lt;a href="http://www.inferdata.com/"&gt;InferData &lt;/a&gt;consultants build business models. It's 80% finished, so there's only another 80% to go :-)&lt;br /&gt;&lt;br /&gt;Key to the approach is the idea of observational semantics. Instead of asking, for instance, "when a customer withdraws cash, what are the business rules to constrain this piece of behaviour?" we ask "when we observe such-and-such a piece of behaviour, what does the business call what has happened?"&lt;br /&gt;&lt;br /&gt;Adopting the observational approach helps to keep you focused on the business to be modelled, and away from software-oriented ideas of the system(s) to be built. We like to be able to focus on the business, rather than the software, whenever we're trying to uncover (or help to design) the rules by which the business runs.&lt;br /&gt;&lt;br /&gt;The goal is to have a complete draft of the book to send to a publisher by the end of the (northern hemisphere) winter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29991918-4898164656552419381?l=richard-mitchell.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/4898164656552419381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29991918/posts/default/4898164656552419381'/><link rel='alternate' type='text/html' href='http://richard-mitchell.blogspot.com/2008/10/business-modelling.html' title='Business Modelling'/><author><name>Richard Mitchell</name><uri>http://www.blogger.com/profile/13706616262134709276</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_Qnd1x6dTWjk/SYhVCudPltI/AAAAAAAAAAk/BhfrCvRtl14/S220/Richard.jpg'/></author></entry></feed>
