Really not happy at all.
Sunday, October 17, 2010
These aren’t similes, but they’re often taken as such. I don’t think I’ve worked on a project that hasn’t mixed up at least one of these pairs. Sometimes it takes a heap of suffering before you realise what you’ve done…
Estimates vs. Commitments
The estimate is how long you say it’ll take. The commitment is when you say it’ll be done by. These are not the same thing.
Quite apart from catering for resource levelling, adding a sickness / holiday buffer, catering for pre-sales / training requirements / all the other stuff, you probably shouldn’t be shooting for a point estimate anyway. Ideally you make a range-based estimate, and aim your commitment at a fairly high confidence interval within that (bearing in mind even 95% means you are missing your dates 1-in-20 times). Mistaking these concepts can, alone, be the root cause of all your delivery problems. See Software Estimating (McConnel)
Domain Invariants vs. Validation
If you put all your validation in your domain model you probably just made them all domain invariants. Congratulations. Now try and implement ‘god mode’, privileged system operations, or special-case this one screen where the logic has to be different…
Validation is often highly contextual. What’s valid in the context of one transaction (one screen) may not be in another, so sometime you’ll have to accept the reality that some validation belongs to the operation, not to the domain. Eagerly promote all validation to domain invariants at your peril.
(This is one of the things that scares me about frameworks like Naked Objects)
Business Owner vs Single-Point-Of-Contact
Critical to have a single business owner, yes? So we can just have one person to ask all our questions to? Wrong.
The business owner is the owner of the project, and the arbiter of the decisions. But that doesn’t let you off the hook from talking to all the other stakeholders in the project. They may, and often will, have very different opinions. If you can’t keep them all happy, the owner decides, but if you don’t even ask them you’re relying on your owner to be the single source of all domain knowledge. That’s a fairly dangerous road to be walking down, even before your owner flips out due to project-overload and goes postal in a feature workshop. Canvas more than one opinion.
Friday, October 01, 2010
Here’s the scenario: you face an uphill battle to regain some kind of presence in a market where you’ve failed in the past, and now battle the huge incumbent advantage of another player. Do you:
- Come up with an innovative strategy to outflank the incumbent, find a niche or play to your own unique strengths?
- Copy exactly what they’ve done. It worked for them, right?
Well, er… it seems to me a lot like Microsoft did the latter. With Windows Mobile 7 they’ve done a great job with the UI, the developer experience looks pretty good, using the cloud as a back-end is starting to make sense, etc… but on features alone it’s kinda hard to see why anyone would favour one of these over an iPhone – they’ve picked exactly the same model:
|Windows Mobile 7
|Side-loading of apps (not via app store)
|Potentially, if carrier wants to
|Corporate (restricted distribution) apps
|Flash in browser
|No (nor Silverlight)
|3rd party support available (for OEMs, mind)
|Background apps / multitasking
|Optional, depends on H/W 
|No (w/o rooting)
Why no Flash / Silverlight in browser? Various Microsofties and MVP’s have tried to tell me it’s a technical limitation, that Silverlight(phone) and and Silverlight(browser) are non-overlapping functionality sets. Whilst that’s true, it’s also B.S.: this is – as in Apple’s case – about control. Rich browser apps are a side-loading vector: if you can run a fully-functional GUI app in the browser, the monopoly of the app store goes away.
Microsoft’s gamble of course is that the consumer market is less about tabular feature comparisons, and more about marketing, branding and emotion. And to a certain extent they’d be right, but that’s why Apple went out and bought the Liquid Metal process. So it’s an uphill battle there too.
Most importantly, unlike Apple, Microsoft don’t make phones. So it’s crazy to attempt (as they are) to follow the ‘own the customer experience’ model of Apple, when they don’t actually own it at all. They can specify the hardware to an extent (and have done), but they’re not a vertical: the manufacturer has a stake here too.
Of course Microsoft’s previous model sucked. They provided a platform, left the experience up to the end-vendor, and what we ended up with was the same tired old Today screen for years and years (with the recent exception of HTC). So no-one wants to go back there. But that’s exactly the Android model, and it seems to be working pretty well for them.
With Android users get a different vendor-specific experience on different phones, and with a partner model that’s a good thing. A Sony should be different from an Samsung or whatever: you buy a Sony for the Sony brand, not the freaking OS. And provided the search bar and maps goes back to Google that seems to suit everyone involved just fine. Backs mutually scratched: it’s the partner model, working how it always should have.
So Microsoft’s approach seems neither fish nor fowl. They plan to compete with Apple on Apple’s terms, whilst Google takes their own partner model and shows them how it’s done. They desperately needed to change something, but I think it was the software, not the business model.
(Oh, and the really funny thing: Windows Mobile 6.5 isn’t going away – it continues to be Microsoft’s ‘Platform for Corporate Users’ – basically because of the current sidebanding limitation. Microsoft have said they’ll consider this later, but…)
Summary: Even if you think you know what you're doing, it is not safe to store anything in a ThreadStatic member, CallContext or Thread...
I love PowerShell, and use it for pretty much everything that I’m not forced to compile. As a result I’ve got fairly competent, and people h...
Look, it’s really not that hard. Programs are still in the same place, in %ProgramFiles%, unless you need the 32 bit version, which is in...