<?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/"
	>

<channel>
	<title>John Bennett&#039;s blog &#187; msnbc</title>
	<atom:link href="http://jtbennett.com/blog/tag/msnbc/feed" rel="self" type="application/rss+xml" />
	<link>http://jtbennett.com/blog</link>
	<description>Software and web development</description>
	<lastBuildDate>Tue, 08 Feb 2011 00:50:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<meta xmlns="http://www.w3.org/1999/xhtml" name="robots" content="noindex,follow" />
		<item>
		<title>New msnbc.com developer blog</title>
		<link>http://jtbennett.com/blog/2011/02/new-msnbc-com-developer-blog</link>
		<comments>http://jtbennett.com/blog/2011/02/new-msnbc-com-developer-blog#comments</comments>
		<pubDate>Tue, 08 Feb 2011 00:50:49 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[msnbc]]></category>

		<guid isPermaLink="false">http://jtbennett.com/blog/?p=45</guid>
		<description><![CDATA[We just launched a new blog to talk about the technical details of how we build msnbc.com: Development @ msnbc.com.  I&#8217;m going to be posting there, along with some of my colleagues: Paul Kearney, Bryan Wheeler, and others coming soon&#8230; Until &#8230; <a href="http://jtbennett.com/blog/2011/02/new-msnbc-com-developer-blog">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We just launched a new blog to talk about the technical details of how we build msnbc.com: <a href="http://development.msnbc.msn.com">Development @ msnbc.com</a>.  I&#8217;m going to be posting <a href="http://development.msnbc.msn.com">there</a>, along with some of my colleagues: Paul Kearney, Bryan Wheeler, and others coming soon&#8230;</p>
<p>Until we get our cross-posting in order, I&#8217;ll post links here to each of my posts over there, starting with these:</p>
<ul>
<li><a href="http://development.msnbc.msn.com/_news/2011/02/01/5969438-our-service-bus-introduction">How we built a service bus for all of our application instances to talk to one another</a> (a series of 5 posts and counting)</li>
<li><a href="http://development.msnbc.msn.com/_news/2011/02/06/6000743-how-msnbccom-handled-the-2010-us-election-results">How we got ready for the huge traffic spike on US election night in November 2010</a></li>
<li><a href="http://development.msnbc.msn.com/_news/2011/02/01/5969335-solid-state-drives-for-developers-are-a-big-win">How much faster Visual Studio is when running on solid state drives</a></li>
</ul>
<p>But please subscribe over there to get all the goodies from the whole team.</p>
]]></content:encoded>
			<wfw:commentRss>http://jtbennett.com/blog/2011/02/new-msnbc-com-developer-blog/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>US Election Day &#8211; or &#8220;What I did since my summer vacation&#8221;</title>
		<link>http://jtbennett.com/blog/2010/11/us-election-day-or-what-i-did-since-my-summer-vacation</link>
		<comments>http://jtbennett.com/blog/2010/11/us-election-day-or-what-i-did-since-my-summer-vacation#comments</comments>
		<pubDate>Tue, 02 Nov 2010 12:30:48 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[msnbc]]></category>

		<guid isPermaLink="false">http://jtbennett.com/blog/2010/11/us-election-day-or-what-i-did-since-my-summer-vacation</guid>
		<description><![CDATA[My wife and I had a wonderful vacation in France this summer.&#160; Since then, I’ve been neck deep helping msnbc.com get ready for the US elections on November 2.&#160; I’ll talk more in the future about the Elections service and &#8230; <a href="http://jtbennett.com/blog/2010/11/us-election-day-or-what-i-did-since-my-summer-vacation">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My wife and I had a wonderful vacation in France this summer.&nbsp; Since then, I’ve been neck deep helping msnbc.com get ready for the US elections on November 2.&nbsp; I’ll talk more in the future about the Elections service and how it fits into <a href="http://jtbennett.com/blog/2010/07/identifying-the-services-within-a-service-oriented-cms">the grand scheme of things</a>.&nbsp; This is just a shameless plug for <a href="http://elections.msnbc.com/">Decision 2010 on msnbc.com</a>.&nbsp; A lot of people worked long and hard to make this look great, and to make sure the results are updated as fast as we’re allowed to show them.</p>
<p>To all you US citizens over 18:&nbsp; VOTE!&nbsp; And then watch the <a href="http://elections.msnbc.msn.com/2010/all">election results as they come in</a>.&nbsp; Works well on your mobile phone or iPad, too.</p>
]]></content:encoded>
			<wfw:commentRss>http://jtbennett.com/blog/2010/11/us-election-day-or-what-i-did-since-my-summer-vacation/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Identifying the services within a service oriented CMS</title>
		<link>http://jtbennett.com/blog/2010/07/identifying-the-services-within-a-service-oriented-cms</link>
		<comments>http://jtbennett.com/blog/2010/07/identifying-the-services-within-a-service-oriented-cms#comments</comments>
		<pubDate>Mon, 26 Jul 2010 14:52:43 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[msnbc]]></category>
		<category><![CDATA[soa]]></category>

		<guid isPermaLink="false">http://jtbennett.com/blog/2010/07/identifying-the-services-within-a-service-oriented-cms</guid>
		<description><![CDATA[In my previous post I talked about avoiding a database oriented architecture (DOA) and choosing a service oriented architecture (SOA) for our content management system (CMS). The next big question is: How do we divide our CMS into large-grained sets &#8230; <a href="http://jtbennett.com/blog/2010/07/identifying-the-services-within-a-service-oriented-cms">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Credit: Nick Sherman" href="http://www.flickr.com/photos/nicksherman/"><img style="float: right" title="Dividing the service pie" border="0" alt="Dividing the service pie" align="right" src="http://jtbennett.com/blog/wp-content/uploads/2010/07/4480673517_3e35ac3d99_d1.jpg" width="244" height="184"></a>In my previous post I talked about avoiding a <a href="http://jtbennett.com/blog/2010/07/database-oriented-architecture-is-doa">database oriented architecture</a> (DOA) and choosing a service oriented architecture (SOA) for our content management system (CMS).</p>
<p>The next big question is: How do we divide our CMS into large-grained sets of discrete functionality – business services? </p>
<p>A good CMS cleanly separates content from presentation.&nbsp; Even simple blog-oriented CMSs have this separation.&nbsp; This blog is currently hosted in <a href="http://wordpress.org/">WordPress</a>.&nbsp; By simply downloading a different WordPress theme, I can change not only colors and fonts, but the entire structure of the site.&nbsp; I can add widgets to the sidebar, change the header image, show either full posts or excerpts on the main page, add buttons to share on Twitter and Facebook, change URLs or move pages around into an entirely different hierarchical structure – all without touching the content of a single post.</p>
<p>With a large news-oriented CMS, this separation is even more important.&nbsp; We deliver news not just to browsers, but to all kinds of applications and devices – from iPads to Bing Maps and Google Earth, from Microsoft Surface tables to a 70s-style arcade game machine in Rockefeller Center.&nbsp; But our reporters and editors shouldn’t have to worry about – or even be aware of – all of that.&nbsp; They just need to worry about crafting great stories.</p>
<p>Thus, the most obvious business services within our CMS are what we call <strong>Editorial</strong> and <strong>Delivery</strong>.</p>
<p>As a news organization, we not only deliver the news – we consume it in enormous quantities.&nbsp; Feeds like the AP, UPI, Agence France-Presse, and hundreds of other text and photo sources all flow in 24 hours a day.&nbsp; Then there are data sources like weather, stock market tickers, lottery results, etc.; it all has to be gathered, organized, searched, categorized, edited, and made available for publishing.&nbsp; Elections produce enormous amounts of data that we need to sort, search, and aggregate.&nbsp; All of this functionality makes up the <strong>Ingest</strong> business service.</p>
<p>One type of ingested content absent from the list above is video.&nbsp; NBC News (a parent of ours) is one of the largest producers of video news content in the world.&nbsp; We support the websites for msnbc.com, cnbc.com, todayshow.com, plus shows like Rachel Maddow, Countdown, Dateline, Nightly News, Meet the Press, and more.&nbsp; Video is different from text and photo content in many ways:&nbsp; sheer file size, bandwidth consumption, encoding standards (and the computing powered needed for encoding), editing tools, advertising model, etc.</p>
<p>As a result of this complexity, video is a technical and editorial specialty unto itself.&nbsp; I’m no expert in video, so I’ll leave the detailed discussion to others.&nbsp; But as a major functional area that has to integrate with everything else in our CMS, <strong>Video </strong>is a business service.</p>
<p>Our other parent (Microsoft) gives us access to a wealth of technology.&nbsp; Not only the platform building blocks of Windows Server, ASP.NET, WCF, etc.; but also cool stuff like the ability to scan huge amounts of content and determine the most important people, places and concepts mentioned.&nbsp; And to automatically determine which stories, photos, and videos are related to one another.&nbsp; Check out the Related and Topics areas near the bottom of a <a href="http://www.msnbc.msn.com/id/38382217/ns/technology_and_science-wireless/">story page</a> to see what I mean.&nbsp; Like video, we want this capability integrated with many other parts of the system, yet it is more or less a world unto itself.&nbsp; This is the <strong>Topics </strong>business service.</p>
<p>With any non-trivial system, we also need to concern ourselves with day to day operations and maintenance.&nbsp; How do we easily deploy to and configure all those servers in multiple data centers?&nbsp; How do we monitor them and get notified when something isn’t working?&nbsp; How do we get detailed troubleshooting data for a server or process gone awry?&nbsp; While some of these capabilities need to be part of the implementation of every service, the data aggregation, monitoring and notifications are business functionality that forms the <strong>Operations</strong> service.</p>
<p>In future posts, I’ll dig into these services and their component applications, focusing first on the Delivery service.</p>
]]></content:encoded>
			<wfw:commentRss>http://jtbennett.com/blog/2010/07/identifying-the-services-within-a-service-oriented-cms/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Database Oriented Architecture is DOA</title>
		<link>http://jtbennett.com/blog/2010/07/database-oriented-architecture-is-doa</link>
		<comments>http://jtbennett.com/blog/2010/07/database-oriented-architecture-is-doa#comments</comments>
		<pubDate>Sun, 11 Jul 2010 16:37:05 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[databases]]></category>
		<category><![CDATA[msnbc]]></category>
		<category><![CDATA[soa]]></category>

		<guid isPermaLink="false">http://jtbennett.com/blog/2010/07/database-oriented-architecture-is-doa</guid>
		<description><![CDATA[As we began work on a new CMS for msnbc.com, one of the major pain points with the existing system that we wanted to address was its database oriented architecture – or DOA.&#160;&#160; No, not the popular video game (searching &#8230; <a href="http://jtbennett.com/blog/2010/07/database-oriented-architecture-is-doa">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.imdb.com/title/tt0094933/"><img style="margin: 0px 0px 0px 5px; float: right" title="D.O.A movie poster from IMDB" border="0" alt="D.O.A movie poster from IMDB" align="right" src="http://jtbennett.com/blog/wp-content/uploads/2010/07/MV5BMTMxNDk4NDEzNF5BMl5BanBnXkFtZTYwNTc2NDg5._V1._SX216_SY325_1.jpg" width="164" height="244"></a>
<p>As we began work on a new CMS for msnbc.com, one of the major pain points with the existing system that we wanted to address was its database oriented architecture – or DOA.&nbsp;&nbsp; No, not the popular video game (searching for DOA is borderline NSFW).&nbsp; Rather, “dead on arrival” – the morbid term for an ambulance patient who doesn’t survive the trip to the hospital.</p>
<p>A multitude of dependencies on a single central database is, indeed, DOA.&nbsp; First, it doesn’t scale well up to billions of page views per month, or make it easy to achieve redundancy across data centers.&nbsp; Doing so requires all sorts of magic with clusters, mirroring, replication, etc. – in other words, expensive hardware and even more expensive people.&nbsp; (The reason it has worked up to now is our top-notch operations team.)</p>
<p>Second, all of those dependencies mean that changes to the database schema are effectively impossible.&nbsp; </p>
<p>A CMS like ours isn’t a single application.&nbsp; It’s an ecosystem of applications, built by different teams over a long period of time and performing a wide variety of functions: filtering and aggregating hundreds of inbound news wires in different formats, encoding all the video from one of the largest news organizations in the world, supporting journalists on tight deadlines around the clock, and – oh, yeah – serving up all that content to millions of people a day.&nbsp; </p>
<p>Most of those applications create or manipulate content that is stored in the central database.&nbsp; Thus, any change to the database is likely to have side-effects.&nbsp; A change to support one application, simple on its own, turns out to require a major refactoring effort in an unrelated application.&nbsp; Fixing bugs becomes a game of <a href="http://www.addictinggames.com/whackamole.html">whack-a-mole</a>; new features become more expensive and take longer and longer to release.&nbsp; Worse, a great new feature may not get built at all.</p>
<p>This isn’t really a problem with databases, of course.&nbsp; It’s a problem with dependency management.&nbsp; But it is exacerbated by the fact that accessing a database is inherently a blocking operation – you have to wait for the result.&nbsp; Any single resource that must be available all the time in order for any other part of the system to function correctly is going to cause these types of problems.</p>
<p>For all of these reasons, we opted instead for a service oriented architecture (SOA).&nbsp; That doesn’t mean simply exposing everything as a web service.&nbsp; It means partitioning the system into “business services” – large grained, autonomous sets of functionality.&nbsp; Being autonomous includes having one’s own private database (assuming there is some data for that service to persist).&nbsp; Private means private – the database is not shared with other services.</p>
<p>SOA is not exactly a radical choice, but it does require a radical change in thinking – for developers, for admins, even for end users.&nbsp; It requires letting go of 100% consistency 100% of the time in favor of eventual consistency, letting go of “one database to rule them all,” and accepting that maintaining multiple, service-specific versions of the data won’t be the end of the world.</p>
<p>It takes a lot of time and constant effort to completely change your world view.&nbsp; It’s not unlike a procedural developer being introduced to object orientation.&nbsp; It takes a lot of practice, and dozens of “Aha!” moments to cross the conceptual chasm.&nbsp; As an organization, we’re still in mid-air.&nbsp; I expect we’ll eventually land safely on the other side, and not wind up DOA.</p>
<p>In a future post, I’ll write about how we drew the boundaries between our business services.</p>
]]></content:encoded>
			<wfw:commentRss>http://jtbennett.com/blog/2010/07/database-oriented-architecture-is-doa/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New publishing platform for msnbc.com and todayshow.com</title>
		<link>http://jtbennett.com/blog/2010/07/new-publishing-platform-for-msnbc-com-and-todayshow-com</link>
		<comments>http://jtbennett.com/blog/2010/07/new-publishing-platform-for-msnbc-com-and-todayshow-com#comments</comments>
		<pubDate>Sun, 04 Jul 2010 13:10:59 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[msnbc]]></category>

		<guid isPermaLink="false">http://jtbennett.com/blog/2010/07/new-publishing-platform-for-msnbc-com-and-todayshow-com</guid>
		<description><![CDATA[For the past 18 months or so I’ve been nose-to-the-grindstone on a project to rebuild the publishing platform for msnbc.com, which is also used to run todayshow.com and a bunch of other NBC News sites.&#160; Just over a week ago… &#8230; <a href="http://jtbennett.com/blog/2010/07/new-publishing-platform-for-msnbc-com-and-todayshow-com">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For the past 18 months or so I’ve been nose-to-the-grindstone on a project to rebuild the publishing platform for <a href="http://msnbc.com/">msnbc.com</a>, which is also used to run <a href="http://todayshow.com">todayshow.com</a> and a bunch of other NBC News sites.&nbsp; Just over a week ago… we shipped!</p>
<p>The visible part of the change is an entirely new look for stories.&nbsp; You can <a href="http://today.msnbc.msn.com/id/37616868/ns/about_us">take a tour</a>.&nbsp; There are some great new features, including the ability to easily embed video, like so:</p>
<p><object width="420" height="245" id="msnbc5c4b16" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0"><param name="movie" value="http://www.msnbc.msn.com/id/32545640" /><param name="FlashVars" value="launch=38027587&amp;width=420&amp;height=245"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="wmode" value="opaque" /><embed name="msnbc5c4b16" src="http://www.msnbc.msn.com/id/32545640" width="420" height="245" FlashVars="launch=38027587&amp;width=420&amp;height=245" allowscriptaccess="always" allowFullScreen="true" wmode="opaque" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"></embed></object>
<p style="text-align: center; margin-top: 5px; width: 420px; font-family: arial, helvetica, sans-serif; background: none transparent scroll repeat 0% 0%; color: #999; font-size: 11px">Visit msnbc.com for <a style="border-bottom: #999 1px dotted; height: 13px; color: #5799db !important; font-weight: normal !important; text-decoration: none !important" href="http://www.msnbc.msn.com">breaking news</a>, <a style="border-bottom: #999 1px dotted; height: 13px; color: #5799db !important; font-weight: normal !important; text-decoration: none !important" href="http://www.msnbc.msn.com/id/3032507">world news</a>, and <a style="border-bottom: #999 1px dotted; height: 13px; color: #5799db !important; font-weight: normal !important; text-decoration: none !important" href="http://www.msnbc.msn.com/id/3032072">news about the economy</a></p>
<p>Alas, I had nothing to do with all those great features…&nbsp; My contribution was in the invisible parts – the underlying platform on top of which some smart, creative folks have built the new pages.&nbsp; There’s quite a bit more to it than meets the eye.&nbsp; </p>
<p>I’ll be posting on a bunch of topics related to what we did, how we did it, and why we did it that way.&nbsp; The highlight reel will include: SOA, EDA, messaging, service bus, WCF, MSMQ, ASP.NET MVC, unit testing, TFS, performance testing and profiling, Avicode, automated deployments, and a lot more.&nbsp; To the extent I’m allowed to, I’ll share some code, too.&nbsp; Stay tuned…</p>
]]></content:encoded>
			<wfw:commentRss>http://jtbennett.com/blog/2010/07/new-publishing-platform-for-msnbc-com-and-todayshow-com/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

