# Monday, December 22, 2008

We’re working with a couple of companies right now who are gearing up to shipping their products. They’re very different products in very different spaces, but there are a number of issues they have in common:

1. What exactly is it that we’re going to ship?

Technology businesses often get lost in the feature list. You don’t necessarily need to ship everything first time out of the door – especially that stuff you’ve only just crammed in at the last minute.

Make sure you know exactly what value everything brings to the end user, and be ruthless about cutting stuff that looks like bloat. You can always add it in later, but you’ll never be able to take it out again.

2. And how are people going to get it?

If your product runs in the browser, then you’ve got a relatively easy life. Because installers are hard. Really, really hard.

On the plus side, there are plenty of guidelines to follow (there’s good information here and here for the Microsoft stack). If you haven’t been planning for install (and upgrade) since the very beginning then it isn’t too late, but it is going to be more difficult.

The art of installation comes in three parts:

i. Prerequisite management (the hardest bit)

ii. Getting the bits onto the disk, and letting the right users access them

iii.  Updating the bits when you have a change

Make sure you’ve covered all of these in your installation process, right from the very first release – especially your update strategy. v1.1 will come frighteningly hard on the heels of v1.0.

Testing is then the key – you’re going to need a wide range of test environments (virtualized, naturally), just for installation. Every user that downloads your trial software and has a lousy installation experience is a lost customer; don’t skimp on install/uninstall testing.

3. When they’ve got it, are we sure they’re going to know what to do with it?

Have you invested in “getting started” and “how to” documentation? What about a walkthrough video? FAQs? A web forum? A web forum that you used during your soft-launch/beta testing to seed some user-generated content? Who’s looking after your web/email support? Do you need to run “getting started” webinars – like salesforce.com do?

None of that is very expensive, but it makes a massive difference to your users’ first experience of the product.  Oh – and make sure it is all available to people just trying it out, too.

4. And, is it likely to work?

You can’t test enough – but you can waste an awful lot of resource testing “known good” (or “known bad”). But, whatever your process, you can’t ship-test a moving target. This may sound stupid, but until you stop changing the code, you can’t ship. Stop. Stop now.

Right. You’ve stopped. Now – you need to work out when you’re going to stop fixing bugs. Not finding bugs. Fixing them.

Every bug you fix increases the chance of you creating another bug somewhere else. And testing will find bugs – especially beta testing. Have a process for investigating, prioritizing and then deciding whether to fix.

Don’t fix a bug at this stage because it is easy to fix; fix it because it will seriously impact on your customers. Remember you’re trying to stop doing anything else to the product. Including bug fixing.

I know this all seems pretty obvious, but I think we sometimes lose sight of the obvious when we’re in throes of shipping – especially shipping for the first time. Which brings me to…

5. You have to ship

You’re not going to make money/get investment/get sold without shipping. Companies have done so in the past, but that’s not going to happen in the current climate. Well, not often…

posted on Monday, December 22, 2008 10:57:02 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] Trackback
# Friday, December 05, 2008

Turns out that writing a virtualizing panel (like VirtualizingStackPanel) is quite difficult. There are some good examples out on the web to give you a start (like here) but there turn out to be several further problems to overcome.

1) You have to deal with repositioning the scroll offset when the viewport and extent change relative size

That’s relatively straightforward – when you recalculate the viewport and the extent, you just need to scale by the relative changes: e.g.

_offset.X = (oldOffset.X / oldExtent.Width) * newExtent.Width;

2) You have to deal with focus handling, or ListBoxes (and other containers) won’t work properly

This is the most common problem with the existing examples.

By far the easiest way to do that is to realize one extra item off the beginning and the end of the visible area in each direction, and update your offsets accordingly. Don’t forget to check for the boundary conditions, where you’re already at the zeroth or (Count-1)th item in the collection.

3) Don’t forget that your panel can reach zero size, and may have infinite extent

Dealing with the infinities in the Measure() pass can be tricky. Don’t forget to check for them when it matters.

4) What about the case where you’re using it in a “non-virtualizing” manner

Sometimes, your VirtualizingPanel gets used in a non-Virtualizing context. You need logic to work out that there isn’t, in fact, an item container generator in play, and fall back on simple measuring of your InternalChildren. It should be possible to share your Arrange pass, though.

To help illustrate these points, I’ve hacked up an example virtualizing panel called EqualStackPanel. It behaves exactly like a stack panel, but fits the stack items to the available height/width of the container, depending on its Orientation. By default, it will try to fit all the items in the available space, but you can specify an alternative number of ItemsToDisplay, and it will fit exactly that many, and scroll to fit the remainder.

This isn’t production-hardened code, use at your own risk, your mileage may vary etc.

Ythos.EqualStackPanel.zip (17.49 KB)
posted on Friday, December 05, 2008 2:36:11 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] Trackback
# Wednesday, December 03, 2008

Over recent months, I’ve had the pleasure of working with a number of startups and developing technology businesses. It is exhilarating to spend time with someone passionate about their technology, and determined to see it succeed, whatever the environment; that makes it very satisfying to get involved and help drive these businesses forward.

In the process, I’ve had a lot of “over the beer” conversations about what you need to get a software business bootstrapped these days. The answer is, of course, “it depends” – but there are a few common threads. The principles apply equally to a backroom startup, an MBO or a research spin-out; the degree of formality, or initial cash requirements might be different, but the underlying message is the same.

If you’re going to take the plunge, these are the 5 things I think are most important.

1) Decide who you’re going to work with

You’re going to go through the peaks and troughs together. You need to have a strong relationship, and share a vision. But you don’t want a monoculture – you have to challenge each other and offer complementary skills. A technology business is a technology business. You need both aspects covered.

2) Get some basic infrastructure in place

You need good email and collaboration, web presence, telephone answering, mobile telephony, computers and internet access. Virtualize as much of this as you can (i.e. everything) – there’s no point in having on-premises infrastructure these days. It is expensive and has a tendency to consume maintenance  time that would be better spent on product development.

3) Get to a revenue model, quickly

Understanding your technology is important, but understanding who is going to pay you money, for what, and why is even more important. You haven’t got a business without that. But be prepared to throw away your first idea – don’t chase a market that should be there, but isn’t.

4) Plan to get product to market as soon as possible, but no sooner

Part of getting (3) right is testing your proposition in the market place. This is a very scary step for most people in technology businesses – there’s always something you can do to make the product better; there’s always some competitor who seems to have a killer feature you don’t. Have the courage of your convictions – build enough product to deliver on your value proposition and get it out there.

5) Work out how you’re going to support your customers

From the moment you talk to your first potential customer – even before you’ve signed them up – you’ve got to manage their expectations and give them a great experience. Work out how you’re going to do that for the whole life cycle of your product. Happy customers are your best resource, especially early on.

You can get to this point by spending only a few hundred pounds, working out of a home office, maybe only at evenings and weekends (the “midnight entrepreneur”).

When you’re there, and you’ve got a few customers, you can start to think about your scale-up cash requirements, and putting together a proper business plan for the angel networks or VC funding. You’ll have taken a lot of risk out of the equation if you’ve got real paying customers, product and a revenue model that you’re looking to scale in a substantial market, rather than a great idea that has nothing concrete behind it.

posted on Wednesday, December 03, 2008 7:08:48 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] Trackback
# Tuesday, November 25, 2008

We're going to be running some free seminars on bootstrapping a business over the next couple of months.

The format will consist of 4 or 5 talks of about 10 minutes each on an aspect of starting up (or kickstarting) a technology/software business, such as business planning; funding; turning technology into product; and selling. We'll then open up for discussion.

If you're interested in either attending, or speaking at one of these seminars, or have an idea for something you'd like to include in the conversation, then get in touch with us at startup@ythos.net

posted on Tuesday, November 25, 2008 4:34:59 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] Trackback
# Monday, November 24, 2008

There's another great article (in an excellent series) introducing WPF from the point-of-view of the Line Of Business developer. It makes a compelling case for WPF as a highly productive environment for data-based applications (one to which I wholeheartedly subscribe!).

This is a particularly interesting one, because it addresses the ListView - a much underestimated control. Anecdotally, we are told that a reason for LOB developers resisting WPF is the lack of an in-the-box grid control. Now, of course,  we have one - but that is no reason to reach for it as a knee-jerk response to the need for a bunch of data in a tabular form. In a great many cases ListView (or even ListBox or ItemsControl) is your friend.

Why might you want to choose one or other of these controls?

ItemsControl is great if you have no need to maintain selection state, and you have <1,000 items or so (depending on the number of visuals in your item). By default it uses StackPanel as its ItemsPanel, and so you get no virtualization of the visuals. However, you can choose to use a VirtualizingStackPanel instead. The only limitation there is that you have to handle your own data-virtualization for truly humungous data sets, to avoid bringing it all into memory.

As of 3.5SP1, using VirtualizingStackPanel as the underlying items panel, you can also get all the goodness of container recycling.

ListBox is just like ItemsControl (it is, of course, derived from it), and has exactly the same limitations and advantages - but also includes support for selection. It uses a VirtualizingStackPanel as its items panel by default, but you can (if you wish) dispense with virtualization and go for a basic StackPanel.

ListView layers on a bunch more "common-controls-alike" functionality - but you are still responsible for dealing with ultra-large data sets yourself.

These three are all pretty similar in the approach they take - each adds a little more functionality than the previous, building on the same plumbing.

DataGrid is a different beast entirely. Although it is still geared towards displaying broadly tabular data, it is engineered to enable a "drag-and-drop" RAD experience for displaying that data in small-to-very-large data sets, with good performance characteristics and minimum demand on the developer - while maintaining high levels of customization. The big wins come when you are dealing with a view model you don't control that is delivering you potentially very large amounts of data, and need a quick virtualization solution.

However, if you have the time, then rolling your own ViewModel that does the data virtualization can pay dividends in the long run.

I'm not arguing against using the DataGrid - it has its place in the toolbox. But don't hammer in a nail with a screwdriver, or drive in a screw with a hammer. And I'd always argue for using the simplest tool that can possibly work.

posted on Monday, November 24, 2008 3:22:50 PM (GMT Standard Time, UTC+00:00)  #    Comments [1] Trackback
# Tuesday, November 18, 2008

Rico has just posted an excellent blog about some of the architectural decisions he's taken for Visual Studio 2010 and beyond.

It is well worth a read, not least because the questions and decisions made apply well beyond VS, to the software all of us build. Have you got a memory consumption hot spot? Are your extensibility points appropriate to the ecosystem you live in today, rather than the one you designed for 2-3 (or more) years ago? Are you taking bets today that will see you through to the other side of the economic cycle? Will you be better positioned than your competition when business picks up again?

posted on Tuesday, November 18, 2008 6:32:13 PM (GMT Standard Time, UTC+00:00)  #    Comments [0] Trackback
# Monday, November 10, 2008

While lugging a regular laptop around PDC, I was wishing I had a smaller, lighter model to take in to a conference, use on a plane or train, or whatever. Something I could slip into my existing laptop bag without adding crippling weight, and that would be capable of running Vista with reasonable perf, on a decent-sized screen.

Eventually, I decided to get a MacBook Air (but with the standard HD, rather than the 64GB SSD), then partition it half-and-half for MacOS X and Vista. I'm only leaving MacOS on there because I don't have any other Macs to play with - so you could just repave the entire thing if you wanted.

One thing about the Air is that Apple doesn't support 64bit Vista on it. But while it doesn't support it, that doesn't mean that it doesn't work! There are a couple of things you have to do to make it work, though.

First - follow the standard BootCamp instructions to get Vista installed from the 64bit media.

However, when it comes to installing the drivers and so forth, insert the MacOS Disk 1. You can't run setup.exe because it checks the hardware and refuses to run. So, start a Command Prompt as Administrator. CD your way to the Boot Camp->Drivers->Apple folder and run BootCamp64.msi instead.

That will install almost all of the necessary drivers - apart from the video card. But don't worry, you can download that from here.

Again, this isn't supported, and Your Mileage May Vary, but all seems well - all of the magic Mac keys are supported, the multitouch pad etc.

posted on Monday, November 10, 2008 5:28:10 PM (GMT Standard Time, UTC+00:00)  #    Comments [1] Trackback
# Thursday, November 06, 2008

Despite the challenging economic conditions, it is still worth considering a startup, if you've got the idea, the market and determination and ability to see it through.

There are a whole lot of pitfalls, though. That's the reason why most startups fail inside their first year, even with a healthy global economic outlook. One of the main reasons Ythos exists is to help entrepreneurs and their organizations identify those pitfalls and bring together the right business and technical skills to execute successfully, and come out the other side with a better, stronger business, well positioned to take advantage when the situation improves.

Guy Kawasaki has a couple of excellent blogs about the top 10 lies told by entrepreneurs and VCs. On the entrepreneurs' list, number 9 is particular apposite - "We have a proven management team." The reality is that we may all have been successful doing something in the past, but we're not fighting that battle this time around: the more support and advice you can get, from people who've been through the mill, the greater the chance of success.

To that end, Microsoft has created a new program - Microsoft® BizSpark™ - which is designed to help out in this way.

Here's what they have to say about it:

"Ignite your startup by enrolling in Microsoft® BizSpark™, a new global program designed to accelerate the success of early stage Startups.  BizSpark provides fast, easy access to current full-featured Microsoft development tools and production licenses of server products; professional technical support from Microsoft; and connections to a global community of business experts who can help guide you through the hurdles of growing your business. Microsoft BizSpark's requirements are minimal, and there are no upfront costs to enrollment. So get fired up and visit the Microsoft Startup Zone to learn more!"

Eligibility requirements for startups are minimal: If you're a privately held company building a software-based product or service (even using open source code), in business for fewer than three years, and with less than USD$1M in annual revenue, you're in! To actually join BizSpark, you must be sponsored by a BizSpark Network Partner.

We're really pleased to say that Microsoft have selected Ythos as a Network Partner for this program - you can read our press announcement here.

As part of our activities around BizSpark, we'll be publishing a whitepaper some time in the next few weeks about some practicalities of starting up and developing a new technology business. We want to develop this into a conversation with people who have an interest in the challenges facing technology SMEs over the next few years.

And if you've got a great startup idea, then don't hesitate to contact us - bizsparkenquiry@ythos.net.

posted on Thursday, November 06, 2008 1:24:38 PM (GMT Standard Time, UTC+00:00)  #    Comments [3] Trackback