<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx</link><description>Recently, a message called my attention to a classic article from Joel on Software on the Law of Leaky Abstractions . It's a fun article and I recommend it heartily. In this article, Joel argues that most techologies are designed to abstract something</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx#3835183</link><pubDate>Thu, 12 Jul 2007 21:45:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3835183</guid><dc:creator>Brian</dc:creator><description>&lt;p&gt;Show me a business process not documented in the code and I'll show you an out of date, innacurate process documentation.&lt;/p&gt;
&lt;p&gt;Regarding #2, I hear this a lot from analysts and other &amp;quot;non-coders&amp;quot; who don't want to exert the effort to look at code to see documentation. Code isn't something magical that is impossible to access. It's usually just text files. And normally there's some tool like javadoc that goes through and makes the comments real pretty and linky. If you're an analyst or project manager and you can't look into a codebase to view comments then I don't want you on my team. &lt;/p&gt;
&lt;p&gt;What would you do if someone said &amp;quot;I can't look at that documentation, it's spread across 10 word files. Too complex, I'm not a MS Office Certified Word Operator.&amp;quot; That's what I would do if someone said they couldn't look to a .java file to see what roles are involved in a service operation.&lt;/p&gt;
&lt;p&gt;Your other points are valid, and documenting the process in the code (which usually means building the documentation from the code itself) isn't perfect but it's better than the other means that get outdated or never even created properly.&lt;/p&gt;
&lt;p&gt;I think you're better off being realistic, adding some specific comment tags to your code and auto-generating documentation. This is the best way to get accurate documentation.&lt;/p&gt;</description></item><item><title>re: Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx#3838126</link><pubDate>Fri, 13 Jul 2007 02:12:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3838126</guid><dc:creator>NickMalik</dc:creator><description>&lt;p&gt;@Brian&lt;/p&gt;
&lt;p&gt;&amp;quot;Show me a business process not documented in the code and I'll show you an out of date, innacurate process documentation.&amp;quot;&lt;/p&gt;
&lt;p&gt;And I will show you an organization at Level 1 of process maturity.&lt;/p&gt;
&lt;p&gt;&amp;quot;If you're an analyst or project manager and you can't look into a codebase to view comments then I don't want you on my team.&amp;quot;&lt;/p&gt;
&lt;p&gt;The feeling is mutual, I'm sure. &amp;nbsp;Anyone unwilling to document the business process, and maintain it, and drive application requirements FROM the process (and not vice versa) has no place on my team either.&lt;/p&gt;
&lt;p&gt;Your attitude is common, but indicative of poor practices. &amp;nbsp;You have learned the wrong way to develop business processes and you need to actually work in a progressive environment, where processes are considered valuable, before you will get the opportunity to learn a better way. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the days when Object Oriented code was a new practice, many folks expressed real reticence about learning OO coding. &amp;nbsp;&amp;quot;There's nothing I can do in C++ that I can't do in C!&amp;quot; &amp;nbsp;There are a few of those folks left, and they don't like their jobs. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Get some training. Your career will benefit.&lt;/p&gt;
</description></item><item><title>re: Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx#3851481</link><pubDate>Fri, 13 Jul 2007 22:02:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3851481</guid><dc:creator>Udi Dahan</dc:creator><description>&lt;p&gt;While I agree that automated forward and backward engineering of processes, diagrams to code and back, is a lofty goal I think that we need an evolutionary path to get there.&lt;/p&gt;
&lt;p&gt;The problems I run into when getting handed some kind of process description is that it often leaves out critical details, specifically those around failure and partial failure conditions. Furthermore, I also experience variable resolution within each process - some parts are highly specific, others merely hand-waving.&lt;/p&gt;
&lt;p&gt;The methodology of implementing such processes involves requirements excavation, analysis, design, prototypes, etc. We iterate that a bunch of times. This is a two-way learning process; both business and IT come out of it with a deeper understanding of the what the process SHOULD be.&lt;/p&gt;
&lt;p&gt;Even if we could get a full and coherent mapping from the code to artifacts the business could understand, it would not mitigate the real problem. That of the request to change the process coming with similar fidelity as the original process description.&lt;/p&gt;
&lt;p&gt;The solution, if any exists, is a maturation of the whole organization - people first. Then we enter into the oh-so-problematic domain of organizational learning and memory. There we see our best efforts crumble under promotions, reorgs, and quality people leaving.&lt;/p&gt;
&lt;p&gt;Woe be us enterprise architects doomed to our promethean fate (&lt;a rel="nofollow" target="_new" href="http://en.wikipedia.org/wiki/Prometheus"&gt;http://en.wikipedia.org/wiki/Prometheus&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;But that's why we get the &amp;quot;big bucks&amp;quot; :)&lt;/p&gt;</description></item><item><title>re: Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx#3862090</link><pubDate>Sat, 14 Jul 2007 12:24:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3862090</guid><dc:creator>Peter</dc:creator><description>&lt;p&gt;Nick,&lt;/p&gt;
&lt;p&gt;You speak from my heart. I was wishing to write the exact thing out of myself so long ago. Now you have done it:)&lt;/p&gt;
&lt;p&gt;However using SOA to provide that 90% real-life BP mapping sounds a little weird to me but time will tell you are right or not. I agree: at this time there is no other concise and commonly accepted technology (or maybe methodology???) out there than using SOA like (de-)composition. &lt;/p&gt;
&lt;p&gt;Thanks!&lt;/p&gt;
&lt;p&gt;Peter&lt;/p&gt;</description></item><item><title>re: Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx#3872514</link><pubDate>Sun, 15 Jul 2007 04:08:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3872514</guid><dc:creator>NickMalik</dc:creator><description>&lt;p&gt;Hi Udi,&lt;/p&gt;
&lt;p&gt;I'm not sure that I want to automate the generation of code from process diagrams. &amp;nbsp;I suppose we will get there, but it will be a professional member of the IT team that builds the diagram. &amp;nbsp;It is just visual code at that point. &amp;nbsp;Still: no design required.&lt;/p&gt;
&lt;p&gt;I also agree with the low consistency and quality of the business process diagrams. &amp;nbsp;That said, if we only have developers and no testers, we get crappy code. &amp;nbsp;If we only have business process analysts, and no business process testing tools, processes, and people, then we get crappy processes. &amp;nbsp;We need to test the process. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;A business process compiler would be nice. &amp;nbsp;Developers rely on their language compilers (and IDE) to find the simple syntax errors that are scattered throughout the process diagrams. &amp;nbsp;Perhaps with simulation software, we won't have to have a coder working side by side with an analyst to work out the details. &amp;nbsp;You are completely correct: we are immature in this space at the moment. &amp;nbsp;People, process and tools.&lt;/p&gt;
&lt;p&gt;That said, most organizations have the maturity to create an iron-clad process that they will defend. &amp;nbsp;Think of Sarbanes-Oxley. &amp;nbsp;It takes executive will, but it can be done.&lt;/p&gt;
&lt;p&gt;I would be honored to be considered as effective as Prometheus. &amp;nbsp;At least he provided fire to man. &amp;nbsp;Most days, I feel like Sisyphus, rolling a rock uphill and never making it to the top before it escapes and rolls back down.&lt;/p&gt;
&lt;p&gt;Thanks for the feedback.&lt;/p&gt;
</description></item><item><title>re: Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx#3874693</link><pubDate>Sun, 15 Jul 2007 10:32:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3874693</guid><dc:creator>Craig Brown</dc:creator><description>&lt;p&gt;Nice article &amp;amp; I love your first response to Brian. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Technologists need to remember they aren't patronised as artists. &amp;nbsp;They are hired as artisans to service their client's business needs.&lt;/p&gt;
&lt;p&gt;And on the topic of BP documetation; don't you see a determined effort by more mature organisations to develop business process competencies these days? &amp;nbsp;Things are getting better, gradually.&lt;/p&gt;
&lt;p&gt;Cheers&lt;/p&gt;</description></item><item><title>re: Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx#3878898</link><pubDate>Sun, 15 Jul 2007 17:02:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3878898</guid><dc:creator>NickMalik</dc:creator><description>&lt;p&gt;@Craig,&lt;/p&gt;
&lt;p&gt;&amp;quot;Things are getting better, gradually.&amp;quot;&lt;/p&gt;
&lt;p&gt;Yes. &amp;nbsp;They are. &amp;nbsp;I didn't drive this bandwagon, but I'm jumping on. &amp;nbsp;It's the right thing to do, and now is the right time to do it. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;I do see major movements in standards, tools, and mindshare. &amp;nbsp;It will take some time to get the business and technology schools to teach the right material, but movement is happening. &amp;nbsp;I am hopeful.&lt;/p&gt;
</description></item><item><title>re: Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx#3944793</link><pubDate>Thu, 19 Jul 2007 02:21:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3944793</guid><dc:creator>Captain Kirk</dc:creator><description>&lt;p&gt;NickMalik,&lt;/p&gt;
&lt;p&gt; &amp;nbsp;I have been on the darkside of development for too long. &amp;nbsp;We could not trust external documentation, it was always out of date (And this is at a big insurance company). &amp;nbsp;We trusted the code. &amp;nbsp;PDP-11 Days.&lt;/p&gt;
&lt;p&gt; &amp;nbsp;But I have seen the light... &amp;nbsp;So I would like your opinion on the following...&lt;/p&gt;
&lt;p&gt; &amp;nbsp;Where do you see Using the Testing System to encapsulate the business requirements?&lt;/p&gt;
&lt;p&gt; &amp;nbsp;We are in the process of developing new software, and have decided to embrace a Test Driven Development attitude on top of an rather Agile Process. &amp;nbsp;BUT Only after very thorough analysis. &amp;nbsp;(I disagree that design should be done ad hoc, 22 years of development has taught me the best decisions are made with the best SOLID analysis).&lt;/p&gt;
&lt;p&gt; &amp;nbsp;So, our answer to the documentation delimma was that the Diagrams would be &amp;quot;STORED&amp;quot; in test modules that excericised the logic. &amp;nbsp;And as bugs are discovered they are put here and fixed, and the documentation updated.&lt;/p&gt;
&lt;p&gt; &amp;nbsp;Again, I am interested in your opinion on this...&lt;/p&gt;
&lt;p&gt;We believe it solves a couple key problems and helps&lt;/p&gt;
&lt;p&gt;to keep the developers and the business people working from the same pages....&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;Kirk Out!&lt;/p&gt;</description></item><item><title>re: Applications ARE the leaky abstractions</title><link>http://blogs.msdn.com/nickmalik/archive/2007/07/11/applications-are-the-leaky-abstractions.aspx#3946720</link><pubDate>Thu, 19 Jul 2007 04:43:58 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3946720</guid><dc:creator>NickMalik</dc:creator><description>&lt;p&gt;@Captain Kirk,&lt;/p&gt;
&lt;p&gt;I'm a trekkie too. &amp;nbsp;First series. &amp;nbsp;Anyway...&lt;/p&gt;
&lt;p&gt;Testing and Business Requirements...&lt;/p&gt;
&lt;p&gt;Once you have the overall business process documented, I would consider using Fitnesse (a tool on top of FIT) for documenting the acceptance cases. &amp;nbsp;In a truly agile development process, it matters more that you have defined the boundaries of &amp;quot;working code&amp;quot; than having defined all of the business rules and process flows. &amp;nbsp;(It's an interesting approach, to say the least).&lt;/p&gt;
&lt;p&gt;That said, as you may guess from my description, I do not believe that it makes sense to define the acceptance cases before you define the business process. &amp;nbsp;That is simply backwards. &amp;nbsp;You have to assume a good understanding of the business process in order to create acceptance cases.&lt;/p&gt;
&lt;p&gt;One thing that always surprises me is that developers will often assume that they are responsible for developing software according to the business process defined by the business. &amp;nbsp;That is nonsense. &amp;nbsp;It is more collaborative than that. &amp;nbsp;Agile really shines in that you can work directly with the business to show them the actual effects of creating the pie-in-the-sky process that they said they wanted.&lt;/p&gt;
&lt;p&gt;I have often heard a business person say &amp;quot;I need process X&amp;quot; and thought to myself (WTF) &amp;quot;you must be joking.&amp;quot; &amp;nbsp;With an agile dev process, instead of being the bearer of bad news and the outside expert who will make the business person feel stupid, you get to play the role of &amp;quot;helpful agent&amp;quot; who shows the business user that they want something simpler, because what they asked for is probably not a good idea.&lt;/p&gt;
&lt;p&gt;I do not believe that you store diagrams in test modules. &amp;nbsp;That tells me that either (a) you don't trust your developers to open up the diagrams if you put them outside the code, or (b) you don't put diagrams in your source code control system. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;My expectations would be reverse of both of those:&lt;/p&gt;
&lt;p&gt;1) Developers will use the diagrams during the sprint perspective and presentation meeting with the business to demonstrate how the app performs according to their diagram, and 2) the diagrams must be stored in source control with the source code in order to insure that you have good version control.&lt;/p&gt;
&lt;p&gt;Two kinds of bugs: either the code matches the process, and the process is wrong, or the code is wrong. &amp;nbsp;If the process is wrong, it needs an entirely different kind of workflow and review process than if the code is wrong. &amp;nbsp; Therefore, you WANT to have these documents in seperate files. &amp;nbsp;They have different lifespans, stakeholders, and concerns. &amp;nbsp;It doesn't make sense to couple them.&lt;/p&gt;
</description></item></channel></rss>