<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>Edward Bakker</title>
  <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/" />
  <link rel="self" href="http://www.edwardbakker.nl/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2009-11-24T15:58:09.8994621+01:00</updated>
  <author>
    <name>Edward Bakker </name>
  </author>
  <subtitle>Guidance, automation and factories</subtitle>
  <id>http://www.edwardbakker.nl/</id>
  <generator uri="http://www.dasblog.net" version="1.8.5223.2">DasBlog</generator>
  <entry>
    <title>More return on development with Application Lifecycle Management</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,29c46be7-6722-4c3e-aefa-2b3bb3e03082.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,29c46be7-6722-4c3e-aefa-2b3bb3e03082.aspx</id>
    <published>2009-11-24T15:58:09.8994621+01:00</published>
    <updated>2009-11-24T15:58:09.8994621+01:00</updated>
    <category term="ALM" label="ALM" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      This is a translated version of an article that I wrote for <a href="www.release.nl">Software
      Release Magazine</a>.  
   </p>
        <p>
          <font size="4">Application Lifecycle Management</font>
        </p>
        <p>
      In the past ten years, the costs of IT projects dropped significantly. In addition,
      the number of projects that turned out to be successful, rose. Nevertheless, only
      forty percent of all IT projects succeeds. This means that it takes less time today
      for a project to fail. Application Lifecycle Management (ALM) may help improve the
      return on projects. An efficient deployment of ALM requires the right scope and focus<strong>.</strong></p>
        <p>
      Today, many organizations regard Application Lifecycle Management (ALM) as one of
      the answers to their bad performing IT departments. With ALM, they try to get more
      grip on software development by integrating, coordinating and controlling the various
      phases of development. ALM guides an organization from software development until
      software implementation and management. Very often, an organization will limit its
      focus to optimizing the developer’s work processes and the communication between developers
      and project managers. An ALM tool is rolled out and its features are used to manage
      the progress of the project as well as the quality of the code. Deploying an ALM tool
      in this way is a step in the right direction but in practice it is not a guarantee
      for success. Without the right focus, software development will remain a stand alone
      activity without any relation to other parts of the organization, including business
      and operations. Additionally, research shows that companies spend on average 30 percent
      of their available IT budget on newly built applications. This means that they neglect
      an area of 70 percent, where optimization is also possible. 
   </p>
        <p>
          <font size="4">More return by shift in focus</font>
        </p>
        <p>
      With the right scope and focus ALM has much to offer. Figure 1 shows a schematic view
      of the lifecycle of an application that is to be developed. In this view de x-axis
      represents the time and the y-axis the value/cost of the application. In this figure,
      the extended curve shows the lifecycle of the application from development until end-of-life.
      The figure provides insight in the different phases of an application’s lifecycle.
      It also enables for determining the impact of ALM. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/MorereturnondevelopmentwithApplicationLi_B8C2/image.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edwardbakker.nl/content/binary/MorereturnondevelopmentwithApplicationLi_B8C2/image_thumb.png" width="660" height="434" />
          </a>
        </p>
        <p>
          <font size="1">Figure 1. The lifecycle of an application</font>
        </p>
        <p>
          <strong>
          </strong> 
   </p>
        <p>
          <strong>Reduce development costs</strong>
        </p>
        <p>
      The lifecycle of an application starts in the first phase of development. As of the
      start of the project, costs are made for design, programming and testing. At this
      time, the application offers no value. All development costs are therefore to be regarded
      as costs. Often, organizations focus on these costs when deploying ALM and optimizing
      the software development process. Figure 1 shows however, that the development phase
      only accounts for a small part for the full lifecycle of the application. 
   </p>
        <p>
          <strong>Time to market</strong>
        </p>
        <p>
      The figure also shows that the application will only add value to the organization
      when it has gone live. This means that the ALM activities need to be focused on getting
      the application (or a part of it) live as soon as possible. One of the ways to do
      this is using agile development methods, including iterative delivery. Shortening
      the time to market not only results in faster added value, it can also provide competitive
      advantage. In general, organizations that are first in addressing new needs or market
      changes profit the most from these developments. Organizations that are trend followers
      profit less; or even worse, they have to invest in order to stay in the market.   
   </p>
        <p>
          <strong>Added Value</strong>
        </p>
        <p>
      It is clear that an application will add value when it has gone live. Many organizations
      do no recognize this added value. ALM activities should focus on getting as much added
      value as possible. As the application is developed for the end-users , it is key to
      involve this group as much as possible in the development process. User involvement,
      support from the (executive) management, defining clear business goals and optimizing
      requirements are all equally important. 
   </p>
        <p>
      One of the ways to realize this is to optimize the communication between the user
      organization and IT and to create a common involvement for all stakeholders. In this
      way, stakeholders are better geared to state their demands. They are also better able
      to determine the consequences of their choices and to change priorities and requirements
      during the project, together with the project team. Here, it is also cost-effective
      to use short iterations, as changes in scope, priorities and requirements can easily
      be made. In this way, an organization can address new insights during the project,
      which may increase the added value of the application further. 
   </p>
        <p>
          <strong>Operational costs</strong>
        </p>
        <p>
      When developing the application it is advisable to acknowledge in an early stage the
      need for application management. By creating consensus on the requirements for the
      management department, operational management costs of the application can be reduced
      significantly. The focus on management is paramount in an ALM approach. 
   </p>
        <p>
          <strong>Extending the lifecycle</strong>
        </p>
        <p>
      By adding value and reducing costs, a developed application will provide return in
      the long run. By focusing on the value of an application and by constantly monitoring
      this aspect, an organization is better capable of determining the moment when value
      is replaced by costs. This early insight helps in deciding what to do with the application:
      adjust or phase out? 
   </p>
        <p>
          <strong>Phase out</strong>
        </p>
        <p>
      When an organization decides to abandon an application, the knowledge of the application
      will lead to less abandoning costs. This is definitely the case when an organization
      combines this knowledge with the optimizations, provided by ALM in the earlier development
      phase of the application. An example is the right documentation on the application
      interface to other systems. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/MorereturnondevelopmentwithApplicationLi_B8C2/image_3.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.edwardbakker.nl/content/binary/MorereturnondevelopmentwithApplicationLi_B8C2/image_thumb_3.png" width="661" height="442" />
          </a>
        </p>
        <p>
          <font size="1">Figure 2. The new lifecycle of an application </font>
        </p>
        <p>
          <strong>The new lifecycle</strong>
        </p>
        <p>
      Figure 2 shows the new lifecycle of the application. This is the result of broadening
      the ALM focus as described earlier. The green field in the figure depicts the extra
      return of the application. This is possible by speeding up the go-live process, a
      longer life of the application and more added value for the user. The red areas in
      the figure represent the decreased development costs and the costs for abandonment. 
   </p>
        <p>
          <font size="4">Priorities of an organization</font>
        </p>
        <p>
      Figure 2 shows that the return on ALM increases when an organization not only focuses
      on the development phase, but also on the other phases of an application’s lifecycle.
      This optimization obviously pays off, but the question is how to relate this to the
      goals of today’s organizations. Many organizations focus on cost reduction, compliancy
      and risk management. How can ALM be related to these three priorities? 
   </p>
        <p>
          <strong>Cost reduction</strong>
        </p>
        <p>
      A too strong focus on cost reduction may well lead to an imbalance in this area, resulting
      in a paralyzed organization in terms of productivity. By continuously executing cost
      reducing measures, tools and communication channels are lost. In the end, this can
      affect the productivity of employees negatively. By combining cost savings and productivity
      improvements this issue can be addressed. 
   </p>
        <p>
      A combination of ALM activities with a so-called <i>high-performance workplace</i> can
      be the answer. The high performance workplace is a physical or virtual environment
      which is especially designed for knowledge and information workers. It supports them
      optimally in executing non-routine duties. In these duties, exploring, learning, innovating,
      collaborating and managing are key. 
   </p>
        <p>
      The current generation of ALM tools already pays attention to optimizing communication
      and collaboration between stakeholders in an IT project. This shows that the awareness
      on effective collaboration is growing. It also requires the focus to be placed on
      the process and the human aspect of collaboration. Important success factors are creating
      joint goals and making sure there is a shared vision of the truth. 
   </p>
        <p>
          <strong>Compliancy</strong>
        </p>
        <p>
      The current compliancy requirements demand a high level of control. In recent years,
      this control is expressed in continuous process optimization. The need for a process
      approach led to reduction of flexibility within an organization. It is becoming increasingly
      difficult to address market changes and needs without losing control. The focus on
      processes, tools and management also led to a situation in which up to twenty percent
      of project costs can be allocated to the developed software. The rest of the costs
      are related to project support and meeting internal and external requirements. The
      new generation ALM tools and corresponding methods, enable an organization to meet
      these strict compliancy requirements without affecting flexibility. These tools provide
      the necessary mechanisms and means of control to link requirements, quality metrics
      and the solution. This makes it much easier to prove that the solution meets all requirements.
      The full support of agile methods within the ALM tools ensures the required flexibility. 
   </p>
        <p>
          <strong>Risk management</strong>
        </p>
        <p>
      Experience from the past shows that risk is inherent to projects. However, the higher
      the risk, the higher the return, as optimists say. It is not necessary for organizations
      to exclude all risks. They need to assess risks continuously on the return they can
      provide. The collaboration in a project, the commitment from stakeholders and the
      combination of business and ICT knowledge enable the right assessment of risks. This
      may lead to a situation in which a risk that is regarded as unacceptable by individual
      members, is controllable or even desirable. 
   </p>
        <p>
          <font size="4">Conclusion </font>
        </p>
        <p>
      ALM is gaining in popularity. Many organizations take their first steps in this area
      and start to purchase ALM tools. Seemingly without thinking, they focus on the development
      phase. This is an excellent first step but still they should not stop here. By broadening
      their focus and incorporating the full lifecycle of an application in their approach,
      they are able to increase their return on ALM significantly. The broader approach
      offers more insight in the added value of the application. By combining ALM and a
      high performance workplace, and by putting the human aspect first, it is possible
      tot create an environment in which collaboration is optimized. The result is a software
      development process with predictable results and sufficient flexibility to contribute
      to the three main priorities of an organization: cost reduction, compliancy and risk
      management. 
   </p>
        <p>
        </p>
        <p>
          <a href="http://www.edwardbakker.nl">
          </a>
        </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=29c46be7-6722-4c3e-aefa-2b3bb3e03082" />
      </div>
    </content>
  </entry>
  <entry>
    <title>WSCF.blue Beta 1 is out!</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,dcf22cb5-ce5e-4572-b6fd-56ebb5ed6fb3.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,dcf22cb5-ce5e-4572-b6fd-56ebb5ed6fb3.aspx</id>
    <published>2009-07-04T22:31:37.3779223+02:00</published>
    <updated>2009-07-04T22:31:37.3779223+02:00</updated>
    <category term="Web Services" label="Web Services" scheme="dasBlog" />
    <category term="WSCF.blue" label="WSCF.blue" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I Just wanted to let you know that we have just released the <a href="http://wscfblue.codeplex.com/">Beta
      1 of WSCF.blue</a>. This great tool supports a Contract First Approach for developing
      webservices in Visual Studio 2008. Some time ago, I took the project lead (together
      with <a href="http://blogs.thinktecture.com/cweyer/">Christian</a>) for this great
      tool. Unfortunately, I have been kind of busy lately so we didn’t made a lot of progress
      in the last couple of months. Just recently a couple of  new members joined our
      team which resulted in this Beta 1 release. In this release we added MSI support which
      was one of the key requested features for this tool. For some more info on this release
      I suggest to have a look at <a href="http://santoshbenjamin.wordpress.com/2009/07/04/wscf-blue-beta-1/">this
      post</a> from <a href="http://santoshbenjamin.wordpress.com/">Benjamin</a> (one of
      our new team mebers!). Our new team members inspired us a lot and brought some great
      ideas so expect some cool new features soon! Let us know what you think of this release
      on our <a href="http://wscfblue.codeplex.com/Thread/List.aspx">forum</a>. 
   </p>
        <p>
      Thanks <a href="http://blogs.thinktecture.com/buddhike/">Buddhike</a>, <a href="http://santoshbenjamin.wordpress.com/">Benjamin</a> and
      Alex Meyer-Gleaves for getting this new release out!!
   </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=dcf22cb5-ce5e-4572-b6fd-56ebb5ed6fb3" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Architectural Inspections: Implemented in Visual Studio Team Architect 2010</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,19de7161-769f-4b70-81b6-b435c0557093.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,19de7161-769f-4b70-81b6-b435c0557093.aspx</id>
    <published>2009-05-28T22:05:24.2662549+02:00</published>
    <updated>2009-05-28T22:05:24.2662549+02:00</updated>
    <category term="VSTS 2010" label="VSTS 2010" scheme="dasBlog" />
    <category term="Application Lifecycle Managment" label="Application Lifecycle Managment" scheme="dasBlog" />
    <category term="Architectural Guidance" label="Architectural Guidance" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      Currently, <a href="http://www.clemensreijnen.nl">Clemens</a> and I are writing a
      whitepaper about Architecture, <a href="http://www.codeplex.com/AppArch">Application
      Architecture Guide 2.0</a> and <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=255fc5f1-15af-4fe7-be4d-263a2621144b&amp;displaylang=en">Visual
      Studio Team Architect 2010</a>. (VSTA). In addition to this paper we are also working
      on some ‘tooling’ that we plan to deliver with the paper. Since we are not done with
      the paper and tooling yet and this blog becomes a bit too quite I decided to start
      sharing some of our thoughts and work in this space on this blog. 
   </p>
        <p>
      One of the topics in the paper is, what we call, ‘Architectural Inspections’. Without
      going into too much details just yet we can think of an Architectural Inspection as
      a ‘check’ to help us verify the correctness of (parts of) an application architecture.
      The concept isn’t totally new, in fact the Application Architecture Guide 2.0 comes
      with an organized <a href="http://apparch.codeplex.com/Wiki/View.aspx?title=Checklists">checklist</a> that
      sums up important inspections that an architect can use during the design and/or validation
      phase of an architecture. Although a checklist is a great start, we think that a standalone
      checklist doesn’t get the most out of these so called Architectural Inspections. In
      our opinion it will be much more powerful if we can include these inspections in our
      Application Lifecycle Management practice, integrate them in the Visual Studio IDE
      and provide the right guidance at the right moment!
   </p>
        <p>
      To validate our thinking, we collected all the inspections in the <a href="http://www.codeplex.com/AppArch">Applications
      Architecture Guide 2.0</a> checklists and stored them in an XML format. In fact, we
      used the Team Foundation Server 2010 (TFS) Work Item Type XML format which enables
      us to easily upload our Architectural Inspections into TFS as work items. In addition
      to the ‘core’ Architectural Inspection data, like title,  status, description
      (where we explain what we need to validate and can add additional guidance) we added
      some meta data to categorize our Architectural Inspections and make it possible to
      do some grouping. For example, we can categorize our Architectural Inspections per
      ‘Cross Cutting Concern’ (Logging, Validation) or ‘Layer’ (Service Contract, Business
      Logic, etc.) or ArchType (Mobile, Rich Client, Service, etc.), or whatever we think
      makes sense. In addition we have build a little tool that lets us upload these Architectural
      Inspections into TFS as work items. Currently we store our Architectural Inspections
      as normal ‘Task’ work items and abuse some ‘hidden’ fields to store the meta data
      that we need. However, we already realized that we are better of defining our own
      work item type for our Architectural Inspections. So, this is probably the next thing
      on my ToDo list… 
   </p>
        <p>
      Below you can see a screenshot of (a very basic prototype of) the tool that we are
      using to upload our Architectural Inspections into TFS. As you can see we haven’t
      spend too much time on the User Interface yet and the data in the screenshot is just
      dummy data that doesn’t make too much sense.
   </p>
        <p>
       <a href="http://www.edwardbakker.nl/content/binary/ArchitecturalInspections_CC4A/Injector.jpg"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Injector" border="0" alt="Injector" src="http://www.edwardbakker.nl/content/binary/ArchitecturalInspections_CC4A/Injector_thumb.jpg" width="639" height="561" /></a></p>
        <p>
      However, the most important thing right now is that by using a tool like this we (as
      an architect designing an architecture) can easily decide which Architectural Inspections
      make sense for the architecture we are designing and add only those inspections into
      our Application Lifecyle. This means we can, for example, add only those inspections
      that apply to the layers or cross cutting concerns that our architecture requires.
      (In a future post we will demonstrate how we can even relate the inspections to layers
      in our Layering Diagram.)
   </p>
        <p>
      Another thing that we think is important is to have a clear overview of all the inspections
      that are considered and/or executed during the design and/or implementation of the
      architecture of the application. Knowing that the guidance and best practices of a
      particular inspection wasn’t properly implemented or worse totally neglected is important
      information and (potentially) tells us something about the quality of the application.
      Of course sometimes it makes perfectly sense not to spend time on cross cutting concern
      X. However, at a later time we can’t recall the reasons for not spending effort on
      them.  The fact that we now have our Architectural Inspections stored in TFS
      (as work items) makes it possible to track the current status (by using the status
      field (Active, Closed, Rejected?) )and provide us with valuable information about
      the design decisions (captured in the description field?)  that are made during
      the lifecycle of our application. 
   </p>
        <p>
      Last but not least we think that, to get Architectural Inspections fully integrated
      in the Application Lifecycle, we need a proper way of visualizing them. In fact, an
      overview of these inspections and their status might be good starting point for a
      quality check or valuable input for our testers. The most common way for visualizing
      the status of work items would obviously be to create a report in TFS. However, we
      thought we better get some experience with another cool new feature of VSTA 2010 so
      we decided to visualize our inspections in DGML. So, what we did is, we create a little
      utility that extracts the Architectural Inspection information out of TFS and generates
      a nice <a href="http://blogs.msdn.com/camerons/archive/2008/12/16/introduction-to-directed-graph-markup-language-dgml.aspx">DGML</a> diagram
      for that. Below you can see a screenshot of how our first implementation of this looks
      like. (again, we might need some UI improvements and some real data)  
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/ArchitecturalInspections_CC4A/dgml3.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="dgml3" border="0" alt="dgml3" src="http://www.edwardbakker.nl/content/binary/ArchitecturalInspections_CC4A/dgml3_thumb.png" width="1276" height="163" />
          </a>
        </p>
        <p>
      The little icons in the nodes (representing an inspection) display the status of the
      inspection. At this moment the green check means the inspection has the ‘Closed’ status
      in TFS and the warning sign means it has the ‘Active’ status (so nothing has been
      done with it yet). 
   </p>
        <p>
      There is a lot more to tell about the things we have been working on and the thoughts
      we are still having about Architectural Inspections, <a href="http://www.codeplex.com/AppArch">Application
      Architecture Guide</a>  and VSTA 2010 extensibility. We are currently busy improving
      and refactoring all of the above. In the coming period we will share some other VSTA
      extensions that we are working on and if things goes as planned everything will end
      up in the whitepaper and/or downloadable assets. So, stay tuned and of course we are
      very interested in your opinion, concerns, etc. so leave us a message!
   </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=19de7161-769f-4b70-81b6-b435c0557093" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Making money with Application Lifecycle Management</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,7f9d68ae-76fd-4b71-a688-482b2e8cc883.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,7f9d68ae-76fd-4b71-a688-482b2e8cc883.aspx</id>
    <published>2009-02-20T22:26:33.7650000+01:00</published>
    <updated>2009-02-20T22:49:11.3120542+01:00</updated>
    <category term="ALM" label="ALM" scheme="dasBlog" />
    <category term="Application Lifecycle Managment" label="Application Lifecycle Managment" scheme="dasBlog" />
    <category term="VSTS 2010" label="VSTS 2010" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      A few days ago I was asked by one of my colleagues why I am spending a lot of my time
      experimenting with Visual Studio Team System 2010 (Team Architect), <a href="http://www.codeplex.com/blueprints">Blueprints</a>, <a href="http://www.codeplex.com/AppArchGuide">App
      Arch Guide</a> and Application Lifecycle Management (ALM) in general. He noticed me
      ‘living’ in VSTS 2010 CTP for some time now and he was wondering if it isn’t a bit
      too early for this and what I did to convice to management to let me do this. My immediate
      answer to this question was ‘No, it is not to early!’ and I explained that we (<a href="http://www.interaccess.nl/nl/Pages/default.aspx">Inter
      Access</a>) expect VS 2010 to help us optimizing our Application Lifecycle Management
      practice. This answer was a bit too vague for my colleague and of course the next
      question was how will we benefit *exactly* from investing in VSTS 2010 and ALM. Will
      it make our life easier?, will it makes us better people?, will it improve quality?,
      will it save us time?, will it save us money? 
   </p>
        <p>
      Exactly these same questions popup when discussing ALM with customers. Apparently
      making the business case for ALM (and/or VSTS licenses) isn’t always easy. How come? 
   </p>
        <p>
      From our experiences we learned that currently most people and organizations are relating
      ALM to their development activities (Software Development Lifecycle). Therefore it
      is only logical that this is the area where people are trying to identify their benefits
      (costs savings) from ALM. But is this correct? Is this focus too limited?  Shouldn’t
      we focus on more than only development when it comes to cost savings? Especially if
      we keep in mind that, on average, only 30% of the IT budget is spend on new application
      development (the remainder is spend on maintenance/operations)! 
   </p>
        <p>
      How come most of us still only focus on development? Is it because we still focus
      too much on the tools instead of facilitating collaboration between ‘Business’ ‘Development’
      and ‘Operations’? 
   </p>
        <p>
      Everybody experienced in VSTS 2005 and/or VSTS 2008 will come to the conclusion that
      these tools mainly focus on the different roles within the development team (developer,
      architect, project management). Source control, unit testing and quality assurance
      features of these products provide us with a professional development environment
      and help us improving the overall quality of the products that we deliver. Work item
      management, a centralized store, reports, portals, etc. improve the collaboration
      within the development team and support project management in tracking progress, staying
      in control and managing risks adequately. All of this is great and potentially boost
      the performance of the development teams but experience learns that these benefits
      don’t come ‘out of the box’! Installing the tools doesn’t make the development team
      collaborate by default and most certainly doesn’t stimulate collaboration with the
      Business and Operations! 
   </p>
        <p>
      Now we know where most of us focus on for their ALM related activities, let see how
      this relates to the complete application lifecycle. For this we will use an the graph
      below were the x-axis represents time and the y-axix represents value and negative
      value displayed as costs. 
   </p>
        <p>
        </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/483b8e211fb0_F0F4/clip_image002.gif">
            <img title="clip_image002" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="312" alt="clip_image002" src="http://www.edwardbakker.nl/content/binary/483b8e211fb0_F0F4/clip_image002_thumb.gif" width="452" border="0" />
          </a>
        </p>
        <p>
      Obviously the lifecycle of the application starts with its development. During this
      phase we have to make costs to design, develop and test the application. At that time
      the application doesn’t bring us (actually the business) any value and the complete
      development phase of the project only costs money. From the moment the application
      (parts of it?) are installed into production the appliaction starts to generate value
      till the moment it needs to phase out where it starts to cost money again. 
   </p>
        <p>
      What we see is, that most organizations are focusing on reducing the developments
      costs and (sometimes) try to shorten the time to market. Btw. it doesn’t come as a
      surprise that these are exactly the areas where the current releases of Visual Studio
      Team System focus on. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/483b8e211fb0_F0F4/3.png">
            <img title="clip_image004" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="312" alt="clip_image004" src="http://www.edwardbakker.nl/content/binary/483b8e211fb0_F0F4/clip_image004.gif" width="452" border="0" />
          </a>
        </p>
        <p>
      Reducing costs and make the application add value earlier is good but if we have a
      look at the image above we can see that the application lifecycle doesn’t end at the
      moment the application goes into production (where lifecycle line crosses x axis).
      So, wouldn’t it be great if our ALM practices help us optimize (reduce costs and/or
      increase value) during the remainder of the application lifecycle also? 
   </p>
        <p>
      For example, one of the things we can do to increase the business value is to practice
      a proper User Experience design (see <a href="http://bloggingabout.net/blogs/andries/archive/2009/02/10/why-is-user-experience-design-important.aspx">this
      post</a> of my colleague <a href="http://bloggingabout.net/blogs/andries/default.aspx">Andries</a> for
      more info on this). By taking ‘Operations’ into account during the design and development
      phase of the application we can reduce operations costs during the remainder of the
      lifecycle. These things combined will result in an application that is more successful
      for a longer period of time (because it adds more value and costs less to maintain).
      Also, because we have done a good job developing the application, we know exactly
      what it does, where it is interfacing with (something VSTA 2010 will help with) and
      most importantly when it stops adding value which will help reducing the ‘phase out
      costs’ of the application. 
   </p>
        <p>
      Adding this to the graphical representation of our application lifecycle results in
      a graph that looks like this. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/483b8e211fb0_F0F4/7.png">
            <img title="clip_image006" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="314" alt="clip_image006" src="http://www.edwardbakker.nl/content/binary/483b8e211fb0_F0F4/clip_image006.gif" width="452" border="0" />
          </a>
        </p>
        <p>
      Based on this, we can now draw our new  application lifecycle which might looks
      something like this (dotted line is new lifecycle). 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/483b8e211fb0_F0F4/8.png">
            <img title="clip_image008" style="BORDER-TOP-WIDTH: 0px; DISPLAY: inline; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height="312" alt="clip_image008" src="http://www.edwardbakker.nl/content/binary/483b8e211fb0_F0F4/clip_image008.gif" width="452" border="0" />
          </a>
        </p>
        <p>
      The good news is that the green area between the ‘old’ and ‘new’ lifecycle is the
      area were we can make money by adding extra value. The red colored areas is the place
      where we can make money by reducing costs. Doesn’t that look great??? 
   </p>
        <p>
          <em>Please note that ‘Reduce operations costs’ might be misunderstood from this graph.
      We don’t mean less value but less costs. I didn’t know how to display this correctly
      :-) </em>
        </p>
        <p>
      Of course, all of these things don’t come by itself. We have to actually work for
      that to make that happen and we can’t do everything at once. In this post I am not
      going to detail all the steps that we can do to make that happen and where we can
      use the current or future tooling for. However, hopefully this last image makes it
      very clear that there are others areas, besides development, within the application
      lifecycle where we can either reduce costs or increase value. So, if anybody aks you
      why they should invest in ALM this image should give you a starting point for your
      discussion… 
   </p>
        <p>
      At least, it *did* help me explain why I should spend my time on ALM and experimenting
      with VSTS 2010, <a href="http://www.codeplex.com/blueprints">Blueprints</a> and <a href="http://www.codeplex.com/AppArchGuide">App
      Arch Guide</a> :-) 
   </p>
        <p>
        
   </p>
        <p>
       
   </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=7f9d68ae-76fd-4b71-a688-482b2e8cc883" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Blueprints: Visual Studio 2010 (2)</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,d8b88244-a09a-4f4f-a3fc-83fa08187c8d.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,d8b88244-a09a-4f4f-a3fc-83fa08187c8d.aspx</id>
    <published>2009-01-12T15:07:57.9825849+01:00</published>
    <updated>2009-01-12T15:07:57.9825849+01:00</updated>
    <category term="Blueprints" label="Blueprints" scheme="dasBlog" />
    <category term="VSTS 2010" label="VSTS 2010" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      In an <a href="http://www.edwardbakker.nl/PermaLink,guid,f9693cff-97a4-4e40-8eea-b944c3b62eef.aspx">earlier
      post</a> we mentioned that it is relatively easy to get the <a href="http://www.codeplex.com/blueprints/Release/ProjectReleases.aspx?ReleaseId=20784">current
      Blueprints bits</a> running on the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&amp;displaylang=en">Visual
      Studio 2010 CTP</a> by modifying the .MSI in Orcas. At that time we forgot to mention
      that we need a few extra steps to really get things going with Blueprints in Visual
      Studio 2010. 
   </p>
        <p>
      When trying to build a Blueprint solution in Visual Studio 2010 we will notice the
      following error in the error window. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsVisualStudio20102_C3B3/Error.png">
            <img title="Error" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="163" alt="Error" src="http://www.edwardbakker.nl/content/binary/BlueprintsVisualStudio20102_C3B3/Error_thumb.png" width="870" border="0" />
          </a>
        </p>
        <p>
      As we can see, the build task ‘BASM’ is failing to retrieve the correct path. This
      task is implemented in the ‘<strong>Microsoft.SoftwareFactories.Blueprints.Builds.Tasks.dll</strong>’
      that can be found in ‘<strong>..\Program Files\MSBuild\Microsoft\Blueprints\2.0</strong>’.
      It turns out that the execute method of this tasks looks for a (hardcoded) ‘String
      Value’ called ‘Blueprints’ under the ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\<strong>9.0</strong>\MSBuild\SafeImports’
      tree. Because we replaced all ‘9.0’ in ‘10.0’ in the Blueprints .MSI to get it to
      install on Visual Studio 2010 this value doesn’t exist under ‘<strong>9.0</strong>’
      anymore (but does under ‘<strong>10.0</strong>’).
   </p>
        <p>
      To fix this we can either make sure to skip this particular replacement when modifying
      the .MSI in Orcas or manually add the Blueprints ‘String Value’ under the ‘<strong>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\MSBuild\SafeImports</strong>’
      and give it the value ‘<strong>C:\Program Files\MSBuild\Microsoft\Blueprints\2.0\Microsoft.SoftwareFactories.Blueprints.targets</strong>’. 
   </p>
        <p>
      Another issue occurs when debugging our Blueprint in Visual Studio 2010. Currently,
      there is no property page implemented for the Blueprint project type (.bpproj) and
      therefore starting up Visual Studio <strong>2008</strong> is hardcoded in the Blueprints
      core. To get around this we can add an empty C# ‘Class Library’ project to our solution,
      set this project as the ‘StartUp’ project and make this project startup Visual Studio
      2010 (property page) when debugging. Although this solution does work it makes the
      Visual Studio instances in my Virtual PC image VERY slow (don’t know why). Another
      option, that does work for me, is to leave the Blueprint project as the ‘StartUp’
      project, let it start up a Visual Studio 2008 instance, (and simple ignore it) manually
      start another Visual Studio 2010 instance and attach this instance to the debugging
      process of the Visual Studio instance we started the debug session in. 
   </p>
        <p>
      Now everything is in place to *really* start developing Blueprints for Visual Studio
      2010 CTP!
   </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=d8b88244-a09a-4f4f-a3fc-83fa08187c8d" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Integrating Blueprints, Layering Diagrams and Architecture Guide</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,e8551df6-102b-4477-bb38-69fddbef32a8.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,e8551df6-102b-4477-bb38-69fddbef32a8.aspx</id>
    <published>2009-01-07T14:20:17.3719853+01:00</published>
    <updated>2009-01-07T14:20:17.3719853+01:00</updated>
    <category term="Blueprints" label="Blueprints" scheme="dasBlog" />
    <category term="ALM" label="ALM" scheme="dasBlog" />
    <category term="Architectural Guidance" label="Architectural Guidance" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      In a <a href="http://clemensreijnen.nl/post/The-VSTA-Layer-Diagram-and-the-P5eP-App-Arch-Guide-20.aspx">previous
      post</a> we already mentioned <a href="http://www.codeplex.com/blueprints">Blueprints</a> as
      a means for integrating architectural guidance from the <a href="http://www.codeplex.com/AppArchGuide">p&amp;p
      App Arch Guide</a> in the VS2010 IDE. Clemens already <a href="http://clemensreijnen.nl/post/Getting-App-Arch-Guid-Knowledge-in-VSTS2010-e28093-Part3-Create-Diagrams-from-Code.aspx">mentioned</a> how
      we can capture some of this knowledge in an item template and use the <a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.templatewizard.iwizard(VS.80).aspx">IWizard</a> interface
      to populate the diagram. Now, let’s see how we can use Item Templates in a slightly
      different way and use them in a Blueprint to unfold a predefined architecture (Layering
      Diagram) in VS2010. 
   </p>
        <p>
      The first step is to capture the architectural guidance in a Layering Diagram that
      we can reuse. To do this we can we create a new Modeling project and add a Layering
      Diagram to this project. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/AddTemplate.png">
            <img title="AddTemplate" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="340" alt="AddTemplate" src="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/AddTemplate_thumb.png" width="558" border="0" />
          </a>
        </p>
        <p>
      In this diagram we can model all layers, dependencies, etc. to make it reflect our
      architectural guidance. Once we are done it might look something like this. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/Predefined.png">
            <img title="Predefined" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="386" alt="Predefined" src="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/Predefined_thumb.png" width="631" border="0" />
          </a>
        </p>
        <p>
      To make this diagram reusable we have to create an Item Template for it. Unfortunately
      VS2010 doesn’t let us select the layering diagram in the Export Template Wizard so
      we have to manually create an item template for our layering diagram. The easiest
      way to do this is to create an Item Template for another file type (i.e. C# class)
      and modify the ‘MyTemplate.vstempate’ file in the .zip file that VS2010 generates
      and add the two diagram files (.layer and .layer.diagram) to the .zip file. The modified
      MyTemplate.vstemplate file should look something like this. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/VSTemplate.png">
            <img title="VSTemplate" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="201" alt="VSTemplate" src="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/VSTemplate_thumb.png" width="989" border="0" />
          </a>
        </p>
        <p>
      Now we are done creating a reusable layering diagram we can integrate this with a
      Blueprint. (of course we can create more item templates for other architectures defined
      in the p&amp;p App Arch Guide) 
   </p>
        <p>
      In this post we will not explain how to create a Blueprint from scratch but this is
      pretty easy. Especially after watching the <a href="http://channel9.msdn.com/Niners/Michael%20Lehman/">How
      To videos</a>. Once we have created our Blueprint we can use a Workflow Foundation
      based workflow to actually add our predefined layering diagram to our solution. 
   </p>
        <p>
      To do this, we first have to add a Workflow Command to our Blueprint (<a href="http://channel9.msdn.com/posts/MichaelLehman/Authoring-Blueprints-Custom-Command-Extensions-using-Window-Workflow-WF/">screen
      cast</a> for more details) that will enable our Blueprint users add a layering diagram
      to their solution. The documentation that comes with the Blueprint Workflow Command
      provide us with the code we need to execute a workflow. However, this code assumes
      we are executing a ‘XOML only’ workflow. In our case we choose to use a codebehind
      for our workflow so therefor we use the ‘ExecuteWorkFlow’ method instead of the ‘ExecuteXomlWorkflow’
      method. The code in your command might look like this (added some hardcoded paths
      instead of calls to helper class to get the correct paths). 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/Code.png">
            <img title="Code" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="197" alt="Code" src="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/Code_thumb.png" width="1008" border="0" />
          </a>
        </p>
        <p>
      Now that we have the command in place we have to create the actual workflow that we
      execute from the command. After installing Blueprints we get a few extra activities
      that we can use in the workflows in our Blueprint. Below we can see how this workflow
      might look like. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/Workflow.png">
            <img title="Workflow" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="667" alt="Workflow" src="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/Workflow_thumb.png" width="418" border="0" />
          </a>
        </p>
        <p>
      The ‘ShowDialog’ activity in this workflow is a normal ‘Code’ activity that in this
      case shows the (very simple) dialog that is displayed below. This dialog lets the
      user select the architecture that will be used in his solution. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/Dialog.png">
            <img title="Dialog" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="231" alt="Dialog" src="http://www.edwardbakker.nl/content/binary/IntegratingBlueprintsLayeringDiagramsand_8F8A/Dialog_thumb.png" width="417" border="0" />
          </a>
        </p>
        <p>
      Once the architecture is selected, the workflow continues with the ‘CheckProjectExists’
      activity. This Blueprint specific activity checks if the current solution contains
      a ‘Modeling project’ with the name ‘Architecture’ (I am sure you can come up with
      a better name ;)). If not, the project is created. After that the ‘AddLayeringTemplate’
      activity is executed to actually unfold the selected item template that will add the
      predefined layering diagram to our modeling project in our solution. 
   </p>
        <p>
      In this post we deliberately left out some implementation details that you might need
      to implement this yourself. However, hopefully it does explain the basic scenario
      of how to add some architectural guidance from <a href="http://www.codeplex.com/AppArchGuide">p&amp;p
      App Arch Guide</a> by using <a href="http://www.codeplex.com/blueprints">Blueprints</a> and
      VS2010 Layering diagrams. In future posts we will ellaborate on this scenario, share
      some more technical details and eventually might even end up with a working solution
      that we can share :-). <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=e8551df6-102b-4477-bb38-69fddbef32a8" /></p>
      </div>
    </content>
  </entry>
  <entry>
    <title>Blueprints: EnableDeveloperFeatures</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,cccad39d-80dc-4d91-905d-b5753b44e291.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,cccad39d-80dc-4d91-905d-b5753b44e291.aspx</id>
    <published>2008-12-27T23:24:13.2901634+01:00</published>
    <updated>2008-12-27T23:24:13.2901634+01:00</updated>
    <category term="Blueprints" label="Blueprints" scheme="dasBlog" />
    <category term="Software Factories" label="Software Factories" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      During the development of our Blueprints we can sometimes use a little extra help
      to understand what is really going on. It turns out that if we add a Registry setting
      called ‘<strong>EnableDeveloperFeatures</strong>’ under the ‘<strong>HKey_Local_Machine\Software\Microsoft\Blueprints</strong>’
      key and set its value to ‘true’ we get a few extra features enabled in the Blueprint
      Manager that might help understand (debugging) Blueprints . In the screenshot below
      we can see the checkboxes that become visible after we have added the ‘<strong>EnableDeveloperFeatures</strong>’
      setting to the Registry. The checkboxes are read only in the Blueprint Manager dialog
      but can be set through the Registry. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsEnableDeveloperFeatures_131E1/Settings.png">
            <img title="Settings" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="330" alt="Settings" src="http://www.edwardbakker.nl/content/binary/BlueprintsEnableDeveloperFeatures_131E1/Settings_thumb.png" width="606" border="0" />
          </a>
        </p>
        <p>
      As we can see, the ‘Custom Menu Filter’ checkbox is checked which means custom menu
      filters are enabled by default for our Blueprints. We can disable this feature by
      adding a ‘<strong>DisableCustomMenuFilters</strong>’ setting under the ‘<strong>HKey_Local_Machine\Software\Microsoft\Blueprints</strong>’
      key and set its value to ‘false’. 
   </p>
        <p>
      To enable logging in the Blueprint Manager we can add the ‘<strong>BPMLogging</strong>’
      setting to the Registry and set its value to ‘true’. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/PermaLink,guid,9077ee23-2f38-4521-aa01-2b5baa45cc0c.aspx">In
      an earlier post</a> I demonstrated how to create a custom menu filter. After adding
      a ‘<strong>MenuDebugging</strong>’ setting to the Registry and set its value to ‘true’
      we can see that Blueprint Manager now logs (output window) that it actually detects
      the custom menu filter that we created and also determines if it should be visible
      or not.
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsEnableDeveloperFeatures_131E1/Log.png">
            <img title="Log" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="255" alt="Log" src="http://www.edwardbakker.nl/content/binary/BlueprintsEnableDeveloperFeatures_131E1/Log_thumb.png" width="688" border="0" />
          </a>
        </p>
        <p>
      Hopefully, enabling these features help a little during the development of your Blueprints…
   </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=cccad39d-80dc-4d91-905d-b5753b44e291" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Blueprints: Visual Studio 2010 CTP</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,f9693cff-97a4-4e40-8eea-b944c3b62eef.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,f9693cff-97a4-4e40-8eea-b944c3b62eef.aspx</id>
    <published>2008-12-23T21:58:40.4730000+01:00</published>
    <updated>2008-12-23T21:59:41.1299534+01:00</updated>
    <category term="Blueprints" label="Blueprints" scheme="dasBlog" />
    <category term="VSTA" label="VSTA" scheme="dasBlog" />
    <category term="ALM" label="ALM" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      For some (experimental) work that I am currently doing with <a href="http://clemensreijnen.nl/">Clemens</a> we
      needed a version of <a href="http://www.codeplex.com/blueprints">Blueprints</a> that
      installs on the current <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&amp;displaylang=en">VS
      2010 CTP</a>. I am sure every developer already knows how to modify an .MSI package
      by using ‘Orca’ (part of Windows SDK) so I am not going to explain in detail how to
      do that. However, the good news is, that if we open the <a href="http://www.codeplex.com/blueprints/Release/ProjectReleases.aspx?ReleaseId=20784">Blueprints
      2.1.2 CTP</a> in Orca, replace every occurrence of ‘Visual Studio 9.0’ by ‘Visual
      Studio 10.0’ and save it again we are good to go. No other changes needed. The modified
      installer runs without issues on <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814&amp;displaylang=en">VS
      2010 CTP</a> and so far we haven’t found any problems with Blueprints on VS 2010. 
   </p>
        <p>
      If you are interested in the work we are doing, I suggest to go read an <a href="http://www.clemensreijnen.nl/post/The-VSTA-Layer-Diagram-and-the-P5eP-App-Arch-Guide-20.aspx">introductional
      post</a> that <a href="http://www.clemensreijnen.nl/">Clemens</a> just posted which
      describes some early ideas. Expect some more details in the next coming days, weeks,
      months on both <a href="http://www.clemensreijnen.nl/">Clemens</a> blog and/or this
      one. 
   </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=f9693cff-97a4-4e40-8eea-b944c3b62eef" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Sticky Notes!</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,bf6a2bd7-4ac1-4de5-8b65-dc78fa79f733.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,bf6a2bd7-4ac1-4de5-8b65-dc78fa79f733.aspx</id>
    <published>2008-12-23T09:20:50.2030000+01:00</published>
    <updated>2008-12-23T09:21:55.8132184+01:00</updated>
    <category term="general" label="general" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      My friend <a href="http://www.clariusconsulting.net/blogs/pga/">Pablo</a> just released <a href="http://stickynotes4code.com/">Sticky
      Notes</a>. As one of the beta testers for this cool Visual Studio extension I had
      the opportunity to play with it for some time and I found this a very handy and easy
      to use tool for ‘managing’ comments in source code. I mentioned to Pablo it might
      be cool to include TFS integration so I really hope this will be a feature for Sticky
      Notes vNext! I suggest you take a look at the <a href="http://stickynotes4code.com/Screenshots.aspx">screenshots
      and videos</a> and decide for yourself how this can help your development activities.
      Great work Pablo!
   </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=bf6a2bd7-4ac1-4de5-8b65-dc78fa79f733" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Blueprints: Custom menu filters</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,9077ee23-2f38-4521-aa01-2b5baa45cc0c.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,9077ee23-2f38-4521-aa01-2b5baa45cc0c.aspx</id>
    <published>2008-12-23T00:40:59.8640684+01:00</published>
    <updated>2008-12-23T00:40:59.8640684+01:00</updated>
    <category term="Blueprints" label="Blueprints" scheme="dasBlog" />
    <category term="Software Factories" label="Software Factories" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      For one of the Blueprints I am currently writing I had to add a menu item that enables
      the Blueprint user to execute a specific task (command). Adding menu items to a Blueprint
      is pretty easy by using the Blueprint configuration dialog. As we can see in the screenshot
      below we can also set the ‘visibility for the menu item by specifying a menu filter
      in the ‘Visibility box’ on the dialog. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/config.png">
            <img title="config" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="343" alt="config" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/config_thumb.png" width="535" border="0" />
          </a>
        </p>
        <p>
      The current Blueprints CTP comes with a few ‘built-in’ menu filters like: Project=roject
      name, FolderEndsWith=folder name, etc. (complete list can be found in de Blueprints
      documentation). Of course I needed a menu filter that wasn’t available out of the
      box. Unfortunately the documentation doesn’t say anything about adding custom menu
      filters but luckily a little experimenting (and Reflector ;)) was enough to get this
      to work.
   </p>
        <p>
      Here are the steps to implement your own custom menu filter:  
   </p>
        <p>
      The first thing to do is to simply add the name of your new custom menu filter in
      the ‘Visibility’ box of the menu item you want the custom menu filter to be applied
      on. In this example we also pass a custom argument (‘BlaBla’) to our custom menu filter.
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/con1.png">
            <img title="con1" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="350" alt="con1" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/con1_thumb.png" width="546" border="0" />
          </a>
        </p>
        <p>
      The second step is to actually implement the custom menu filter. This can be easily
      done by adding a ‘Command Extension’ project to your Blueprint solution (Blueprints
      menu –&gt; Add Command Extension). This project already implements a post build event
      to make sure the .dll that hosts your command extension is copied to the correct location
      to let Blueprint Manager find it during execution of your Blueprint. 
   </p>
        <p>
      for this example we can delete all default files in the extension project and add
      a new class to this project that implements the ‘IMenuFilter’ interface (add a reference
      to the ‘Microsoft.SoftwareFactories.BASMAPI.dll’ assembly that can be found under
      the Blueprint installation directory).
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/code1.png">
            <img title="code1" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="243" alt="code1" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/code1_thumb.png" width="649" border="0" />
          </a>
        </p>
        <p>
      In this class, the ‘FilterSupported’ method is used to decide whether a  custom
      menu filter is supported in our Blueprints. Àll we have to do in this method is return
      ‘true’ for the custom menu filters (name) that we want to support in our Blueprint.
      (note that we can handle multiple custom filters here).
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/code2.png">
            <img title="code2" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="184" alt="code2" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/code2_thumb.png" width="398" border="0" />
          </a>
        </p>
        <p>
      The ‘Visible’ method is used to decide whether the menu item that has our custom menu
      filter applied should be visible or not. The screenshot below demonstrates a, not
      very useful (and not bulletproof), implementation of a custom menu filter that only
      shows the menu item in case the Blueprint user right clicks the Solution (Solution
      Explorer) and the name of the selected Solution starts with the parameter supplied
      to the custom menu filter (‘BlaBla’ in this case).  As said, not a very useful
      filter but it hopefuly demonstrates what can can be done here. 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/code3.png">
            <img title="code3" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="521" alt="code3" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/code3_thumb.png" width="549" border="0" />
          </a>
        </p>
        <p>
      After we finished the ‘Visible’ method, we are done implementing our custom menu filter
      and all we have to do is make sure the Blueprints Manager knows about our custom menu
      filter. How?
   </p>
        <p>
      As we can see in the screenshot below, the menus that we define in our Blueprint configuration
      dialog (see above) are stored in the ‘config.xml’ file of our Blueprint (located in
      the properties folder in our Blueprint project).
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/Menu.png">
            <img title="Menu" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="50" alt="Menu" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/Menu_thumb.png" width="745" border="0" />
          </a>
        </p>
        <p>
      At some point, the Blueprint Manager parses this config file, searches for custom
      menus, detects the ‘MyCustomMenuFilter’ that we specified in our menu item and notices
      it isn’t one of the ‘built-in’ menu filters. At that time the Blueprint Manager checks
      if any additional ‘resources’ are registered for our Blueprint that might host an
      implementation of the ‘IMenuFilter’ interface. To make sure the Blueprint Manager
      can find our extension, we register our custom menu filter by adding the following
      (screenshot below) to the config file of our Blueprint.
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/Resources.png">
            <img title="Resources" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="50" alt="Resources" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustommenufilters_127A7/Resources_thumb.png" width="906" border="0" />
          </a>
        </p>
        <p>
      After that, if the Blueprints Manager detects a menu filter that is doesn’t recognize,
      it will search its additional resources and find our custom menu filter implementation.
      It will then call the ‘FilterSupported’ and ‘Visible’ methods on our ‘CustomMenuFilters’
      class to decide whether or not the custom menu item is supported and under what circumstances
      display our menu item.
   </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=9077ee23-2f38-4521-aa01-2b5baa45cc0c" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Blueprints: Customize template unfolding</title>
    <link rel="alternate" type="text/html" href="http://www.edwardbakker.nl/PermaLink,guid,19ed9391-55ca-4e49-aeef-e3c7289f199e.aspx" />
    <id>http://www.edwardbakker.nl/PermaLink,guid,19ed9391-55ca-4e49-aeef-e3c7289f199e.aspx</id>
    <published>2008-12-20T23:27:52.1506525+01:00</published>
    <updated>2008-12-20T23:27:52.1506525+01:00</updated>
    <category term="Blueprints" label="Blueprints" scheme="dasBlog" />
    <category term="Software Factories" label="Software Factories" scheme="dasBlog" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
      When working with a Blueprint to deliver a product, we very often start with unfolding
      a solution/project structure (template) that reflects some architectural guidance.
      When building a Blueprint, we have a few options for unfolding templates within our
      Blueprint (that we can set through configuration as displayed below). The option ‘None’
      obviously doesn’t unfold a template at all, ‘Auto-generated’ unfolds a predefined
      project template (C# class library) and ‘User-supplied’ provides us with the possibility
      to define our own solution/project templates. (The guidance that comes with the current
      release of Blueprints does a pretty good job describing these three options)
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustomizetemplateunfolding_13634/configuration.png">
            <img title="configuration" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="291" alt="configuration" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustomizetemplateunfolding_13634/configuration_thumb.png" width="454" border="0" />
          </a>
        </p>
        <p>
      However, sometimes we need even more control before, during or after template unfolding
      (ie create folder structures, complex dialogs, Add to source control, etc.). Luckily,
      there is another mechanism that we can use for this scenario that gives us full control!
   </p>
        <p>
      We can add a ‘Command Extension’ (right click on your Blueprint and select ‘Add Command
      Extension’ from the Blueprints menu) and write an extension that unfolds our custom
      project templates.  
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustomizetemplateunfolding_13634/AddExtension.png">
            <img title="AddExtension" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="209" alt="AddExtension" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustomizetemplateunfolding_13634/AddExtension_thumb.png" width="294" border="0" />
          </a>
        </p>
        <p>
      Adding a Command Extension to our Blueprint gives us a new project in our Blueprint
      solution. This new project already contains an example extension that we can modify
      to implement our custom unfolding logic.  Below, a simplyfied implementation
      of this modified Command Extension is given that uses the custom ‘MyTemplate.vstemplate’
      template and unfolds that to a (hard coded) location. 
   </p>
        <p>
        
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustomizetemplateunfolding_13634/Extension.png">
            <img title="Extension" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="224" alt="Extension" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustomizetemplateunfolding_13634/Extension_thumb.png" width="559" border="0" />
          </a>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
      After we fully implemented our extension, we can add this Command Extension to the
      commands collection of our Blueprint (More info on how to add commands can be found
      in the Blueprints documentation). 
   </p>
        <p>
          <a href="http://www.edwardbakker.nl/content/binary/BlueprintsCustomizetemplateunfolding_13634/Command.png">
            <img title="Command" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="243" alt="Command" src="http://www.edwardbakker.nl/content/binary/BlueprintsCustomizetemplateunfolding_13634/Command_thumb.png" width="379" border="0" />
          </a>
        </p>
        <p>
      The real ‘trick’ here is to name the command ‘<strong>INIT</strong>’ which will force
      the Blueprints Manager to execute the command automatically for us when unfolding
      our Blueprint to a (empty) Visual Studio solution. Also, don’t forget to set the ‘Template’
      option in the Blueprint configuration dialog to ‘<strong>None</strong>’! Note that
      we also added a switch statement to our implementation of the Command Extension to
      only execute the template unfolding in case the ‘INIT’ command gets executed. 
   </p>
        <p>
      With this in place we can write complex ‘vstemplates’, that include <a href="http://msdn.microsoft.com/en-us/library/ms171411.aspx">WizardExtensions</a> to
      collect user input and rely on the Blueprints Manager to execute our ‘INIT’ command
      to unfold these templates when developers add our Blueprint to their Visual Studio
      solutions. 
   </p>
        <img width="0" height="0" src="http://www.edwardbakker.nl/aggbug.ashx?id=19ed9391-55ca-4e49-aeef-e3c7289f199e" />
      </div>
    </content>
  </entry>
</feed>