<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:thr="http://purl.org/syndication/thread/1.0">
    <title>Michael Scharf</title>
    
    <link rel="alternate" type="text/html" href="http://blogs.windriver.com/scharf/" />
    <link rel="service.post" type="application/atom+xml" href="http://www.typepad.com/t/atom/weblog/blog_id=522345" title="Michael Scharf" /> 
    <id>tag:typepad.com,2003:weblog-522345</id>
    <updated>2006-10-08T18:51:29Z</updated>
    <subtitle>Insights, Ideas, Tips and Tricks for Software Developers</subtitle>
    <generator uri="http://www.typepad.com/">TypePad</generator>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/scharf" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="scharf" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
        <title>Why engineers are "immune" to marketing messages...</title>
        <link rel="alternate" type="text/html" href="http://blogs.windriver.com/scharf/2006/10/why_engeneers_a.html" />
        <link rel="service.edit" type="application/atom+xml" href="http://www.typepad.com/t/atom/weblog/blog_id=522345/entry_id=13253051" title="Why engineers are &quot;immune&quot; to marketing messages..." />
        <link rel="replies" type="text/html" href="http://blogs.windriver.com/scharf/2006/10/why_engeneers_a.html" thr:count="1" thr:when="2006-10-20T21:05:36Z" />
        <id>tag:typepad.com,2003:post-13253051</id>
        <published>2006-10-08T11:51:29-07:00</published>
        <updated>2006-10-08T18:51:29Z</updated>
        <summary>On Friday, I read Rob McCammon's blog entry titled The Right Requirements Plus Good Advice Result in Better Solutions Faster. The message is "don't take requirements literally, figure out what the real problem is and find a solution for the...</summary>
        <author>
            <name>Michael Scharf</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Engineering" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="buzzwords" />
        <category scheme="http://sixapart.com/ns/types#tag" term="engineers" />
        <category scheme="http://sixapart.com/ns/types#tag" term="marketing" />
        
<content type="html" xml:lang="en-US" xml:base="http://blogs.windriver.com/scharf/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;On Friday, I read &lt;a href="http://blogs.windriver.com/mccammon"&gt;Rob McCammon's&lt;/a&gt; blog entry titled &lt;a href="http://blogs.windriver.com/mccammon/2006/10/new_approaches_.html"&gt;The Right Requirements Plus Good Advice Result in Better Solutions Faster&lt;/a&gt;. The message is "&lt;em&gt;don't take requirements literally, figure out what the real problem is and find a solution for the real problem (not the solution implied in the requirement). Use the help of people that look at it from another perspective&lt;/em&gt;". I could not agree more! But the real interesting thing is the message behind the message, something about marketing in general. &lt;strong&gt;But before you continue reading, &lt;/strong&gt;&lt;a href="http://blogs.windriver.com/mccammon/2006/10/new_approaches_.html"&gt;&lt;strong&gt;read Rob's original posting&lt;/strong&gt;&lt;/a&gt;, I want that you read it unbiased.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;The message behind the message is a message about how marketing works. I read the blog two days ago, and the only thing I remembered was: "why did Rob need a neighbor to see a generator was the best way to go?". I know Rob. He is a really bright guy. So, why did he need his neighbor? Ok, I'm biased. Rob is a marketing guy, and we (engineers) don't trust marketing. We want to know the "truth" behind the marketing message. Therefore, we read marketing messages more critical than other messages. Even if it is true (that he needed his neighbours help), it sounds to me like he tweaked reality a bit to make his point. This weakened the true point of his message (that we have to find the truth behind a requirement and that we need the perspective of others). I could not hear it. I got sidetracked.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;So, the message behind the message is that &lt;strong&gt;marketing guys&lt;a href="#remark"&gt;(*)&lt;/a&gt; "optimize" their messages by "tweaking" reality.&lt;/strong&gt; But engineers want the real truth. We simply don't believe in the slick marketing messages. We are a hypersensitive when marketing is "tweaking reality" to make the point. &lt;strong&gt;Even if the base message is true, the "tweaking" decreases its creditability and authenticity.&lt;/strong&gt; This is the reason why many engineers are "immune" to marketing messages. We don't trust the entire message if we have the slightest doubt on one of the sub-messages. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;There's another incarnation of the same problem in Robs posting. It is the use of buzzwords in the title: "&lt;em&gt;The Right Requirements Plus Good Advice Result in Better Solutions Faster&lt;/em&gt;". What is "&lt;em&gt;Right&lt;/em&gt;", "&lt;em&gt;Good Advice &lt;/em&gt;" and "&lt;em&gt;Better Solutions Faster&lt;/em&gt;"? It sounds to me like &lt;strong&gt;flashy marketing buzzwords. They have no value to engineers&lt;/strong&gt;... We ignore it, similar to flashy animated advertisements on web page, known as &lt;a href="http://en.wikipedia.org/wiki/Banner_blindness"&gt;Banner Blindness&lt;/a&gt;. We simply don't see it, we don't click on it.... &lt;strong&gt;The more you make it flash, the less we see it&lt;/strong&gt;.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;I don't feel good dissecting and criticising Rob's message, but it is such a great example of a marketing message. In some sense, I applied the advice he gave us in his blog entry. The &lt;em&gt;requirement&lt;/em&gt; is to "effectively communicate with the community". The &lt;em&gt;implied solution&lt;/em&gt; is "write &lt;em&gt;slick&lt;/em&gt; blog entries". The &lt;em&gt;method to come to a better solution&lt;/em&gt; is to use the expertise or perspective of others (in this case engineers) that are complimentary to your own. The &lt;em&gt;shift in perspective&lt;/em&gt; is that slickness does not matter, its trustworthiness. The &lt;em&gt;solution&lt;/em&gt; is to tweak the massage less and cope with the imperfect reality.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;The real irony is that I have been struggling with this blog entry much longer than any other entry I ever wrote. I tried to tweak the words to get my point across. It's so hard to "do it right", especially if your blog is supported by the company....&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a name="remark"&gt;(*)&lt;/a&gt; Disclaimer: When I say "marketing guy", I don't want to discredit any person working in marketing. Especially not Rob. I refer to the concept of what engineers think when they refer to "marketing guys" or people creating "marketing messages". Maybe the real problem is the prejudices I (and maybe some of my engineering colleagues) have about marketing. But that's another story, and some "marketing guy" or "engineer" may comment on this. Let's get some "blog-wars" started ;-)&lt;/p&gt;&#xD;
&#xD;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/scharf?a=me1mdj1kyxM:kLWRb2z6SwY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=me1mdj1kyxM:kLWRb2z6SwY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=me1mdj1kyxM:kLWRb2z6SwY:W1ccf-mKbkM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=W1ccf-mKbkM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=me1mdj1kyxM:kLWRb2z6SwY:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?i=me1mdj1kyxM:kLWRb2z6SwY:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=me1mdj1kyxM:kLWRb2z6SwY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Is footprint still important for desktop applications?</title>
        <link rel="alternate" type="text/html" href="http://blogs.windriver.com/scharf/2006/10/is_footprint_st.html" />
        <link rel="service.edit" type="application/atom+xml" href="http://www.typepad.com/t/atom/weblog/blog_id=522345/entry_id=13212223" title="Is footprint still important for desktop applications?" />
        <link rel="replies" type="text/html" href="http://blogs.windriver.com/scharf/2006/10/is_footprint_st.html" thr:count="3" thr:when="2007-05-22T14:29:01Z" />
        <id>tag:typepad.com,2003:post-13212223</id>
        <published>2006-10-05T18:11:11-07:00</published>
        <updated>2006-10-06T01:11:11Z</updated>
        <summary>I just read Tomas' blog entry titled Is footprint still important for embedded devices? His answer is a clear "Yes." Well, what about desktop applications? Why the heck are desktop applications so slow and memory-hungry? Like Tomas, I bought my...</summary>
        <author>
            <name>Michael Scharf</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Engineering" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="desktop" />
        <category scheme="http://sixapart.com/ns/types#tag" term="eclpise" />
        <category scheme="http://sixapart.com/ns/types#tag" term="footprint" />
        <category scheme="http://sixapart.com/ns/types#tag" term="memory" />
        <category scheme="http://sixapart.com/ns/types#tag" term="performance" />
        <category scheme="http://sixapart.com/ns/types#tag" term="speedup" />
        
<content type="html" xml:lang="en-US" xml:base="http://blogs.windriver.com/scharf/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;I just read &lt;a href="http://blogs.windriver.com/evensen/"&gt;Tomas&lt;/a&gt;' blog entry titled &lt;a href="http://blogs.windriver.com/evensen/2006/10/is_footprint_st.html"&gt;Is footprint still important for embedded devices?&lt;/a&gt; His answer is a clear "Yes." Well, what about desktop applications? Why the heck are desktop applications so slow and memory-hungry? &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Like Tomas, I bought my first computer in the late Seventies. I did a vacation job for a month and bought the computer with a friend (50/50), because it was so expensive. It was a &lt;a href="http://en.wikipedia.org/wiki/Commodore_pet"&gt;Commodore Pet 2001&lt;/a&gt; with 8kb of RAM. Unlike Tomas, I programmed it in Basic (Assembly did not attract me). One of the first programs I got running was Joseph Weizenbaum's &lt;a href="http://en.wikipedia.org/wiki/ELIZA"&gt;ELIZA&lt;/a&gt;. I actually got a listing and I typed it in and modified it a bit. From then on I was fascinated by the art of programming: Modula-2, C++, Python, Java, showing a trend in the direction of higher level "more expensive" languages and systems. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Ok, back to the question. Let's look at IDEs as an example. For some reasons IDEs always "stress the desktop systems." 20 years ago I used EMACS. At that time people said EMACS was an acronym for Extended Memory And Constantly Swapping. With SNiFF we had the same problem. And today, Eclipse stresses our desktops. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Yes, careful design, better algorithms and data-structures can improve performance and footprint, but don't think desktop application developers don't already do this. The real problem is somewhere else. Identifying and fixing real hotspots is easy. In all those systems, quite some effort was put into performance and footprint improvements. However, it is incredibly hard to optimize complex systems with no real hotspots. If you use a memory analyzer or a profiler &lt;strong&gt;you'll hardly&lt;strong&gt; &lt;/strong&gt;find hot-spots that &lt;/strong&gt;&lt;strong&gt;contribute more than 5-10% of the overall footprint&lt;/strong&gt;. There are usually higher priority tasks during development than optimizing a 5% problem. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Let's look at Eclipse. Where does this "distributed footprint problem" come from? Is it Java? No, &lt;strong&gt;Java is much more efficient than most people think&lt;/strong&gt;. Unlike C++, Java managed to provide an environment where class libraries, tool kits and frameworks from different sources work well together. Why reinvent the wheel, when someone has already done the work for you? You can focus on the application you want to create instead of getting lost in infrastructure. The price you pay is that the components you use are usually not tailored for your use case, but can often be used for a wider range of applications. &lt;strong&gt;More general libraries add overhead in performance and footprint, but they can drastically reduce the development effort.&lt;/strong&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Could we rewrite Eclipse (or Workbench) with a better footprint? We probably could. In some cases we could use better overall design, better algorithms or data-structures. Preserving the functionality Eclipse has today, we could maybe get an overall factor 2 or 3 if we are lucky (or good). But then it would probably be an island solution. We would have more applications running in parallel, which then would add to the overall footprint.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;What can &lt;em&gt;you&lt;/em&gt; do to speedup your desktop applications today? &lt;/strong&gt;In most cases adding memory is the solution. Don't let you computer touch the hard-disk. &lt;strong&gt;Just go to the next computer shop and buy 2GB of memory and plug it into your computer&lt;/strong&gt;. At least this is &lt;a href="http://michaelscharf.blogspot.com/2006/01/how-to-speed-up-eclipse-on-laptop.html"&gt;what helped me&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/scharf?a=BKt31HCNyeg:6ErlMMXP4HA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=BKt31HCNyeg:6ErlMMXP4HA:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=BKt31HCNyeg:6ErlMMXP4HA:W1ccf-mKbkM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=W1ccf-mKbkM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=BKt31HCNyeg:6ErlMMXP4HA:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?i=BKt31HCNyeg:6ErlMMXP4HA:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=BKt31HCNyeg:6ErlMMXP4HA:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
    <entry>
        <title>Domain Driven Design: Another buzzword?</title>
        <link rel="alternate" type="text/html" href="http://blogs.windriver.com/scharf/2006/10/domain_driven_d.html" />
        <link rel="service.edit" type="application/atom+xml" href="http://www.typepad.com/t/atom/weblog/blog_id=522345/entry_id=13155970" title="Domain Driven Design: Another buzzword?" />
        <link rel="replies" type="text/html" href="http://blogs.windriver.com/scharf/2006/10/domain_driven_d.html" thr:count="0" />
        <id>tag:typepad.com,2003:post-13155970</id>
        <published>2006-10-02T20:47:37-07:00</published>
        <updated>2006-10-03T03:47:37Z</updated>
        <summary>A few weeks ago I bought the book "Domain Driven Design" by Eric Evans. For many years I've been very sceptical about "Design Methodologies", because they seem complicated and not really practical for the domains I've been working on. So,...</summary>
        <author>
            <name>Michael Scharf</name>
        </author>
        <category scheme="http://www.sixapart.com/ns/types#category" term="Software Engineering" />
        
        <category scheme="http://sixapart.com/ns/types#tag" term="Domain Driven Design" />
        <category scheme="http://sixapart.com/ns/types#tag" term="software engineering" />
        
<content type="html" xml:lang="en-US" xml:base="http://blogs.windriver.com/scharf/">&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;A few weeks ago I bought the book &lt;a href="http://domaindrivendesign.org/books/index.html#DDD"&gt;"Domain Driven Design"&lt;/a&gt; by Eric Evans. For many years I've been very sceptical about "Design Methodologies", because they seem complicated and not really practical for the domains I've been working on. So, I did not expect too many new insight when I started reading the book....&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;How wrong I was! Ok, lets start from the beginning... The basic idea of Domain Driven Design is to come up with a language to describe the problem domain. This is called an "ubiquitous language", because the language is not only used in conversations but also in the formal model. The formal model is represented and implemented in the programming language of the system (e.g. java). This is a very agile process, as you understand the domain better you will update the model. The model reflects the understanding of the domain. Your understanding of the domain evolves, by discussing with the domain experts using the ubiquitous language. Keep the model and the design documentation up to date with your understanding of the domain. &lt;strong&gt;Because the language we use to talk about the problem domain is the same language we use when we talk about the model, we can reason on the formal model and see if the conclusions make sense in the real domain.&lt;/strong&gt; This might sound like the simple approach: every "thing" you talk about in the problem domain is an "object". But it goes far beyond that. The idea is to distill the essence of the domain into the core model. Read &lt;a href="http://domaindrivendesign.org/books/index.html#DDD"&gt;Chapter 1&lt;/a&gt; of Erics book to get some more insight on what Domain Driven Design is.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;For many years I thought that I'm happy to work in a domain, where we, the developers, are the domain experts: I've been working on &lt;a href="http://en.wikipedia.org/wiki/Integrated_development_environment"&gt;IDEs&lt;/a&gt; for more than 12 years (SNiFF+, &lt;a href="http://www.eclipse.org/"&gt;eclipse&lt;/a&gt;). Before that I've been working as a scientist (physicist) in the area of computational molecular biology. Here again, "we" were the domain experts. No messing with "computer illiterate" domain experts. But after reading Eric's great book, I came to the conclusion, that &lt;strong&gt;being your own domain expert might make the design much harder, because it's so easy to get lost in the implementation details&lt;/strong&gt; and so hard to come up with a ubiquitous language that represents the domains perceived by the user. &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;When I look at &lt;a href="http://www.eclipse.org/"&gt;eclipse&lt;/a&gt;, I see that many areas of great design at the level of implementation and overall architecture. There's a great plugin infrastructure and the APIs are well though out. However, I also see some shortcomings when it comes to the domain models of the problems eclipse really wants to solve. Simply put: &lt;strong&gt;not all eclipse users are eclipse plugin-developers and the domain of software engineering lacks clear models in some places&lt;/strong&gt;.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;I also started looking into what we have done over the years and I realize that we ignored many of the principles of Domain Driven Design.&lt;strong&gt; I can see many areas where we should start building better models, making implicit concepts explicit, talking more to our users, not assuming that we know how software development works.&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;For many years I have been saying, that the documentation team should be part of the design team, because they have to "explain" the concepts at the end. My assumption is: software that is hard to explain is hard to use. Therefore, I thought that the documentation team should come up with the terms and the language to describe the system. They know the language best. In some sense, I was mentally putting the documentation team into the role of the domain experts. I also thought that my "language" problems have to do with the fact that English is not my mother tongue.&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Domain Driven Design is like a revelation to me! &lt;strong&gt;I realized already that language is important but I never thought of formalizing the language into a design.&lt;/strong&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;Now I'll take a fresh look at our designs. Let's see how this new insight helps me in my daily work....&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/scharf?a=0DnxGMgvQ9Y:HM7wpBu0pGI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=0DnxGMgvQ9Y:HM7wpBu0pGI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=0DnxGMgvQ9Y:HM7wpBu0pGI:W1ccf-mKbkM"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=W1ccf-mKbkM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=0DnxGMgvQ9Y:HM7wpBu0pGI:wF9xT3WuBAs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?i=0DnxGMgvQ9Y:HM7wpBu0pGI:wF9xT3WuBAs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/scharf?a=0DnxGMgvQ9Y:HM7wpBu0pGI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/scharf?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content>


    </entry>
 
</feed><!-- ph=1 -->

