Sunday, July 27, 2008

The danger of a sunny day

Today, although it's only 5pm, has been a motivationally difficult one.  The sun is out, the wind is low and it's warm.  Perfect for sitting in the garden reading the Sunday papers or heading off to the golf course.

The latter option is incredibly alluring since I've finally allowed some consistency to creep into my otherwise variable game.

But I've resisted the urge, so far, and have kicked off my application design "process".  Process is a bit grand for firing up Visio (my design tool of choice at the moment) and laying down some boxes, lines and text to highlight the key components and high-level interactions.

But, it worked and I now have my starting point for the next iteration for the design which will expand each of the boxes into slightly more detailed components, again with interactions mapped.

I also have an end-to-end view of the actions (user and application) involved in the application.

I'll continue the iterations until the objects, and their interactions, are identified and any "how do I do X" or "should I do X" type questions have been answered.

Having reviewed the 5 tips for focusing on your MicroISV and decided that I occasionally need to break tip 2 (but I've done a bit of tip 5 today) the big question now is, iteration 2 or 1st Tee then iteration 2?

Thursday, July 24, 2008

Letting the prototype complete its job

I've finished looking through the prototype and decided to let a good prototype complete its design task - to model the application design as it stood - and retire.

My prototype application was a good fit for the application I was designing but the design has moved on and I don't want to fall into the trap of trying to push it forward into a live environment.  It has completed its job and now I need to focus on the application I will eventually ship.

One part of the prototype will live on though, the common class library was designed to be useful further down the line and isn't prototype, or application, specific.  So all the string handling, logging, exception handler helpers and numerous other useful bits of processing will go forward.

The POP3 Client and Server will be shelved in favour of buying in an e-mail handling library.  The SQLite based data store will be rewritten to improve performance and usability. 

The user interface morphed from C/Win32, C++/Win32, C++/WTL and finally C++/MFC in various searches for the best fit.  It will be stored in the tips & tricks directory I keep since there are some useful snippets in there.

On a different topic, still programming related, I'm having a real hoot reading Raymond Chen's book The Old New Thing.  Some of the things he recalls really strike a chord and I never thought reading about Windows API's would make me laugh.

Tuesday, July 22, 2008

It's Alive!

Twenty minutes in the debugger and the prototype lives again.

Note to self: When implementing the changes recommended by VS2008 to improve  string security remember to read the online help more than once to make sure you don't switch the String Length and Buffer Length parameters around!

Anyway, problem solved.  The prototype is running fine, complete with working POP3 Client & Server and SQLite based storage.  Now I can work on the design and determine what, if anything, I can carry forward from the prototype.

Thanks for the comment Bob, you were right - tomorrow was a better day.

Sunday, July 20, 2008

Progress? What Progress!

I've had on of those PC days and I'm giving up for the evening.

Having played around with Visual Studio 2008 for a while I decided port the prototype over.  What a bag of fun that was!

I started with my common class libraries which went fairly well.  This took around an hour from start to finish and involved dealing with all the warnings and errors which crop up during those first post-port builds.  Nothing major appeared and I even spotted a couple of issues in the string class I hadn't noticed before.

With that done, I moved to the prototype application itself.  The initial build went reasonably well and I just had a couple of minor items to correct (fallout from the changes to the common libraries).

I fired up the app. and it failed - DLL missing.  But not one of mine and not even one on my system - DWMAPI.DLL.  Turned out to be a Vista desktop component and a complete red herring.  The real problem was more elusive.  A newer function, recommended by VS2008 as a replacement  for something I was using, strcat_s ("safer" strcat) was helpfully resetting the unused portion of a string buffer from the nicely initialised 0x00 to 0xFE meaning I needed more checking in the string class for concatenations.

Having fixed that one the application again built fine but refuses to show the main window.  A round of debugging later shows that a thread is looping on a bit of previously innocuous code. 

To cap it all I can't get Audible to kick off a download so my Son has gone to bed listening to an older story rather than his next Discworld instalment.

I give up!

Wednesday, July 16, 2008

I'm Empowered

After wondering if my application to join the Microsoft Empower programme would be successful I was pleased to find out today that it was.

How did I find out?  Big box with lots of DVDs arrived.

Time to take off Visual Studio 2008 Express and install the full Professional edition to start familiarising myself with the tools and facilities.

Tuesday, July 15, 2008

Prototype review

I’ve blown some more dust off the application prototype and started to look at it alongside the original design and the new list containing features/ideas/design elements for the version I’m developing for release.

I was surprised at how useable the interface still felt after being on the shelf for around a year.  It didn’t take long to re-familiarise myself with the way the application worked and I was quickly reviewing why I’d made decisions affecting not just the user interface but also the core components. 

The prototype has a working POP3 server, and partner POP3 client, embedded within it which I used to try out various data storage mechanisms.  The final version used a data store based around SQLite which I’m keen to continue using for the application. 

I’d also been working on a string class which brought together various bits of string handling functionality, coded over the years and which I’d used to stop myself blowing a gasket when working with the myriad of string types and handling functionality in Windows.  The string class is a bit of a throwback, being loosely based on the IString class contained in the IBM ICLUI (later Open Class) library but I’d expanded it to include Unicode handling and some interoperability with the COM string classes.  There’s also some REGEX processing and a dusting of SQLite specific functionality in there. 

A quick glance at the prototype code showed that the time spent on commenting wasn’t wasted either.  A large amount of commenting explaining not just what the code was doing but why it was doing it.  Commenting is something that I see skimped on quite a bit on a day to day basis but I see it as essential to readability, understanding and maintainability of code. 

The prototype also has a very well advanced logging class which meant I could fire it up and watch what it was doing.  Logging is one thing I always implement in whatever I write.  The benefits far outweigh the small amount of time required.

Sunday, July 13, 2008

Weekend work

The weekend is one of those times where you can, usually, get a clear run at some things.

I started yesterday by trying out the Express Edition of Visual Studio 2008 (C++) and in general it was fine. I found it a little slower than previous versions I'd used but that was the only bad thing I have to say about it at the moment.

Being the express edition means that a lot of things are missing, but this version will be useful for acquainting myself with the new environment until I get hold of the Professional Edition.

Yesterday was also taken up with a search for a library which would provide the SMTP/POP3/IMAP and SSL functionality I need. I looked at a few options but kept coming back to the Chilkat range. If it does everything it says on the tin then it will be a good fit. At $289 (approx. £135 at current exchange rates) for a bundle containing the company's range of libraries I can save myself an enormous amount of work. I'll download the libraries later and try them out.

One of my big tasks at the moment is to complete a new website for my company. This will be a hub site where I'll continue to promote services whilst I'm developing software and later it will link out to the site for the application. It has been badly in need of a refresh and I'm still on target for a month-end live date.

One thing I needed were some stock images for the site. After a brief search I came across the iStockphoto site. There is a huge range of images on that site and they are all brilliantly priced.

Since the website will only need small images I can obtain them from iStockphoto for around $1 each. A quick search came up with a number of suitable images for the website. These have been purchased and I'm working them into sample pages in Paint Shop Pro Photo X2 to see how they work with the new layout.

I decided I needed a break this afternoon. After rising at the normal Sunday time I was in front of the PC for a while, finally deciding to stop for breakfast at midday.

I enjoy non-technology tasks to clear my mind and give me time to think about what's next. Today the vegetable patch got some attention (5 hours worth) but it's finally looking great and hopefully the next batch of seeds will turn into something other than slug food. It's amazing how a few hours of work like that can not only clear your mind but energise and relax you at the same time.

But, break's over. Back to those sample pages for the website.

Friday, July 11, 2008

Buying in components

As a developer I like the challenge of writing new components and like nothing more than seeing a working, tested library which I can re-use and continue to tinker with for some time to come.

Now that I’m looking at developing a commercial product I need to decide if I’m going to develop the entire thing from the ground up or buy in some components which will jump start the project.

One of the core components I need is an e-mail library which supports SMTP, POP3, IMAP and SSL. My current prototype for the application already has a functioning POP3 Client and Server library which works very well. But, I would now need to work on adding the other functionality required.

So, I’ve decided to use a simple algorithm to determine if I should buy-in a tested, and supported, component or develop my own.

IF (DailyChargeOutRate * EstimatedDaysToDevelop) IS FAR GREATER THAN (CostOfComponent) THEN BUY-IN ELSE DEVELOP;

Using this algorithm already shows that buying-in a $300 component with a good track history, large customer base, all the functionality I require, no run time licence costs, no restrictions on commercial release and good support makes far more sense than developing from scratch.

It’s an algorithm that’s been used to good effect at home, with some minor tweaks:

IF ((HourlyChargeOutRate * HoursToCleanTheHouse) * DislikeOfHouseCleaningFactor) IS FAR GREATER THAN (CostOfHiringACleaner) THEN HIRE-CLEANER ELSE PICK-UP-BRUSH;

By allocating a few hours of earned income to this I save myself what could end up being weeks of development time.

Microsoft Empower

Since I took the decision to use the Microsoft Empower Programme to obtain the necessary development tools for my application, and to set myself some deadlines, I’ve moved the process on by completing the necessary product profile, completing the enrolment and paying the first year’s fee.

I now just need to wait to find out if the application has been successful.

The fallback position, should the application not be accepted, will be to simply buy a copy of Visual Studio and grumble a lot about Microsoft.

In the meantime I’ve downloaded the Express Edition of Visual Studio 2008 which I’ll install and look at over the weekend.

Thursday, July 10, 2008

Dilbert

One of the highlights of my e-mail day is the arrival of the Daily Dilbert. So I though I would add the Dilbert Widget to the blog to share what really happens in a large development shop.

Setting deadlines

Working with no deadline lets you take a lot of time over minor details and means you never have to deliver. Where does the push to complete something come if you don’t know when it has to be ready?

With this still fresh in my mind I’ve made a couple of decisions (hey, this decision making is getting out of hand):

  1. I’ve committed to delivering a new website for my existing business by the end of July. This will get a large bit of work out of the way and allow me to concentrate on development.
  2. After spending time looking at some great logo ideas from the talented Jim Stankard at Mosiac Retouching I’ve fixed on one. This will now move from a “draft” version to full shiny version and we’ll start looking at fonts and other aspects of design.
  3. I’m joining the Microsoft Empower programme. This will give me certain timescales to work to. In six months I need to announce the new product on my website. In 18 months I need to announce the ship date and in 24 months the product has to be available.

The Empower dates are further out than I think I’ll need, given that the main product already has an outline design, feature list, first prototype, a name and registered domain names (yes, I’ve been thinking about this one for a while). But then again, this is a software project!

Product(s) selected!

Yes, I know I was looking at six product ideas with the intention of whittling it down to one to focus all my attention on, but two of the ideas are in the same area and should have enough overlap to share a portion of the code base.

Sharing the code base will also make me think about more generic development to allow some components to be re-used in future developments.

So, I’m moving into the e-mail related software market!

Wednesday, July 9, 2008

Development tool decision

After an hour or so looking at the features in Visual Studio 2008 and mapping them to what I need in a development tool the decision was made.

Standardise development on Visual Studio 2008.

Now I just need to work out my preferred method of acquiring it.

Do I simply buy the licence or sign up for the Microsoft Empower programme.

Empower will get me the licence, and much more, but I would need to agree to deliver a product within certain timescales.

My current thinking is that this will be a good thing. It's another driver to keep going.

So, development tool picked but another decision to make.

Tuesday, July 8, 2008

Development Tools

Having been a user of Microsoft development tools for a long time I will need to decide which version of the toolset to use for my own developments.

Do I stick with trusty old Visual Studio 6, basic but works, Visual Studio .NET 2003 which I've been using more recently or do I opt to upgrade now and build in some future proofing.

I had been playing with the Express edition of Visual Studio 2005 but came away less than impressed.

Visual Studio 2008 is now available and it ticks all the boxes, including the development tools for Office which at least one of the product ideas would use.

The cost for the Professional edition is a bit annoying although I qualify for the upgrade version which reduces this somewhat. Although it would be a purchase which allowed me to standardise on one product whilst giving me access to newer technologies like the Windows Presentation Foundation (WPF) which I've been playing with for the past few months.

Maybe it's just time to let go of version 6.

A new identity

Since I already have an established business I'm lucky enough not to be starting a Micro-ISV from scratch. I already have a lot of the infrastructure and tools in place to hit the ground running.

But, the current company image doesn't fit with where I want to go so I've started a re-branding exercise.

Initially this will be limited to a new "image" in the form of changes to the company logo and stationary along with a new website which is more targeted and able to provide a better first point of contact for customers.

The first part is the logo. I'm working with someone new to me but who is throwing ideas around which are completely different to what I was expecting or where I wanted to go with the logo. But, and I think this is important, I'm looking to move away from my current branding to something much fresher and more appealing to a much wider audience so a completely different take on image is brilliant.

The second part, the new website, is starting to take shape. I've settled on Joomla as the driving force behind the website and I'm looking through a large number of template designs. I think I've cut the favourites down to just two so I'll wait for the final logo before picking one. Content wise I've documented the content I want to add and the navigation so it's just a matter of sitting down to write the textual content and find suitable images to accompany.

The development of the new website will happen whilst the current one is in place and both currently are "live" - although you need to know where to look to find the new one.

Sunday, July 6, 2008

Picking that first product

Almost every software developer I know has, at some point, had an idea for a new application.

Almost every software developer I know has done nothing with that idea.

One or two of those developers still want to develop that idea but their day job removes the time, and sometimes the inclination, to proceed.

Coding applications which are useful to your client, in a large development department, surrounded by process and politics frequently robs you of the desire to keep coding when you get home.

I'm fortunate that I've finally managed to build up a head of steam to progress my ideas. Now I just need to pick one of them and go.

But which one?

Looking at the "Ideas List" there are six on there right now:

  • Two are developer oriented.
  • Two are business oriented.
  • Two are home user oriented.

Some have some work behind them already:

  • Two have actual working code to demonstrate the idea working.
  • Two have designs.
  • The other two are all in my head.

Picking one to start with is a difficult process. I'd better get to work on that then.

The book told me to do it

After years of talking about writing my own software for a living, rather than writing software for others, I’ve made the decision to go for it.

A number of things have brought this on, age being a major contributor. As I approach the ripe old age of 40 I told myself it was just another number, nothing special. But there is something about that number which compels to continually remind you that it’s coming and that it’s a turning point. The more you hear this the more you think about where you’ve been, where you are and where you’re going. So I thought, and pondered, and thought some more. On a personal level things are great and have been for a long time. Work life was a different matter. I’ve mostly enjoyed getting to where I am, and it has provided numerous benefits over the years, but it’s not what I really wanted to do, want to do or want to continue doing.

Writing software is my passion and aways has been. From my first computer, a Commodore VIC-20, to the three PC's sitting under my desk at home I've always enjoyed it. I enjoy the problem solving challenges, the bug hunting and fixing and developing something new from nothing. Professionally I've gone from mainframe development to low level PC development.

With the exception of one application my coding has almost exclusively been for others. That one application was a small developer tool which I used to dip my toe in the Independent Software Vendor (ISV) world. Hugely enjoyable, a lot of work and a number of surprises.

Now I want to code for me. I want to develop and sell my own software.

I don't want to be a large software development house. I'm going Micro.

I don't want to make vast sums of money, although I wouldn't turn it away, but hopefully a bit more than I currently earn.

Oh, the book that told me to do it! I'm referring to starting a blog.

The book Micro-ISV: From Vision to Reality suggests using a blog for a number of reasons. One is to help keep you focused on what you're doing.

So, I'm going to use the blog to chart progress, failures, problems and to yell at things every now and then.

If anyone out there ever reads it, maybe there will be some comments too.