Microsoft Certifications

Posted 24 March 2009, 22:42 | by | | Perma-link

Why bother with certification? The key driver for me was my appraisals - it has been a goal pretty much since I joined cScape, and was one of the reasons for joining them over some others. The real sensible reason Microsoft give is that having a certificate shows your employers what you know. Other ancillary benefits of certification are pretty pieces of paper to hang on your wall, and Microsoft also have a selection of discounts organised with various other suppliers for MCPs.

Microsoft offer a large selection of exams and levels of certification, mostly building up on the ones before, covering all aspects of their software and increasing in technical expertise and the breadth of the applications supported.

Increasing expertise and breadth of applications

Desktop Support

Gives you advanced training for Office products and desktop operating systems. You will be a Microsoft Certified Application Specialist (based on Vista) or a Microsoft Office Specialist (Office 2007 – one for each application). There's usually only one exam for each certification.

Technical Specialist

This shows that you can implement, build, troubleshoot and debug a specific technology. You will be a Microsoft Certified Technology Specialist, with specialisations in BizTalk, Exchange, Server, SQL, Visual Studio, Vista, Mobile, Office and Office Server technologies for example. The application type certifications are usually one exam, the development ones usually have two exams – a foundation in the .Net framework, followed by the specialisation (Web, Windows, WCF, WPF, etc).

Professional Series

This validates the skills for specific IT or Developer jobs. You will be a Microsoft Certified IT Professional or a Microsoft Certified Professional Developer. The technology stacks available include Windows Development, ASP.NET Development and Enterprise Applications such as Business Intelligence, Consumer Support Tech, Database Developer/Administration, Enterprise Messaging, Support Technician and Server Administrator. These are usually one exam on top of the relevant MCTS specialisation.

The Master Series

This allows you to demonstrate extensive technical expertise. You will be a Microsoft Certified Master, specialising in (currently) Exchange, SQL, Windows Server Directory, Office Communications Server and MOSS. There is an intensive 3 week training course at Redmond, with up to three written and lab based exams. You really need to have been working with the technology for many years.

Architect Series

This is the pinnacle of MS certification. You need to hold a Masters certification, and then attend and pass a peer review. You will be a Microsoft Certified Architect, specialising in Messaging (Exchange), Database (SQL with Online Transaction Processing), Infrastructure and Solutions.

Build your own applicationsSo, how do you pass an exam? What sort of preparation is required? For me, it was mostly a combination of "on the job training" and self learning through doing – and that's the most helpful thing for me – just doing stuff – build and maintain your own site. I know there are plenty of off the shelf tools to host a blog, but what do you learn about web development using those? Write some helper applications to do repetitive tasks (bulk file renaming, deployment guide generation, etc), play with random features – I've written a couple of Debugger Visualisers, including one that will display a colour variable over an image to display it's colour and transparency, which came in useful when answering the questions on the graphics libraries in the foundation exam. I've also had a couple of goes on practice exams, and hunted around the MS Learning site, especially the recently launched "My Ramp Up" area – a massive, free resource with free book chapters, labs, web casts, etc for you to work through and gear you up for the exams. Also, make some time to read blogs and use all those things that appear in IntelliSense that you don't know about as learning opportunities to find out something new from MSDN.

Up till now, the exams have mostly all been based around Multiple Choice type questions – sometimes it's a simple "pick one" question, others are "pick x answers", and some are even "pick x options, and put them in the correct order". They have moved away from the old style of offering options that sound right, but don't exist at all, everything exists, but may not be the right solution. However, more exams are turning to lab based testing, checking the state of a server after you've completed the test to see if you've fixed the problem.

You get the time to take the exam, and are then offered about half as much time again to submit some feedback on the questions, and then you'll find out whether you've passed or failed. You will receive a set of graphs breaking down the exam into generally sensible groupings, rating your performance in those areas from Weak to Strong – apparently I'm not much good at reflection using the Framework, but if you need a website deploying, I'm your man!

Pass or fail, the exam is useful – like the IntelliSense above, take notes in the exam, there's bound to be an option you don't know about, or a question on something you're unsure of – go and learn about it afterwards, plus if you do fail, you will want to have a note of the areas you struggled with.

Microsoft are looking at introducing a set of certifications based around the Expression suite, and the foundation exams that are currently part of the MCTS developer tracks are going to be removed for the .NET 4.0 exams, instead you'll have relevant areas of the foundation tested in the specialisation exams – a good thing if like me you're heavily focused on web development, and rarely touch System.Drawing for example, but I can imagine that there will be quite a bit of overlap for people crossing many disciplines.

Taken from my recent cScape Breakfast Briefing "Certifications".

Filed under: Certifications, Talks

Microsoft Office Live Connector makes Internet Explorer 7 "Downlevel"

Posted 19 February 2009, 14:22 | by | | Perma-link

ASP.NET 1.1 Browser Capabilities are evil. We've already updated the out of the box BrowserCaps in our Machine.configs for our ASP.NET 1.1 sites as per SlingFive's recommended updates, and our clients were happy - Safari, Opera and Firefox all saw the site as they should do.

I was happy too - until I installed Microsoft's latest Live offering - Office Live Connector  - this updated my Internet Explorer user agent string to:

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.590; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; WWTClient2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)

(additions in bold)

I will go back and fix the BrowserCaps shortly, and when I do, I'll update this post, but in the mean time, I've removed the offending keys from IE's user agent string via the registry*

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform

Now, I may have just broken my Office Live integration, who knows, but that's a price I can live with until I've fixed the browser caps correctly.

Update: 24 March 2009

Looks like it's deeper than that - I've just upgraded my machine to Internet Explorer 8 and the downleveling has happened again - I'm seriously going to have to take a look at what's in my UserAgent, and understand the BrowserCaps section properly - no one else in the office seems to be having this issue however, so it's clearly me.

Update: 30 March 2009

Hmm, removing the World Wide Telescope (WWTClient2) seems to have also resolved the issue, which is odd, as I've had that installed for some time.

Belated Update: 23 June 2009

Thanks to this answer on StackOverflow, I was able to find an actively updated Browser Caps by Owen Brady. Not only that, but Owen's quite knowledgable on this issue, and a quick email exchange led me to discover that ASP.NET 1.1 gets upset when your User Agent string is greater than 128 characters - which is why removing the Office Live stuff worked I guess, but installing IE8 took me back over the limit Angry. Anyway, the other thing Owen pointed out was to set the default tagwriter to the HTML 4.0 tagwriter, rather than the 3.2 one:

<!-- 08-06-06 Think its safe to force the newer tagwriter -->
<!-- tagwriter=System.Web.UI.Html32TextWriter-->

*Use with caution, don't edit the registry unless you know what you're doing, I'm not responsible if you break your machine, etc., etc.

Filed under: Fixes

Visual Studio 2008 SP1 Deletes LINQ to SQL designer files

Posted 09 February 2009, 11:30 | by | | Perma-link

We had the following issue: We'd gone back to an old .dbml file, and added a new table on to the design surface. Visual Studio proceeded to check out the project file, and delete the .designer.cs file from the system - which we failed to notice initially, as it's a nested file. What we did notice however was that nothing would compile, especially not our DAL, as the partial class within the data context contained lots of red squiggly lines and complained that most of our data objects no longer existed.

Looks like I'm not the only one seeing this, and MS fixed it last month, but I'm not sure when the fix is coming out.

Thankfully, there is a work around, and it seemed to work quite well for us:

In your partial class, move any using statements inside the namespace:

namespace DataContexts {
  using System.Collections.Generic;
  using System.Linq;
  partial class ConfigDataContext

Then right-click on the .dbml file in Solution explorer, and select "Run Custom Tool". This will then regenerate the designer files, and your code will now compile.

Filed under: Fixes, LINQ

Tech.Ed Day 5 Roundup

Posted 07 December 2008, 21:19 | by | | Perma-link

TLA311: The Future of C#

The story for C# so far has been: Managed code (1.x), Generics (2.0) LINQ (3.0), however the trends in languages at the moment is towards:

  • Declarative: Less how you want to do something, but more what you want to do - this is supported by LINQ and PLINQ.
  • Dynamic: Not just dynamic languages, but objects whose type we don't know about at compile time.
  • Concurrency: No one's got this completely right for the last 30 years or so, mainly because it means many things to many people. As computers gain more cores, we need to work out how to make our sequential processes run in parallel.
  • Within Microsoft, there's a trend for VB.Net and C# to steal ideas: Going forward they are going to stop adding features separately to each language - many of the new things in C# 4.0 are already in VB, and the same goes for VB10.

So, what is coming in C# 4.0?

  • Dynamic Programming: The Dynamic Language Runtime, sits in the middle, offering Expression Trees, Dynamic Dispatch and Call Site caching, the languages sit on top of the DLR (IronPython, IronRuby, C#, VB.Net, etc), and under the DLR are binders to objects, etc.
    To access a dynamic object, you use the dynamic type, so member selection is deferred to runtime, when the actual types are substituted. Obviously, there's no IntelliSense for dynamic types.
    You will also be able to implement IDynamicObject, which will allow you to dynamically create properties on the object, which are stored in an internal dictionary - this gives you a kind of Duck Typing ("It looks like a duck, it acts like a duck, it sounds like a duck, let's just call it a duck").
    The ultimate proof of this was when Vishal Joshi copied some JavaScript from an aspx file into a cs file, and it all pretty much just worked.
  • Optional and Named Parameters: You can declare default values for parameters, and these will be used if no value is passed in. Positional arguments are processed first and then named arguments are processed. This is obviously of most benefit when it comes to COM interop. The ref modifier on interop calls is now optional, and the Primary Interop Assemblies are no longer needed - only the calls you actually use will be generated.
  • Co- and Contra-variance: See Eric Lippart's Fabulous Adventures In Coding series on the Future of C# for more on this, but my main notes were that the Out modifier will promise that you won't add to or modify the contents of the objects passed to you, and an In modifier states you only take input (e.g. Compare).

And what about after C# 4.0? There was a demonstration of the compiler being exposed as part of the API, allowing complete Meta-programming, dynamic languages that change at runtime, etc.

WUX402: ASP.Net AJAX Tips and Tricks

Something I probably should know about - the preventDefault method will disable the default url action on a link - quite handy.


This allows you to store Key-Value pairs, along with a title in a state bag, that then enables Back and Forward  navigation, along with Bookmarking support. Within the Script Manger you need to Enable History, set On Navigate, and set EnableSecureHistory to false. This can be done and accessed either server side or, when using sys.Application.AddHistoryPoint on the client side.


This now ships with ASP.Net MVC and will be included in VS2010, Jeff King has lots of content on jQuery integration - some quite neat selectors are available:

$("#id") // basic select element by id.
$(":text") // select all elements of type=text.
$(".class_name") // basic select by css class name.
$("#grd tr:even") // find element id "#grd" then select every even row within it.

Script Combining

Although modern browsers are getting better, the HTTP spec recommends only two active connections from a client to the server - so consider combining your scripts together to reduce roundtrips - or you can look into using the ToolKitScriptManager to assist with that.


Handy additions - Ajax.BeginForm - wrap this in a using statement, and you automatically get the closing form tag as well.

There is a client only AJAX toolkit, and helper methods to go with it.

PDC01-IS: Cloud Services: The Story Behind the PDC Keynote Demos

Interesting interactive session on the work being done for the RNLI that has already saved lives, and BlueHoo, who rather frivalously use Azure platform to make little grey and blue blobs (or Hoos) dance. Oh, and enable you to network via BlueTooth and a data service.

WUX02-IS: Top 10 Web Mistakes and How to Avoid Them

A packed session (in fact, a repeat of a previously packed session).

10: Lousy and Out of Date Content

For best results, remove out of date content - at the very least, ensure you have a date on the content, so users can see when it was posted, and ignore it if they wish.

9: Errors in Code

Make sure your mark-up is valid.

8: No Easy Navigation

Sitemaps, breadcrumb trails, search all help.

7: Inconsistent Site Design

On larger sites, ensure that the site layout and design is consistent - especially the overall navigation.

6: Bad User Workflow

An example here was twitter: On the first page, the focus is in the text area at the top - this is good, because you probably went there to post a tweet, however, once you're browsing later pages, this is less important - you're more likely scrolling around, reading tweets, etc - lose the focus on those pages.

5: Only Providing Rich Media

4: Obtrusive Ads

Try and come up with a way to make them less obtrusive, more relevant, targeted, etc.

3: Not Optimising for Search

URLs, HTML markup (see 9 above), etc.

2: Non-Designers Designing

Again, 7, inconsistent designs, poor colour choices, etc - there are plenty of free or affordable templates and colour schemes out there, use them.

1: Not Planning for the Future

Locking people out because they have a later build than your browser sniffer, failing to work on browsers like Chrome or IE8, etc.

Filed under: Conferences, Tech.Ed

Tech.Ed Day 4 Roundup

Posted 07 December 2008, 21:13 | by | | Perma-link

TLA322: Writing a 3D Game in 60 Minutes

A walkthrough using the Spacewar Starter Kit, and turning it into a Space Invaders clone - not very 3D, as it was all top down, but I did learn where I went wrong adding my background in my own game - blending is important.

MS Exam 070-562: Microsoft .Net Framework 3.5 ASP.Net Application Development

I passed this one too! Great news! I'm now a Microsoft Certified Technical Specialist: .Net Framework 3.5, ASP.Net Applications - what a mouthful. Apparently I'm very good at configuring and deploying web applications Wink, but a bit weak when it comes to targeting mobile devices - no real surprises there.

WIN305: Parallel Programming Techniques in F#

See my earlier comments, only this time, my brain really did melt. The good news is that Parallel classes are coming in System.Threading v4.0.

PDC307: Microsoft Visual Studio 10: Web Development Futures

First a quick re-cap of what we have in VS2008 SP1, and the out of band releases - -vsdoc.js based JavaScript ItelliSense support added through a hotfix, ASP.Net MVC already in beta, ASP.Net AJAX toolkits and jQuery support.

Then on to VS2010

The biggest change to "Design" is in CSS: It is now standards compliant, it has better support of selectors, and the renderer passes the Acid 1 test.

On the "Source" side, as mentioned previously, there's a large number of HTML snippets that have been added, and "Selection Expansion" was demonstrated (double clicking will expand your selection).

JavaScript IntelliSense is even more improved, a lot faster parsing of JS files to generate IntelliSense. Return types can be parsed from comments, and also it no longer falls over when you have bad scripts.

A whole new deployment story was announced, alongside the Web Config transforms mentioned before. By default transforms are created for each build configuration, Debug compilation is on by default, but off for release builds, and MSBuild will power your deployments.

In the Project properties, there's a new Publish tab, that will allow you to define how you publish the project - you can set up multiple profiles, with different servers, logins, deployment methods. The publish tools will finally allow you to "Skip extra files on the server" so it doesn't delete things it doesn't know about, you can automatically mark the project as an Application on the server, and there's a Publishing toolbar for "one click deployments" - an early offering of this can be found at DiscountASP's MS Deploy Lab.

Filed under: Conferences, Tech.Ed

Tech.Ed Day 3 Roundup

Posted 07 December 2008, 20:55 | by | | Perma-link

PDC201: A Lap Around Cloud Services

Windows Adger Azure - a British Microsoftie who can actually pronounce Azure.

So, it's an OS for the cloud, it provides:

  • Hardware abstraction across many servers.
  • Storage: Distributed, scalable and durable.
  • Monitoring and Maintenance: CPU, disk, memory, bandwidth, etc - basically anything that they might bill you for - and alerting via Live Alerts (SMS, Email, etc).
  • Currently it's all .Net, but they are looking into other options such as PHP, unmanaged code, etc.

When writing for the platform, beware that you're not running in complete Medium Trust - for example while you can open sockets, you can't connect to SQL Server

The two main roles on the platform:

  1. Web Role - sites and services.
  2. Worker Role - actually does work on things. Inbound requests come over HTTP(s).

The web role writes messages to the queue; the worker role watches the queue for jobs to work on.

Three main types of storage accessed via a REST based interface:

  1. Queues - but these are not MSMQ. They are deleted after about 2 weeks - so no using them for cheap storage. When a message is read, it is hidden from the queue while the worker role processes it, but will be restored later if you don't clean it up - this allows for some level of guarantee that the message will be processed, but you need to be aware that a message might have already been started.
  2. Tables - persistent storage for entities, but there's no relational features: joins, etc are not supported. Using a Partition Key allows MS to scale out your data easily, and using a partition key in your queries will limit the search scope nicely. You can also run parallel queries using the partition key.
  3. Blobs - A file system in the cloud.

The SDK provides all you need to develop services - a local environment that will host a cloud service on Vista or Windows Server 2008, complete with mock storage (basically contained in a SQL Express instance), and a managed API, including Logging, Storage, Config.

Currently the logging is all stored in the cloud, and is the only way to get any reporting about the internal state of your application out of it when it's deployed. Currently you have to download these logs to read them. When you are developing locally, logging is per instance - in the cloud it is per application.

The config has a number of settings that define the application - some of which can be changed while the application is running (e.g. Number of Servers).

Local storage is isolated so it's not shared between servers, it's not session based, and can be blown away at any time, so don't expect it to be there when you come back twenty minutes later.

Currently there's one data centre in the US, but they are looking at adding more in different countries - especially for compliance, but also for failover. When you deploy to multiple servers the deployment is fault aware, and so will ensure at least some of your servers are in separate racks, etc.

Last note on debugging these locally - sometimes the storage system can start up and report that it's ready before it really is ready - usually just restarting the debug session will resolve this - this is mostly a problem when you a worker role that starts up and attempts to read from a queue that hasn't spooled up properly yet.

MSDN Ramp Up - or - this is a great free resource on Microsoft Learning, providing you with a whole bunch of revision material around a few of the MS exams - I spent an hour going over a few of the items on here in preparation for:

MS Exam 070-536: Microsoft .Net Framework - Application Development Foundation

I passed! Woo-hoo! The only thing I guess I didn't really like was the whole "now spend some time telling us what you thought about each question in the exam" - I didn't know whether I'd passed or failed at this point, let alone which questions I'd messed up, so didn't feel I could comment properly… Also, in the Prometric survey, I wasn't sure what I should put for the "How far did you travel to get to the test centre today?" question - "Less than five miles", because I'd wandered up to the top floor from the exhibition hall, or "More than 60 miles", because I was in Spain, not London?

Overall highlights: I can build services, and apparently know about threading and application domains, but need to work on serialization - oh and if they'd actually asked me any questions on mailing, I'd probably have done better in the "Interoperability, Reflection and Mailing" section than I did.

SOA304: Building RESTful Services using Windows Communication Foundation

REpresentational State Transfer provides us with a uniform interface to interact with services:

  • POST: Creates data
  • GET: Retrieve data
  • PUT: Updates data
  • DELETE: Deletes data
  • GET operations can be cached - there should be no side effects to a get.

PUT and DELETE are idempotent actions - it doesn't matter how many times you call them, the same thing will happen each time.

With WCF you can map methods to URIs and verbs, using the new attribute WebGet() - e.g. WebGet(UriTemplate = "/{id}") decorating the method GetOne(string id)

PUT, DELETE and POST need to use the WebInvoke(UriTemplate = "…", Method = "POST")

The REST toolkit for WCF is now available.

WUX405: Common ASP.Net Production Issues and How to Avoid Them

Go visit Tess's website for all the goodies.

The main topics covered where:

Performance issues:

  • Low CPU - you're waiting on an external resource or you have a lock.
  • High CPU - Busy server, infinite loops, etc.


  • Recycling server - By default this happens are 20 minutes of idle time or 1700 minutes (29 hours), when the web.confg changes, a directory is renamed, or about 15 aspx files have been changed - check your Antivirus activity
  • Exceptions - in timers or finalisers will bring down the process
  • Stack Overflow - This is the end of the line, you can't do anything further here.
  • Fatal Execution Engine Exception - the address details in the log are useful - basically your code has managed to get somewhere it shouldn't be able to go - either a bug in the CLR or a managed heap corruption - native code writing out of the buffer.
  • Out Of Memory - Again, the application can't recover as there's no more space to recover into - on a 32bit server you'll start hitting OOM when you have about 800MB in Private Bytes or 1.4GB in Virtual Bytes.

You can (and probably should) also log the Application Lifetime Events to get more information on app restarts.

Once again: Do not prematurely optimize - test, monitor, trace, etc to find out where your issues are.

Session State - be aware that this is retrieved on every page request even if you don't use it - so if you're storing a large object in the session, and you're using SQL Session State, you're now serialising and de-serialising this large object on every page request, even if you're not using it on that page.

On this topic, take care with what you are serialising - a 1MB dataset takes about 15-20MB during serialisation! So look at using a dataset surrogate - derive from dataset, override the Serialize methods, and store what you need.

Filed under: Conferences, Tech.Ed

Tech.Ed Day 2 Roundup

Posted 06 December 2008, 11:23 | by | | Perma-link

DAT203: Learning the Entity Framework

In light of the whole "LINQ to SQL is dead, long live LINQ to SQL" issues floating around at the moment, I'd taken a look at EF a few weeks ago, and found that it did address some of the limitations I'd started to come up against in LINQ to SQL - such as multiple references to the same table (E.g. an author field and an editor field, both referencing the Users table - in LINQ to SQL these came out with rather ambiguous, unhelpful names, but in EF I can edit the relationships and call them "Editor" and "Author" - handy).

One thing that had been confusing me was the concept of the Set - I'd not really worked out what the Set objects were for and what they should be named - clearly the default of EntityTypeSet wasn't ideal - however pluralising the set tended to make sense - the set "SalesPeople" contains entities of type "SalesPerson"; "Customers" contains "Customer"; etc.

The inheritance model in EF is also quite nice:

  1. One Table for multiple classes: use a discriminator column - e.g. ExpiryDate column with a value in the past creates an Expired Item.
  2. Table per Type: The table has all the fields required for a lookup.
  3. Table per Class: This would probably end up with duplicated data - e.g. Address data.

The architecture of EF is layered, and you can access it from any layer that you like, from the entities right down to direct database access.

In version 2 stored procedures will be properly supported.

Other nice features in Version 2:

Model First: You can model your objects in the design surface, and generate the database from the model.

Lazy Loading: It's been added, and you can toggle it on and off as required.

Unit Testing: There's been a lot of work with the community to ensure that this is all testable.

MBL201: Windows Mobile Smackdown!

How many mobiles can one person have synced with OneNote? Clearly quite a few. Anyway, this was mostly a selection of cool demos of things you can do with an HTC Diamond Touch Pro (because it has an accelerometer) and other phones (that don't), and so my notes were mostly a list of URLs:

  • MyMobiler - Remote Control your mobile from the desktop
  • TinyTwitter - If I could keep my Facebook status up to date, I guess this would be useful to me
  • DashWire - An online dashboard for all your mobile use
  • GRemote - this is one of the HTC Diamond ones - control the mouse on your desktop using the accelerometer in your phone.
  • SlingBox Mobile - if you've got a slingbox, you can access the content on it over the web on your phone…
  • Imagination - These people are doing some very interesting things with "Augmented Reality" and the like - see their Invisible Train for example.
  • Fake Call - get out of meetings nice and easily - schedule a call in the middle of it, and away you go.

TLA326: Web 2.0 Goes Game Development - XNA Game Studio

This was a walkthrough of the new Platformer Starter Kit that comes with XNA Game Studio 3.0 - my main take home was the message that you should create your objects/types as "Drawable Game Components" and then the engine will call LoadContent, Update, Draw, etc on them for you - keeps your main Game class fairly lightweight.

DVP02-IS: An Agile Talk on Agility

This was an interactive session run in an Agile style - so we started by coming up with a list of questions (the Back Log), ranked them by priority, and started discussing them for 15 minutes, checked for completeness, new questions, re-prioritised, rinse and repeat.

Stack rank: float most important issues to top - the order is the priority - there are not multiple items at the same level.

Q) How long is this going to take/cost and how many people will we need?
A) Assumes we know all requirements up front.
T-shirt sizing estimates: XL is broken, need more of a conversation, but gives an idea of size. Large = 2/3 weeks, Medium = ~week, Small = few days, XS = few hours.
Doing this gives you a better idea of how much you have to spend. If you have an idea of cost you can change priority - something uber important that's going to take 4 months and mean you're not going to get 6 other features, might not actually be that important.
Need trust - getting into the first iteration generally wins the project.
Fully stack ranked: not grouped, order is priority.

Q) Does this work with fixed price contracts?
A) Becomes a series of smaller fixed price contracts - that either side can cancel.

Q) Time slicing between support and new development?
A) Ideally a developer is either on or off the development team - ROTATE. However if something happens such as the CEO/Client comes in and says "you must all work on X": It should be explained that the original quote was an estimate, not an absolute commitment. The CEO/Client must be made aware of impact - you can change/scrap the current iteration if needs be, if the dialog is there between the development team and stakeholders.

Q) Does this work with fixed resource bids?
A) Pre-agile: Profit by change request (obviously dishonestly) - lock in to contracts with no deviation. Alternatively, tell them the actual cost, but give exit conditions up front: we'll deliver something every 2-4 weeks if you like it you pay for it, if you don't want to pay us any more then that's fine, you get what we've built so far.

Q) How do you deal with a late discovered design flaw?
Probably caused by a new feature. Do not like to put "redesign business layer" as a backlog item - it's probably not true anyway - estimate for work should include redesign work - may become lower priority again. If not feature based, it's probably a newly discovered requirement (performance/scalability/reliability). Spikes must be time bound. If business decides to add a new thing right now, you can choose to throw away all current work in the sprint and start over: prefer small iterations as reduces waste in these situations; however that's up to you.

Q & A

Should review estimates each iteration, as customer needs that information to properly prioritise.
Planning: Iteration ratio: 2 weeks = 4 hours; ~month = ~2 days. Also be aware that you have an iteration tax: check-ins, builds, client meetings, etc are going to take the same amount of time in each iteration, and will eat into the iteration time.

Filed under: Conferences, Tech.Ed

Tech.Ed Day 1 Roundup

Posted 04 December 2008, 23:19 | by | | Perma-link

Well, these are only nearly three weeks late, but better that than not at all - and I've written most of them up now...

Having been organised, and registered on Sunday, I was able to take a leisurely commute in to Barcelona, check out my route, and then have some free time at the convention centre - which I put to good use by going to the Hands on Labs and doing the ASP.Net MVC lab - I've been playing around porting this site to the technology, so it was only once I got to exercise 4 that I really learnt anything new. My only real complaint with the lab was the "voodoo magic" of some of the set-ups - for example, why was the site in the forums exercise loading /Forum when it should have been loading the default controller first - checking the "default" default.aspx page I saw that had be changed to perform this redirect instead - it would have been nice to have that called out.


This focused quite heavily on Visual Studio 2010 - including some elements not announced at PDC, so yay!

The standout demos for me where:

  • Architecture Analysis: At first glance this looks a lot like some of the things coming out of NDepend - graphical representation of dependencies, etc
  • Sequence Diagram Generation: Most handy - I see the value of these, but have never really drawn any - generally sticking to Class Diagrams and Use Cases.
  • Testing: Some fairly big changes coming here. The VS For Testers allows you to open up a test plan, and start going through it - while you are doing this, VS is recording a screen cast of what you are doing, as well as the state of the machine the application is running on (usually a Virtual Machine of some kind). Once the tester finds a bug, VS will create a bug issue in TFS, attach the video and machine states to issue, and allow it to be assigned to a developer. The developer can then review the video, and step through the code at the point of failure - no more "Works on my machine"!
    • Lab Management: As an addition to the testing, the management of the testing labs has been greatly improved for your long suffering System Administrator.
  • Many more snippets: I've not really used these all that much as I have ReSharper and its Live Templates, but some of these look quite handy - lots of HTML based ones for example.
  • Config Transforms: There's no getting away from it, there are settings in the application config file that are platform dependent, no matter how hard you try - with Config Transforms you define a build configuration, and part of that can include transformations to the config file - by default this includes ensuring that debug="true" is removed in release builds.
  • SharePoint Development: A new SharePoint Server Explorer has been included in VS. It can talk to remote SharePoint setups - you no longer need to run VS on a server. VS will also now properly keep track of all assets added to the solution, and generate the packages for deployment correctly.

TLA201: Introduction to F#

My first breakout session, and I go to something designed to melt my brain. F# is Microsoft's functional programming language offering running on the CLR - I've been reading up on this mostly via Matthew Podwysocki on the few take-homes I had were:


Like var in C#, but it's static. Use the mutable keyword to change the value - this is deliberately ugly so that you don't do it very often.


Pipelining, allows you to compose operations as you go along, piping the result through each successive operation.

fun ->

Defines a new inline function.

The "Extract Method" refactoring was quite clean though - select the block of code you wish to make a method, hit [Tab] to indent it, and then add let [functionName] parameter = in front of it, and you're done.
For asynchronous programming (one of the strengths of a functional, immutable language) you wrap it inside an async{  } block, and can then call Async.Parallel and Async.Run.

WUX312: Web and User Experience/ASP.Net AJAX

A good overview of the different flavours of web development from Microsoft, from straight web forms through what Stephen Walther calls "AJAH - Asynchronous JavaScript And HTML - a.k.a. The Update Panel" all the way up to ASP.Net AJAX with jQuery and ASP.Net MVC.

Some of the nice new things are Template controls - declare them using $create, and then use placeholders like {{title}} to replace data.

It was good to see someone else talking about accessibility for a change - Stephen pointed out that both FireFox and IE8 support ARIA, and it's also a lot better in ASP.Net 4.0 - the control adaptors for example are built in, rather than being an optional extra.

Another useful titbit - the ActionResult of an MVC control can actually be a JSON object Smile

Filed under: Conferences, Tech.Ed

Sporisms - Advanced Creator Techniques.

Posted 11 September 2008, 16:33 | by | | Perma-link

Some of these I'd found myself, but the rest are too good not to pass on, gleaned from the new Creator Tutorial Videos (Vehicles, Buildings and Painting), within Spore's Creator tools, there are a number of keyboard based tools and toggles that you can use.

Creation Tools

 The following modifier keys work in build mode

 Ctrl+z  Don't use - causes Spore to crash, use the Undo/Redo buttons instead
Tab When you mouse over a part, this will bring up more morph rings, that either allow you to rotate that part around all three axes, or effect the parts appearence along that axis.
Ctrl When you are moving a part, this will allow you to move the part vertically, regardless of the parts it is attached to.
Shift When you are moving a part, this will allow you to move the part horizontally , again, regardless of whether that part remains attached to the rest of the building.
Alt This will allow you to copy a part, and all parts attached to that part (obviously you are charged the full price.
Mouse Scroll Scrolling the mouse wheel when the pointer is over a part will uniformly resize it.

 Painting Tools

The following modifier keys work in paint mode

Alt Puts the cursor into Eyedropper mode, to pick a swatch from one area to use elsewhere.
Ctrl This will allow you to paint all the models of the same type, for example all identical windows.
Shift This will allow you to paint an entire unit (e.g. a whole block, door, window) in one click, instead of having to click on each area of the item (e.g. two wall blocks and their trim).

Before pressing Alt, toggle one of the following modes:

3 The eyedropper only picks up colours - select the texture first, then use the eyedropper to load that texture with the colour in use on the building.
4 The eyedropper only picks up textures - the order is less important here, as changing the colours doesn't effect the texture selected.
5 Default - This will put the eyedropper back into texture and colour picking mode.

Before pressing Ctrl, toggle one of the following modes:

1 This will allow you paint, for example, ALL windows, or ALL trim throughout the model.
2 Default - This will put the modifier back into single type mode.

I hope you find those as useful as I do.

Filed under: Games

Visual Studio 2008 Service Pack 1

Posted 19 August 2008, 11:54 | by | | Perma-link

So, there are lots of exciting new changes in VS 2k8 SP1, two of which have already made me very happy, and one of which also helps:

The two that really me are in the Source Control Explorer window:

  1. Local Path is now blue and underlined - that's right it's now an explorer link that will open up Windows Explorer with your mapped path - no more "Select local path, Ctrl+C, Windows+R, Ctrl+V, Enter" for me, just "click".
  2. Add to source control - This dialog by default now lists the files you can add to source control from the currently mapped local path, with existing files hidden - hooray! That's one of my main issues with TFS fixed Grin.

And the other change? They've updated the Visual Studio Icon to include the 9 in a box, so in a list of running programs (start bar, program lists, Alt+Tab windows) it's easy to tell at a glance which is the VS 2k8 version and which is VS 2k3.

Filed under: TFS