<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>How Software is Built &#187; virtualization</title>
	<atom:link href="http://howsoftwareisbuilt.com/tag/virtualization/feed/" rel="self" type="application/rss+xml" />
	<link>http://howsoftwareisbuilt.com</link>
	<description></description>
	<lastBuildDate>Fri, 25 Jun 2010 19:53:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<copyright>2006-2007 </copyright>
	<managingEditor>scottswigart@technologyevangelism.com (How Software is Built)</managingEditor>
	<webMaster>scottswigart@technologyevangelism.com (How Software is Built)</webMaster>
	<ttl>1440</ttl>
	<image>
		<url>http://howsoftwareisbuilt.com/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>How Software is Built</title>
		<link>http://howsoftwareisbuilt.com</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary></itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>How Software is Built</itunes:author>
	<itunes:owner>
		<itunes:name>How Software is Built</itunes:name>
		<itunes:email>scottswigart@technologyevangelism.com</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://howsoftwareisbuilt.com/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<item>
		<title>Interview with David Campbell &#8211; Technical Fellow &#8211; Microsoft &#8211; Part II</title>
		<link>http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/</link>
		<comments>http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 18:57:11 +0000</pubDate>
		<dc:creator>scottswigart</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[David Campbell]]></category>
		<category><![CDATA[enterprise]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[windows server]]></category>

		<guid isPermaLink="false">http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/</guid>
		<description><![CDATA[Interviewers: Scott Swigart and Sean Campbell Interviewee: David Campbell In this interview with David Campbell we talked to him about: How the development methodology of SQL Server has changed. How the changes affect the ability of customers to give feedback. How virtualization makes it easier for users to test-drive SQL Server. As products and open-source [...]]]></description>
			<content:encoded><![CDATA[<p><b>Interviewers:</b> <a href="http://howsoftwareisbuilt.com/about-scott-swigart/">Scott Swigart</a> and <a href="http://howsoftwareisbuilt.com/about-sean-campbell/">Sean Campbell</a></p>
<p><b>Interviewee:</b> <a href="http://howsoftwareisbuilt.com/david-campbell-technical-fellow-microsoft/">David Campbell</a></p>
<p>In this interview with David Campbell we talked to him about:</p>
<ul>
<li><a href="http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/#sqldevmethod">How the development methodology of SQL Server has changed.</a></li>
<li><a href="http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/#custfeed">How the changes affect the ability of customers to give feedback.</a></li>
<li><a href="http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/#sqlvirt">How virtualization makes it easier for users to test-drive SQL Server.</a></li>
<li><a href="http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/#nottarget">As products and open-source projects grow, the developers have to realize that they are not the target user.</a></li>
<li><a href="http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/#mostknobs">David&#8217;s belief that the best product doesn&#8217;t necessarily have the most knobs. </a></li>
<li><a href="http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/#sqlcommunity">Building a community around a closed-source product like SQL Server.</a></l>
</ul>
<p><span id="more-130"></span></p>
<p><strong>Scott  Swigart:</strong> David, thanks for taking the time to chat with us again. One of  the things you mentioned in the first interview was the common engineering criteria.  I&rsquo;ve seen that mentioned in a number of different places, but I have never seen  it explained. And I&rsquo;m guessing that the common engineering criteria impact a  product like SQL Server. It might be good to start off just by explaining what they  are.</p>
<p><strong>David  Campbell:</strong> It started in the Windows Server system. We&rsquo;ve been telling  customers that one of the advantages of our stack is that it works better  together. It does, but we started really challenging ourselves by asking, &ldquo;OK,  what are the real things we&rsquo;re doing to actually make it be better together?&rdquo;  The way I think about it is, &ldquo;What are the things that would add value for  customers who require coordination or consistency across groups that otherwise  wouldn&rsquo;t happen organically?&rdquo;</p>
<p>We started this a number of years back, when Paul Flessner was running the  Windows Server group. We have a set of requirements, which are updated every  year, and all the enterprise products within the Server and Tools Business (STB) have to adhere to those requirements. These  are things like having a best practice analyzer, having a Management Pack for  System Center before you RTM, having consistent user education, continuous publishing, a community engagement program, that kind of stuff.</p>
<p><strong>Scott:</strong> Previously when we talked, you also mentioned that SQL Server went through a  pretty big change in its development methodology between 2005 and 2008. Talk about that a little bit.</p>
<p><strong>David: </strong><a name="sqldevmethod"></a>This is something that a small group started, and it ultimately took great  effort across the division to pull off. It will never be &ldquo;done,&rdquo; but it has  been an amazing, fascinating transformation. I&rsquo;ve learned more in the last few  years about culture and change management in a large organization than probably  anything else.</p>
<p>I&rsquo;ve been working on the product for a long time. Back in the good old days, we  had something like 20 people who knew the whole server, end to end. Back then,  as you worked on things, if you had an issue you just walked across the hall,  sketched something out on somebody&rsquo;s whiteboard, and went back and coded it up.  Because things were so intimate, you could keep things moving at a rapid pace.</p>
<p>To somebody who understands the standard Microsoft development methodology, one  of the things that&rsquo;s very important is the daily build. We continuously build  and test the product, and one major vital sign is the health of the daily  build. Back when the product was small and there were 50 to 100 people working  on it, you could do the daily build live, with everyone just checking stuff in  and keeping it together.</p>
<p>But as the team grew and the size of the code base grew by several orders of  magnitude, you just couldn&rsquo;t have as many hands in the soup at the same time  and get anything that tasted good.</p>
<p>In SQL 2005, we had sort of a standard large-team, waterfall model. If we were  doing a feature that spanned several component groups, we would have one group  get together and they&rsquo;d do everything by the book. We had a process and  everyone followed it. They&rsquo;d write the spec. They&rsquo;d develop a test plan. They&rsquo;d  review the test plan. They&rsquo;d write the code. They&rsquo;d test it. They&rsquo;d check it  in.</p>
<p>Then the next component team in the sequence, maybe it was the client data  access team, would pick it up and they&rsquo;d start working with it. And they&rsquo;d go, &ldquo;Hey,  wait a minute. This interface isn&rsquo;t quite right. There is something wrong here.&rdquo;  They&rsquo;d go back to the first team and ask them to change it. Of course, the  first team had moved on to something else, so if they had to go back and do  major surgery, it was a hassle. </p>
<p>We had one feature in particular that, to be honest, we built two or three  times during the course of SQL 2005 and we still didn&rsquo;t have it right. So I  said to the program manager at one point, &ldquo;Look, either we take it out of the  product or you get everyone, end to end, involved, get them in a room and just  sit till you work it out and get the thing going.&rdquo;</p>
<p>This involved the storage engine, the language parser, the query processor, the  client data access libraries, the management tools. They had done it serially  several times. They just never had it work correctly, end to end, when  integrated.</p>
<p>They all got in a room. Of course, you know how that works. They were able to  figure it all out and get it all done. We said, &ldquo;OK, what can we learn from  this?&rdquo; We completely threw the development process up in the air and changed it  around. How do we go &ldquo;back to the future&rdquo; and try to capture the intimacy of  what we had in the &ldquo;good ol&rsquo; days&rdquo; now that the team and product are many times  larger and more complex.</p>
<p>When  we had a small team rebuilding the database engine for SQL Server 7.0, a number  of people had the whole system in their heads. Furthermore, when we did SQL  Server 7.0, we really didn&rsquo;t need to think about the market that much. We were  building a new relational database engine and introducing an OLAP system. The  playbooks were already written for these technologies and the markets were  already established. Now, we did it in a way that was different; we tried to make  the product much easier to use so we could actually grow the market and bring  the technology to a much larger base. For SQL Server 2000 and, to a lesser  extent, SQL Server 2005, we were building out on the architectural base we had  established with SQL Server 7.0. </p>
<p>The  original model worked great for several releases, but when we got to SQL Server  2005, the product was much bigger, the team was much bigger, and the market  expectations were much higher. Things just weren&rsquo;t fitting together in terms of  consistency across the product. So the other piece that we had to add for the  SQL Server 2008 process was, instead of defining the release from the bottom up  in terms of what we were going to do, we had to create a definition process  that looked both at the market, top-down, and at what needed to happen to the  technology base of the product and what people wanted to do, bottom-up, and  bring them together.</p>
<p>The way we framed it to the team was, &ldquo;Look. We want to have the PowerPoint  presentation that we&rsquo;re going to use in the keynote for the launch before we  write the first line of code.&rdquo; So we developed a set of themes for the release.  With each theme we had this notion of scenarios that were end-to-end value  propositions for customers. Underneath those scenarios, we had a number of what  we called improvements, instead of features.</p>
<p>An improvement is what we would consider an engineering transaction. The idea  is that we bring virtual teams together to work on an improvement. An  improvement team is cross-discipline&mdash;development, testing, and program  management&mdash;and it&rsquo;s cross-component. For example, the database engine, data  access, and management tools teams can come together to work on a single  improvement. So if a particular improvement needs focus from four different  components, they&rsquo;ll all come together as a virtual team.</p>
<p>We assign an improvement team lead, who&rsquo;s got a set of requirements they need  to meet to integrate the result into the source base, but we&rsquo;re not very  prescriptive about how they run the team. If they want to use Scrum and have  stand-up meetings and do a series of sprints, that&rsquo;s fine. If they want to use  a test-driven development methodology, etc., that&rsquo;s up to them. We&rsquo;ve got tools  and a playbook that we encourage them to use, but we&rsquo;re pretty liberal in terms  of how they go about it. There&rsquo;s a very strict contract in terms of what needs  to be done before it is integrated into the main branch of the product source  code, however.</p>
<p>These improvement teams work in their own separate branches in the code  management system. Once they believe that the improvement is ready to ship to  customers, then and only then will we integrate it into the product. What&rsquo;s  interesting, if you think about it from outside SQL Server, from the customer&rsquo;s  perspective the release looks much, much different than it used to look.</p>
<p>It used to be the case that&mdash;let&rsquo;s say we were going to do 300 features.  Everyone gets started on them. We put a bunch of stuff together and put it out  for Beta 1. Everything would work about 30 to 50 percent. Then we&rsquo;d keep going  for Beta 2. We realized, &ldquo;We&rsquo;re not going to be able to finish 20 percent of  these things, let&rsquo;s cut them.&rdquo; With Beta 2, things are working about 70 to 80  percent correctly. Then you have Beta 3, a bit better. And in the end, you&rsquo;re  still trimming stuff out, cutting it, and refining it to get it ship ready for  customers. </p>
<p>We  were constantly in the mode of having stuff that kind of worked in Beta and  trying to get feedback from customers. We flipped it around with the new process. What customers see  now in a particular drop is very high quality. They used to see the 120 percent  of the ultimate features in Beta 1 in some measure. Now they only see 20 or 30 percent of the features early, but they all work. We also changed the name from Beta to Community Tech Preview, or  CTP.</p>
<p>As we go through each successive CTP, more and more of these improvements show  up. They&rsquo;re baked, end to end, and they accumulate in number. What a customer  is seeing is that the quality is actually very good the whole way through, so  it&rsquo;s an interesting change.</p>
<p><strong>Scott:</strong> It seems as if the SQL Server team went through the same process the Visual  Studio team did: Instead of putting code out there that is 30 percent  functional and people can&rsquo;t really get it to work end to end, they decided it&rsquo;s  better to wait until a given feature is 100 percent even if that means  customers see it much later. </p>
<p>  But  there has to be a trade-off, because your window for getting customer feedback  is smaller, and you have potentially invested a good deal more time in the  original code before you get any feedback. Talk about that balance.</p>
<p><strong>David:</strong> <a name="custfeed"></a>That&rsquo;s a great question. One aspect of the previous releases is that we were  frankly playing catch-up in an established market. We knew what we wanted to  build and we knew how we wanted to differentiate in the market so we really didn’t need a lot of customer feedback on the feature set for SQL 7.0 because in many ways we were rearchitecting and reimplementing the existing product. This approach worked for  SQL Server 7.0 and 2000, but one consequence is that we hadn&rsquo;t built up muscle  around how to engage customers earlier in the design process for completely new features. In some sense, we  built stuff and threw it against the wall to see if it would stick. This worked  well for awhile, but it made much less sense starting in SQL Server 2005. </p>
<p>  Basically,  you could say that the old process was quite inefficient, in the sense that we  built a bunch of stuff, actually committed code, before we even knew what would  stick in the market. Now we&rsquo;re trying to do that through more concept testing,  more up-front work, spending more time with customers to look at their real  pain points. Are you going to build a set of features that&rsquo;s going to be  compelling? That&rsquo;s one piece of the puzzle. Are you building something all up  that will be valuable to your customers to you customers end to end considering they way they really work? That’s another pieces of the puzzle.</p>
<p>But then the question becomes, have you built each feature in a way that makes  sense to the customer and is useful? So it&rsquo;s less about the value proposition  of having a particular capability and more about have you designed and built  each thing correctly, on an improvement-by-improvement basis.</p>
<p>One fallacy around the Beta process, in my opinion, is that we would throw a Beta  out there, and tens or hundreds of thousands of people would download it. A  small fraction would really play with it, a smaller fraction would actually  think about how they&rsquo;d use a new feature, and a fraction of those people would  actually give us any real feedback. It wasn&rsquo;t very structured. Our TAP program tried to target specific features and scenarios but it mostly kicked in after we had written the code.</p>
<p>I believe it&rsquo;s a bit different in the Developer division, because you&rsquo;re close  to developers. One of the challenges we have with SQL Server is that, for our  real validation, you need to get closer to a production environment. And it&rsquo;s  very difficult to get the feedback from the production team.</p>
<p><strong>Scott:</strong> Right. With SQL Server, a single dev banging away isn&rsquo;t a real test. You could  get somebody banging away at the feature, but that doesn&rsquo;t really tell you  whether it will scale, whether it will be reliable, whether it will be secure.</p>
<p><strong>David</strong><strong>:</strong> Right, exactly. So what happened with  this release was, we had some teams that said, &ldquo;Oh, crap. What are we going to  do to get feedback for this really complex improvement?&rdquo; For the database  engine there&rsquo;s an improvement called a Resource Governor. It allows you to  constrain queries that consume specific resources so you can limit a particular  connection to 10 percent of the CPU, and that kind of stuff.</p>
<p>The question is the mechanics of getting the architecture and user interface  right. We think very hard architecturally about separating mechanism and  policy. In this case, the mechanism would be things like how do we keep track  of the various resources and who do we attribute the resource usage to. The  policy would be how the user describes her intent in a way that allows the  mechanism to enforce it. In the case of the Resource Governor, there&rsquo;s a  complex interaction between the policy and the mechanism, &ndash; not the least of  which is that we needed to build new mechanisms to hold and enforce various  policies. This is a great example, because what we would have done before was  stare at the whiteboard, do a design, and throw something together. We&rsquo;d ship  it out in a Beta and hear, &ldquo;No, that&rsquo;s not what we need.&rdquo; So it turns into a  rock fetch. &ldquo;No, this thing stinks. &hellip; This thing stinks. &hellip; You&rsquo;re getting  warmer &hellip;,&rdquo; etc. It&rsquo;s a pretty inefficient process all up.</p>
<p>In the case of the Resource Governor, we got together with some of our MVPs and  key customers who had a need for the improvement and did more of an outside-in  design process starting from use cases. What&rsquo;s interesting is that this outside-in  approach is completely natural for many people building applications, but for a  development team that&rsquo;s been creating low-level system software for 10-plus  years it&rsquo;s quite different. </p>
<p>The  bottom line is that we definitely needed to figure out how to engage customers  differently with our new development process, and there are opportunities for  design councils, concept testing, early prototypes, and early builds. In fact,  things like virtual machine technology allow an improvement team to create a  build of their early thinking and test it with a small group in a focused way  without having to integrate everything else that&rsquo;s in various states of  completion, like we used to do with the standard Beta process. They just create  a VHD with their bits and have some customers try it. With this model they can  iterate faster than was possible with the old Beta process. Ultimately, I think  we&rsquo;ll get better improvement feedback by finding the right 10 to 20 customers  and working closely with them rather than putting it together in Beta and  throwing it out to 100,000 people hoping they&rsquo;ll give us valid feedback. I&rsquo;m  overstating things a little bit to make the point, but the general concept  still holds, although not everyone here agrees with me on this one.</p>
<p><strong>Sean  Campbell:</strong> I&rsquo;m curious about the point you just brought up, because Scott  and I have been knee-deep in virtualization for a long time. The point you just  made about letting people evaluate it on a VM, how has that impacted the  overall development process for the SQL Server team? Has it given you the  ability to basically give, let&rsquo;s say, broken bits out earlier and get more  people working with it earlier because they don&rsquo;t have to install it, they don&rsquo;t  have to configure it? I&rsquo;m sure in the past people would try to install it on  top of whatever else they already had. You could tell them a hundred times,  right? And they&rsquo;re going to try to install it as a multiple instance on top of  what they&rsquo;ve already got. </p>
<p><strong>David:</strong> <a name="sqlvirt"></a>It has, in exactly the ways you said. These applications are so complex, and  the state that they put on the machine is so complex, and we work so hard to  make sure uninstall really uninstalls all the stuff that it put there in the  first place.</p>
<p>The other piece is that it&rsquo;s hard for us to build and test the setup and the  installation. With VHDs, we can basically handcraft them and then clone them,  and they don&rsquo;t pollute any other state on an existing machine. So it&rsquo;s much  easier to get together. The bulk of the savings is in the setup, for us to  construct both the setup and the uninstall, to make sure we don&rsquo;t pollute the  machine state.</p>
<p>So I think from that perspective, it&rsquo;s very, very helpful. I think we saw that,  but we haven&rsquo;t really perfected it as a process yet. I think we&rsquo;ll probably go  a little bit deeper on it in the next release.</p>
<p><strong>Scott:</strong> In talking to a lot of people in the open source world, especially community-driven  open source, like the Linux kernel and the Apache Web Server, I hear there is a  pretty strong correlation between your ability to request a feature and your  ability to actually code it. You will get on a mailing list and say, &ldquo;Hey, it&rsquo;d  be great if the Web server did this.&rdquo; And the response is basically, &ldquo;Yeah,  that would be cool. When will you have the code ready?&rdquo;</p>
<p>  What  you have talked about is very different from that, in terms of interviewing  customers, interviewing influencers, and putting together a team. Talk a little  bit about how a specific feature happened from end to end, how the feature was  initially conceptualized, how you validated it, the portions of the product it  touches, etc.</p>
<p><strong>David:</strong><a name="nottarget"></a> Well, I&rsquo;ll talk about it in the meta form, and then I&rsquo;ll talk about a  particular feature. It goes back to the thing I was saying about technology  evolution. And it&rsquo;s actually one of the challenges.</p>
<p>  One  of the challenges the open source community faces, and this will be a sweeping  statement that I get flamed for, is that they don&rsquo;t yet generally appreciate  the difference between the consumer and the producer. By that I mean, as a  technology matures, the gap between who&rsquo;s using and who&rsquo;s producing it becomes  greater. It&rsquo;s a challenge we face at Microsoft; we are no longer simply  building products for people like us, the engineers. In one of the talks I give  to the product development community at Microsoft, I stress, &ldquo;Look. We&rsquo;re no  longer just building products by engineers, for engineers. The PC is moving  toward a consumer electronics device for many users and we must build a product  that interacts with them on their terms, not ours.&rdquo; I then show screen shots of  Task Tray bubbles talking about &ldquo;Virtual Memory&rdquo; and &ldquo;Pagefiles,&rdquo; etc. My  friends and family shouldn&rsquo;t have to know what virtual memory is.</p>
<p>  We&rsquo;ve  seen the same thing in the database space. Twenty years ago, every DBA had to  be a wizard and needed to know how to fiddle with hundreds of knobs, figure out  how to manage raw disks, and learn all sorts of low-level details just to  create and maintain a database. When we were building SQL Server 7.0, I used to  troll the database newsgroups an awful lot. You&rsquo;d see people asking perfectly  reasonable questions and you&rsquo;d see responses like &ldquo;RTFM&rdquo; or &ldquo;You don&rsquo;t belong  here if you don&rsquo;t know that.&rdquo; So we started this campaign to fix what I called  the &ldquo;you dummy&rdquo; questions. Basically, if an expert responded to a question with  a &ldquo;you dummy&rdquo; tone, we saw it as an opportunity to address the issue by  engineering&mdash;teach the product to do it rather than teaching hundreds of  thousands of DBAs. We turned the &ldquo;you dummy&rdquo; on ourselves and did something  about it. </p>
<p>  I  don&rsquo;t have to be an expert on my automobile to keep the thing running, and that&rsquo;s  fine. If Toyota wanted to come to me, I wouldn&rsquo;t have to talk to them about  ignition advance, dwell time, and those things anymore. I&rsquo;d talk more about my  experience and what I wanted the car to do for me. I think that&rsquo;s just an  evolution, and you can certainly see it in the database space.</p>
<p>To get back to the specific feature, I think the Resource Governor is a good  one, where there was a complex set of mechanisms inside our system that we  needed to go off and engineer, but how we constructed those and how we  presented them to users was the challenge, right? What is the policy? How does  someone describe a policy around constraining resources in a particular query  or session? And then how does someone bind different policies to different  classes of users or applications or queries or times? What degrees or what  dimensions do they need?</p>
<p>Another way to think about this, from the perspective of design, is that the  software development community has not made the leap yet from expressing the  product control surface as knobs on the underlying mechanism to capturing the  user&rsquo;s intent or objective and then acting to achieve that. A simple example is:  Rather than having an administrator configure how many dirty database pages  will trigger a database checkpoint, we can capture the user&rsquo;s intent in terms of  the trade-off between fast recovery in the event of a failure, which can be  achieved by increased checkpoint frequency, or better run time throughput,  which can be achieved by fewer checkpoints. Having a control that captures how  long the administrator is willing to wait for recovery to complete in the event  of a restart looks directly at the business intent rather than fiddling at the  level of the mechanism. I mean, how many dirty log blocks can I have on a  particular database and still have it recover in 60 seconds, anyway? Instead of  publishing some equation in the documentation, capture the user&rsquo;s intent and  treat that as a constraint during run time.</p>
<p>  So  to go back to the Resource Governor&mdash;we go to the customer and ask, &ldquo;OK. What  sorts of things do you want to constrain? What dimensions are most important?  Are they applications? Are they time of day? Are they this or that?&rdquo; And then  gather all that, design something that&rsquo;s consistent from the user intent  perspective, and then figure out how we build a mechanism underneath to marry  up with it.</p>
<p>Certainly, there&rsquo;s a lot of success in the open source community, using open  source technology in consumer electronics. But I don&rsquo;t think that they&rsquo;ve gone  end to end in terms of doing a great job of user-centered design.</p>
<p><strong>Sean:</strong> Well, that&rsquo;s one of the things I&rsquo;ve talked to people about, too, and that I  personally feel pretty passionate about, innovation in the usability area.</p>
<p>I am curious, from a closed source company perspective, about what processes  you feel should be put in place in order for a development team to excel in  terms of usability. You go out and talk to people about potential features to  help make sure that a feature doesn&rsquo;t turn into engineers building it just for  engineers, and that you actually end up with something&mdash;like the Ribbon in  Office&mdash;that honestly has been a success, if only because, after release, nobody  complained about it.</p>
<p>  It&rsquo;s  the proverbial tree that fell in the forest and nobody heard it, but everybody  was freaked out about it. And I keep telling people, &ldquo;Well, think about this.  Microsoft changed the UI on the one application people use the most, on a daily  basis, and yet nobody really complained once Office launched.&rdquo; There must have  been something that really went into the thinking, in terms of usability.</p>
<p>For you guys, especially with a product like SQL Server, where I&rsquo;m sure you can  lose yourself in B-tree discussions until the end of time, how do you ensure  usability in the product?</p>
<p><strong>David:</strong> It&rsquo;s a great question and a great challenge. It&rsquo;s funny, but one of the things  I&rsquo;ve been doing for awhile that&rsquo;s had a good effect is to hold the mirror up to  the product development community at Microsoft, to get them to see that we&rsquo;re  no longer building products for people like us. </p>
<p>  I  have a set of slides that I&rsquo;ve been using for six years or so, where I have  collected some crazy error messages and I have real-life scenarios. I&rsquo;ve got a  screen shot where, in Windows XP, if it extends to your page file, you get this  balloon coming out of the system tray that says, &ldquo;Your virtual memory is low.  We&rsquo;re extending the page file. Blah blah blah.&rdquo; I came home one night and my  wife hit this and she said, &ldquo;Hey, I think my computer&rsquo;s broken. It says  something here.&rdquo; So I started describing to her virtual memory and page files,  and she said, &ldquo;Shut up! Just fix it.&rdquo;</p>
<p>  It  dawned on me that perhaps 99 percent of the people using PCs these days are not  engineers, yet we&rsquo;re still throwing these exceptions and doing these sorts of  things as if they were. And we ridicule the users instead of ourselves. I go  help my neighbors fix their machines, and they all start with, &ldquo;Oh, I feel like  such an idiot around computers.&rdquo; And I just want to say, &ldquo;No, you&rsquo;re not the  idiot. We are, because we&rsquo;re not building computers for you yet.&rdquo;</p>
<p>And so I have a set of rules, or things that I&rsquo;ve captured, that I talk about,  such as the &ldquo;principle of least astonishment,&rdquo; where a reasonable user action  should do something reasonable with least astonishment. The example I use is  another story from my wife. I don&rsquo;t know how many years ago, when I first got  her a PC, someone emailed her some pictures. She said, &ldquo;How do I look at these  pictures?&rdquo; I said, &ldquo;Just double-click on the filename right here.&rdquo;</p>
<p>So, of course, up comes the picture in the picture viewer. And there are little  buttons down on the bottom of the viewer: &ldquo;Next picture,&rdquo; &ldquo;Previous picture.&rdquo;  What do you think happens if you click on &ldquo;Next picture&rdquo;? You don&rsquo;t get the  next picture in the set of attachments. You get the next picture of whatever  the next file was in your IE cache or whatever it happens to open.</p>
<p>  And  she&rsquo;s going, &ldquo;What the hell is this?&rdquo; She gets some random icon from the temp  directory or something like that. So I started talking to her about temporary  directories, the IE cache, and blah blah blah, and again she&rsquo;s like, &ldquo;Shut up!  Just tell me why it&rsquo;s broken.&rdquo;</p>
<p><strong>Sean:</strong> She&rsquo;s saying, &ldquo;I&rsquo;m looking at photos. I want the next photo.&rdquo;</p>
<p><strong>David: </strong>Exactly. And you see that even in the database space. We&rsquo;ve taken the  market from tens of thousands of servers out to millions or tens of millions of  servers. You can&rsquo;t have every one of them require a highly skilled DBA. We just  couldn&rsquo;t do it economically. And so you have to get out of the mind-frame of an  engineer and go adopt a perspective of what the customer needs and how the  customer wants to express their intent.</p>
<p>That&rsquo;s the other sort of piece I talk about: In terms of the degrees of control  and the dimensions of control, get rid of all of those dimensions of control  that don&rsquo;t capture any user intent and figure out which dimensions of control  are orthogonal with respect to the customer&rsquo;s intent, and then figure out how  you build your system, and express things that way. That&rsquo;s been the most  effective thing I&rsquo;ve found to motivate the change.</p>
<p>The bottom line is that the software development community doesn&rsquo;t teach &ldquo;design,&rdquo;  certainly not with a capital D. Most developers believe that if they think for  10 minutes before coding up some function, then that&rsquo;s design. It&rsquo;s not. This  isn&rsquo;t a development methodology thing, but rather a cultural change that we  need to go through across the entire industry.</p>
<p><strong>Sean:</strong> That&rsquo;s great. The chief creator of a project called Quicksilver for the Mac was  giving a talk at Google, and I just saw the video of it the other day. His  theme for the project is &ldquo;act without doing,&rdquo; which has an interesting  similarity to what you are talking about. If you saw the app, you would  probably see some interesting things in it.</p>
<p>To follow along that line, I have a question about Oracle. Oracle, through the  years, treated the product as though the more complex the cockpit, the better it  was. If you walked in and it looked like an old 727 cockpit with 50,000  switches, that was nirvana. And you were paid to know every position of every  switch, right?</p>
<p><strong>David:</strong> Yep.</p>
<p><strong>Sean</strong><strong>:</strong> The open source community has, to  some degree, a similar bent, right? Not in everything, but in a fair amount of  places. But even in a product like Ubuntu, which is seen as the ultimate of end-user  experience&mdash;and it has made some great strides&mdash;there&rsquo;s a massive list of steps  just to join that machine to a Windows domain, for example, if that is  something you wanted to do.</p>
<p><strong>David:</strong> Yep, yep.</p>
<p><strong>Sean</strong><strong>:</strong> So, do you see any similarities with  this line of thought in the way Microsoft helps you to administer a database  and the way open source helps you with administration in projects like MySQL? </p>
<p><strong>David:</strong><a name="mostknobs"></a> That&rsquo;s another good question. Yes, Oracle&mdash;I think I mentioned it earlier, they  marketed our ease of use against us, frankly. They said, &ldquo;How can this thing be  a real enterprise database product? It doesn&rsquo;t have nearly as many knobs as  ours does.&rdquo; And when we left Digital&mdash;this is an interesting little story&mdash;we had  a product, RDB, that had roughly as many knobs as Oracle did at that point.</p>
<p>And like engineers, we were saying, &ldquo;Oh, shoot! Hardly anyone knows how to turn  the knobs on this thing.&rdquo; So we wrote more software, something we called RDB  Expert, which was a physical database design and some other things, to  recommend and actually turn some of the knobs for you.</p>
<p>I think the first step that you go through in this evolution is to put a facade  on it, whether it&rsquo;s a system that recommends turning the knobs or a GUI to  cover up knobs in config files. But really, at that point, you haven&rsquo;t got a  good end-to-end design, because you haven&rsquo;t, in my opinion, eliminated those  points of interaction or control. You haven&rsquo;t captured user intent.</p>
<p>It&rsquo;s like having a TV that still has horizontal and vertical control, but you&rsquo;ve  put something on the TV that can watch it and turn the knobs for you. So I  think the next step in the evolution is to have the system software itself  become more adaptive.</p>
<p><strong>Scott: </strong>That&rsquo;s true. TVs used to have horizontal and vertical knobs on the back.  They don&rsquo;t have those knobs anymore, even though TVs are much more complex, and  no one misses them.</p>
<p><strong>David: </strong>And what you wind up with&mdash;here&rsquo;s the key point, and this is something I  didn&rsquo;t understand a priori, but after the fact it really made a lot of sense.  In SQL Server 7, when we did some of the memory work to have the system  automatically adapt to the environment and adjust the amount of memory it  consumed, we changed the system so that you could adjust the amount of memory  that it was using dynamically. And the mechanism was dynamic as well, so we had  an automated policy that was a closed loop, but for those people who wanted to  get under the covers, they could change it themselves.</p>
<p>But the neat thing about the way we reimplemented it top to bottom, and not  just put a facade on it, was that the underlying mechanism itself was dynamic.  By that I mean you could change the amount of memory that SQL Server used while  it was running and not have to shut it down and restart it to get it to adopt a  new value.</p>
<p>It&rsquo;s back to the separation of mechanism and policy. We made the mechanism  dynamic, we made the policy automated, and, where it made sense to try to  capture user intent, we allowed user intent to be captured and actually  influence the policy. And that takes architecture, top to bottom. I think the  evolution is: You recognize it&rsquo;s an issue, you put a facade on it, whether it&rsquo;s  a GUI or whether it&rsquo;s some other code, and then you have to step back and  architect the thing, top to bottom, to do it correctly.</p>
<p><strong>Scott:</strong> One of the attitudes I ran into back in my C programming days was, &ldquo;Look,  programming was hard for me. It&rsquo;s hard for a reason. It should be hard. If it  isn&rsquo;t hard, anybody could do it, and that&rsquo;s the last thing in the world you&rsquo;d  want.&rdquo; I run into that attitude whenever I look at systems administration and  other technical issues, where people say, &ldquo;Look, this is complicated. It should  be hard. You should have to be a little bit of a rocket scientist, otherwise  you have no business doing it.&rdquo;</p>
<p>So one of the complaints is, &ldquo;Well, yeah, Microsoft&rsquo;s made it so that any idiot  can set up a Web server, therefore every idiot does, and they don&rsquo;t keep it  patched, and it&rsquo;s vulnerable.&rdquo; Same thing with the database: &ldquo;Sure, people  could install the database and set it up, but they won&rsquo;t create their indexes  correctly, and they won&rsquo;t keep it patched.&rdquo;</p>
<p>So there are certain people who would say you should stop more people at the  front door and not let them in. Because if you do let them in, they get farther  down the path, thinking that they know what they&rsquo;re doing, and then they run  into a disaster. What would be your response to that kind of attitude?</p>
<p><strong>David:</strong> I think it all comes down to, or goes back to, design in the sense that if you  have the means within the technology to bring it out to a broader market and  let people do the job, then I think it&rsquo;s incumbent on you to try to figure out  a way to do that. It&rsquo;s a great example and a great point around physical design  of the database&mdash;how do I design the index set? It&rsquo;s very difficult.</p>
<p>One of the things we did here is, we designed the Database Tuning Advisor. This  was work with Microsoft research where we&rsquo;ll look at a workload and actually  propose indexes based upon the workload, and do physical design that way.</p>
<p>And the way we test that is kind of interesting. We bring databases in, we  measure their response against a real user workload. Then we strip all the  indexes and we use the Tuning Advisor to rebuild the index set. More often than  not, the Tuning Advisor does a better job than the guy who gets paid a lot of  money to do it by hand. Of course we can&rsquo;t see the reporting jobs that are  running at the end of the month if they haven&rsquo;t been part of the workload, but  it does a pretty darn good job. So I think it&rsquo;s a matter of how far can you  take the technology.</p>
<p>Another sort of thought experiment here is if you go back to the TV front. Go  back to 20 or 30 years ago. Every small town had two or three TV repairmen. The  technology is more complex now than it was, but it&rsquo;s perhaps 50 or 100 times  more reliable. So you don&rsquo;t see the TV repairman in every small town anymore.  The TVs just go and go and go until you decide you want a slick new plasma one.  I think that&rsquo;s the way software is going to move as well.</p>
<p><strong>Sean:</strong> Obviously, one of the strengths of open source is the community. I think that  is one contest they tend to win hands-down, if for no other reason than that open-source  projects were driving community long before closed source companies were. But  at the same time, I know Microsoft has been making some significant efforts in  this area too.</p>
<p>You mentioned in the previous conversation about CodePlex. I knew about  CodePlex, but I have not really looked at it with an SQL Server focus before. A  brief glance at it showed me some of the activity that is SQL Server related. Talk  to me a little bit about what is happening there, how that activity is  affecting the product team, etc.<strong></strong></p>
<p><strong>David:</strong><a name="sqlcommunity"></a> I agree with you. I think I mentioned earlier that tapping into the energy of  the community is super valuable. I think of a lot of these things in terms of  closed loops and how quickly can you run the loop, how fast can you get the  feedback, and how fast can you incorporate it. Tapping into the community is a  super way to do that. There are lots of examples of closing a loop, like  Watson, to have the machine send back error information and actually close the  loop and automate things to enable continuous improvement.</p>
<p>As I think about community, absolutely I give the open source guys credit for  tapping into that phenomenon first, but I don&rsquo;t think it requires open source  in terms of the development or distribution model to engage the community. I  think about community engagement in terms of layers. With the product itself  there&rsquo;s a way of tapping into the community by harnessing their feedback to  improve the product over time. I think with the documentation content and  general knowledge around how to use the product, there&rsquo;s a deeper way of  tapping into the community. As we publish content for the product, can we allow  people to modify it, link to it?</p>
<p>Some of our content could provide a spine for community activity. For example,  we could build a collaborative site around the product error messages and allow  the community to link their responses into each error message to help one another  out when they hit a particular issue. Today much of this happens in forums and  newsgroups, but it&rsquo;s not done in a way that closes the loop effectively. If we  did it in the way I just mentioned, it would be much easier for the product  development team to review and mine the activity to improve the product going  forward.</p>
<p> I  think the next level beyond documentation would be extensions and tools. Things  that you could build around the product where the core of the product is still  in a closed source model but you could open up and distribute add-ons, add-ins,  and other sorts of tools and actually build the community around that.</p>
<p><strong>Sean:</strong> This has been a great conversation, David. Thanks for taking the time to chat.</p>
<p><strong>David:</strong> Thank you.</p>
<img src="http://howsoftwareisbuilt.com/?ak_action=api_record_view&id=130&type=feed" alt="" /><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark this:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2008%2F02%2F11%2Finterview-with-david-campbell-technical-fellow-microsoft-part-ii%2F&amp;title=Interview+with+David+Campbell+%26%238211%3B+Technical+Fellow+%26%238211%3B+Microsoft+%26%238211%3B+Part+II" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2008%2F02%2F11%2Finterview-with-david-campbell-technical-fellow-microsoft-part-ii%2F&amp;title=Interview+with+David+Campbell+%26%238211%3B+Technical+Fellow+%26%238211%3B+Microsoft+%26%238211%3B+Part+II" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2008%2F02%2F11%2Finterview-with-david-campbell-technical-fellow-microsoft-part-ii%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2008%2F02%2F11%2Finterview-with-david-campbell-technical-fellow-microsoft-part-ii%2F&amp;title=Interview+with+David+Campbell+%26%238211%3B+Technical+Fellow+%26%238211%3B+Microsoft+%26%238211%3B+Part+II" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2008%2F02%2F11%2Finterview-with-david-campbell-technical-fellow-microsoft-part-ii%2F&amp;title=Interview+with+David+Campbell+%26%238211%3B+Technical+Fellow+%26%238211%3B+Microsoft+%26%238211%3B+Part+II" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http%3A%2F%2Fhowsoftwareisbuilt.com%2F2008%2F02%2F11%2Finterview-with-david-campbell-technical-fellow-microsoft-part-ii%2F" rel="nofollow" title="Add to&nbsp;SphereIt"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&nbsp;SphereIt" alt="Add to&nbsp;SphereIt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Interview+with+David+Campbell+%26%238211%3B+Technical+Fellow+%26%238211%3B+Microsoft+%26%238211%3B+Part+II+@+http%3A%2F%2Fhowsoftwareisbuilt.com%2F2008%2F02%2F11%2Finterview-with-david-campbell-technical-fellow-microsoft-part-ii%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://howsoftwareisbuilt.com/2008/02/11/interview-with-david-campbell-technical-fellow-microsoft-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ganeti &#8211; Virtual Server Management for Xen</title>
		<link>http://howsoftwareisbuilt.com/2007/09/03/ganeti/</link>
		<comments>http://howsoftwareisbuilt.com/2007/09/03/ganeti/#comments</comments>
		<pubDate>Mon, 03 Sep 2007 19:03:26 +0000</pubDate>
		<dc:creator>scottswigart</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[virtualization]]></category>

		<guid isPermaLink="false">http://howsoftwareisbuilt.com/2007/09/03/ganeti/</guid>
		<description><![CDATA[Ganeti (how do you pronounce that?)&#160;has launched.&#160; This is virtual server management for Xen.&#160; I&#8217;m looking forward to checking it out.&#160; The announcement is here, and the project page is here. Bookmark this:]]></description>
			<content:encoded><![CDATA[<p>Ganeti (how do you pronounce that?)&nbsp;has launched.&nbsp; This is virtual server management for Xen.&nbsp; I&#8217;m looking forward to checking it out.&nbsp; The announcement is <a href="http://google-code-updates.blogspot.com/2007/08/ganeti-open-source-virtual-server.html">here</a>, and the project page is <a href="http://code.google.com/p/ganeti/">here</a>.</p>
<img src="http://howsoftwareisbuilt.com/?ak_action=api_record_view&id=92&type=feed" alt="" /><!-- Social Bookmarks BEGIN -->
<div class="social_bookmark">
<a><strong><em>Bookmark this:</em></strong></a>
<br />
<div class="d">
<br />
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://del.icio.us/post?url=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2007%2F09%2F03%2Fganeti%2F&amp;title=Ganeti+%26%238211%3B+Virtual+Server+Management+for+Xen" rel="nofollow" title="Add to&nbsp;Del.icio.us"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/delicious.png" title="Add to&nbsp;Del.icio.us" alt="Add to&nbsp;Del.icio.us" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2007%2F09%2F03%2Fganeti%2F&amp;title=Ganeti+%26%238211%3B+Virtual+Server+Management+for+Xen" rel="nofollow" title="Add to&nbsp;digg"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/digg.png" title="Add to&nbsp;digg" alt="Add to&nbsp;digg" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.facebook.com/sharer.php?u=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2007%2F09%2F03%2Fganeti%2F" rel="nofollow" title="Add to&nbsp;Facebook"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/facebook.png" title="Add to&nbsp;Facebook" alt="Add to&nbsp;Facebook" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://reddit.com/submit?url=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2007%2F09%2F03%2Fganeti%2F&amp;title=Ganeti+%26%238211%3B+Virtual+Server+Management+for+Xen" rel="nofollow" title="Add to&nbsp;reddit"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/reddit.png" title="Add to&nbsp;reddit" alt="Add to&nbsp;reddit" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fhowsoftwareisbuilt.com%2F2007%2F09%2F03%2Fganeti%2F&amp;title=Ganeti+%26%238211%3B+Virtual+Server+Management+for+Xen" rel="nofollow" title="Add to&nbsp;Stumble Upon"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/stumbleupon.png" title="Add to&nbsp;Stumble Upon" alt="Add to&nbsp;Stumble Upon" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://www.sphere.com/sphereit/http%3A%2F%2Fhowsoftwareisbuilt.com%2F2007%2F09%2F03%2Fganeti%2F" rel="nofollow" title="Add to&nbsp;SphereIt"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/sphereit.png" title="Add to&nbsp;SphereIt" alt="Add to&nbsp;SphereIt" /></a>
<a onclick="window.open(this.href, '_blank', 'scrollbars=yes,menubar=no,height=600,width=750,resizable=yes,toolbar=no,location=no,status=no'); return false;" href="http://twitter.com/home/?status=Check+out+Ganeti+%26%238211%3B+Virtual+Server+Management+for+Xen+@+http%3A%2F%2Fhowsoftwareisbuilt.com%2F2007%2F09%2F03%2Fganeti%2F" rel="nofollow" title="Add to&nbsp;Twitter"><img class="social_img" src="http://howsoftwareisbuilt.com/wp-content/plugins/social-bookmarks/images/twitter.png" title="Add to&nbsp;Twitter" alt="Add to&nbsp;Twitter" /></a>
<br />
</div>
</div>
<!-- Social Bookmarks END -->
]]></content:encoded>
			<wfw:commentRss>http://howsoftwareisbuilt.com/2007/09/03/ganeti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

