14 Jul 2011

Client Demos

Some tips and considerations I find that work well when doing product/website demos for clients:

  • Gauge their technical understanding – losing them in technical baffle is not cool – however if they have a little technical understanding, talking to them like a monkey is not good either.  Find a balance and remaining confident in what you’re proposing.
  • Demo a use case they can relate to and/or are currently doing – The flip side to this is that you have to understand their business processes and do some research to put yourself in their shoes. What’s the problem and pain points their encountering now and how is your demo going to help them?
  • Freestyle vs Rehearsed – I lean towards freestyle. Make sure your demo is functional and have a rough story to cover your main points but be flexible. From my perspective, this allows me to change the course of a demo to tailor it more towards the clients needs, and from their perspective, it portrays your confidence in your solution and your understanding of their situation.

These items are quite generic and can be used pre project for demoing products to clients (i.e CMS engine/core) and post project (Final site implementation with custom client modifications).

 

13 Jul 2011

Estimating

Today, I have spent quite alot of time estimating development for new project work. Here are two tricks we use to help validate our numbers.

Evidence Based

For a long time, we have been recording our time accurately against projects. Recently we have gathered this information into a high level analysis spreadsheet which breaks down the actual time spent on projects into logic units (Analysis, Dev, Test, Install, Support, etc). This resource has become very valuable when estimating new project work in many ways:

  • It can be used very early in the sales process for finding similar projects we have completed for quick indicative estimates. 
  • It can be used for verifying new estimates against previous similar projects. 
  • It can be used for justifying estimates.

Because projects inevitably vary in size, we took the analysis a step further and calculated the above units of work as a percentage of the total project. Viewing the data in this way provides a fairly good formula for estimating a complete project time based only on development numbers.

Estimate Poker!

This one is a bit more fun! – Basically it’s where the tech lead of that estimate draws out the tasks and places an estimate against each one. Then you essentially hide your column of estimates and get another developer to fill in estimates for each task. Then its showdown! Hopefully the final numbers are similar but the “How Much!?” and “What about” questions are a great way of keeping everyone on their toes.

 

 

12 Jul 2011

Release Management

Basically "Getting it ready for installation". Essentially in our web development projects, we deploy changes in two types of releases:

  • Incremental – building a package of only files which have changed.
  • Full – Every file that makes up the site, regardless of whether it has changed or not.

In development and test, we use web deploy through VS as much as possible to push changes to servers. However this is not an option for UAT / Production servers which are in the domains of our customers, for this we have to manually construct a code pack for installation. The building of full release packs are simple (Get Latest > Build > Copy build contents > done). Unfortunately, full builds are only really applicable at the start of “brand new” site projects (pre production) or non CMS based sites. For everything else, It's simply easier from a deployment and impact point of view to change only the files which have changed. To do this, we have to manually construct the code package with updated files.

The problem with this is: Manual = More likely to forget something! :(

At Auros, to ensure our release packages are built and tested correctly, here are some of the key items from our “ways or working” or to be official – “PROCESSES” to ensure quality.

  • Ensure all check-ins (into TFS) are associated with a TFS work item. This creates an audit of every file which has been modified for the change. This can still turn into quite a task to manage after many check-ins but with some excel wizardry and notepad++ macros it doesn’t take long to get a distinct list of file changes and extracted into a package.
  • When building the code pack, I tend to completely remove my local source folder (by renaming it to source.bak) and do a fresh GET from the server. This ensures that all contents I will use in the package are correct, and will identify if any files are missing from TFS which I previously had in my local source. A great example of this is website images – of which we have use CSPROJ folder includes which @noaveragegeek has blogged about.
  • Use a continuous integration website for developers to test our release packs. Typically, with CMS we create two websites which share the same underlying database. This ensures content and configuration (to a degree) are identical between the systems so doing a before and after test of a code pack installation is very simple to-do.

There is much room for improvement – recently I have been working on a powershell script to automatically pull files out of TFS based on the associated work item check-ins. It’s a little way off completion but already I can use this to extract a distinct file list from TFS between to changeset id’s.

So, that’s a bit of a taster of how we build release packages! .. and I’ve massively gone over my 30 minute quota for this post :(

 

11 Jul 2011

Timekeeping

We use an ASP time keeping web application to keep track of our time spent on projects. Our approach to using this application was:

  • Time must be in accurate chunks to 10/15 minutes and in the correct placement.
  • Time at the end of the week should add up to a minimum of contracted hours.

The application is a little slow, so my approach to using this system was to keep an excel “quick” log of times in the week, then come Monday, enter them into the timesheet application.

THIS TOOK A LONG TIME! By Monday, I would quite often have between 40 and 50 entries to complete, plus gaps of which I would need to search through emails, calendars etc to remember what I was doing! So it was common to spend easily an hour each week doing this!

Scale this up to an office of many people and the numbers get quite big! 

So, we decided to change – new rules:

  • Time entries can be merged. Still need to be accurate, but instead of entering 5 * 10 minute slots, we just enter 50 minutes as a bulk entry against a task.
  • We only log time we need to track. No need to add up to contracted hours.

What this now means for me: 

  • Many of my time entries where for Admin/Sales/Tech Lead stuff which simple do not need to be tracked.
  • Having many less entries and the ability to enter one bulk entry means its’ simply easier to-do this at the end of each day or as your doing the task.
  • I now only take about 5 minutes on a Monday morning to check my time and click a Sign Off button to say I’m done!

 

11 Jul 2011

Experiment - Blog Post a Day

I’m going to try something different this week – since my blog is a little quiet, I’m going to try an experiment. Each day, for this week, I am going to write a short blog post on something I did at work in that day. Hopefully, I can keep a balance of love / hate topics but I guess that all depends on what the week brings :) so the rules are simple:

  • Must write the post at the end of each day
  • Spend no longer than 30 minutes on each post

Its going to be difficult, I find blogging quite a chore and have quite a busy week (in and out of work) but hopefully, limiting myself to 30 minutes will be key! 

  1. Monday - Timekeeping
  2. Tuesday - Release Management
  3. Wednesday - Estimating
  4. Thursday - Client Demos 

 

30 May 2011

Three website features clients don't ask for

Here is a list of the three ‘features’ that I like to implement on clients websites which they likely know nothing about or don’t ask for. 

Universal IE6 Stylesheet

So it’s unfair for me to take the credit for this one as my colleague Stuart Burrows pointed me in its direction. So we are finally at the point where ‘IE6 support’ is typically a ‘non requirement’ (Performs back flips of joy!) so we can knock up some fancy designs and make cool websites quickly! Now, you just know that for some reason, IE6 will raise its head and someone (either client or website user) is going to hit this new shiny website with IE6 and its going to be rubbish! Universal IE6 Stylesheet to the rescue! This is a single stylesheet which can be implemented onto your site for IE6 users to provide a simple, plain, readable, friendly view of your site in IE6! It just works and it works very well! 

Open Search

I’ve never been a massive fan of the search add-ons you can get for browser’s to search your site, but that’s because I’m a developer. But, users love this stuff! And it’s hard to justify not doing this as it takes all of 10 minutes to put together the xml definition for this to work. Personally, I think this can work great for intranet sites were google is not an option! But even on internet sites, having the ability to search within a site at any time from the browser is quite powerfull. Unfortunately, IE9 does'nt think this is the case and has made it more difficult to implement open search on their browser.

IE9 Jump Lists

So these are quite new and glossy! Obviously, only usable with windows and 7 and ie9 but are very cool! Maybe this is a very ‘developer’ type thing but demo’s very well. Another reason to spread the love for IE9! 

 

What I like most about these features is that it benefits the users whom want to use these, and for those who don’t they won’t even know they’re there. Development wise, they’re easy, non-intrusive and quick to implement. When doing a webex/demo for a client, it looks pretty slick having a pinned item on your taskbar to load their site from. And when using FF or Chrome, running a search on the site from within browser tends to go down well!

5 Feb 2011

Introducing GSMock

This is a little project I have been working on in my spare time over the last couple of months. Its driven from trying to solve a real problem I've encountered on a number of projects, plus it has acted as a nice simple project for me to try out some new cool stuff on!

The Problem

Working on a website which needs to integrate with a Google Search Appliance as its search solution? Need to verify your search uri is generated correctly or test frontend (xslt) transformations on results? Don't have a GSA to develop / test with?

The Solution

GSMock - A mocking utility which enables search responses to be mocked for search requests from your own application.

What can it do?

Its very simple, this list summarises the functionality:

  • Map static xml result files to GSA collections.
  • Map xslt stylesheets to GSA frontends.
  • Serves transformed and raw xml results based on the presence of the "proxystylesheet" parameter.
  • Contains a page for testing configuration.

Download

gsmock.codeplex.com - Contains v1.0.0 configured in a sample site, source and documentation.

What's next?

  • NuGet availability - I've created the build scripts for the nuspec package, however I need to publish up to the main feed. (sneak peek available here)
  • Add a few more unit tests to get better code coverage.
  • Enable JSON responses
  • Enable more dynamic search results.

Feedback

This is my first open source project - I'd love to get some feedback! So far, its completely driven by my own requirements. I'd welcome any comments, criticism or feature requests! 

30 Jan 2011

Watching a file for changes with PowerShell and using a Filter

Yesterday, at DDD9 James Boother showed a super simple PowerShell example of monitoring a file for changes. The example showed using the Wait parameter on the GetContent cmdlet.

I can see some real world usage for this however, it my instance it would be very useful to implement a filter on the content into this.

So, (with a drum roll!) - I have written my first piece of "useful" PS script!

So its not clever at all, and contains no custom code - however being able to filter is a massive bonus for me. My initial thoughts of where I can use this are:

  • Monitoring Log4Net files generated from web applications.
  • Monitoring and relaying information added to IIS HTTP log. Looking back on these logs is always painful - however being able to have a real time log showing filtered information (by IP for example) will be very useful! (but not yet tested!)

So big thanks to James for a great talk yesterday. 

Keep tuned for some updates soon!

Update - 03/02/2011

So it seems my ideas around Log4Net and IIS logs didnt work out to well.

On further reading around Get-Content - specifying the Wait parameter invokes a check every 1 second on the file which is fine, however with both IIS and log4net, it seems the process that writes to the file does not release it handle on the file until closure of the application pool. Therefore whilst the files are being written to, Get-Content will not pick the changes up until the process writing to the file releases its handle.

 

 

30 Jan 2011

DDD9 Review

Yesterday, I attended my first DDD event at MS in Reading. What a day! NoAverageGeek and I left Bristol at 6.45 and arrived at around 8.40 after a breakfast stop!

It was good to see that there were a variety of sessions available and not just .net orientated talks. That said, we ended up spending 5 out of the 6 sessions in Chicago 2 which I would say was mostly .net talks! I've not completed or seen the session feedback forms yet, but here is my quick overview of how I think the sessions went and key points (KP) that I took away.

 

Collections Deep Dive - Gary Short

This was a great talk to start the day of with - immediately a session relating to stuff I use on a day to day basis! A real eye opener of not just how .net collections work behind the scenes but also the performance items to consider when choosing a collection to use.

KP - Always instantiate List<T> with capacity if known.

 

App Development with NHibernate, FluentNHibernate and CastleWindsor - Chris Canal

I think I somewhat misunderstood the purpose of this session. I have knowledge of NHibernate but was hoping this session would be a primer on the 3 products and how together they can be used to solve real world application problems. Combined with the problem of Chris not being able to use his own laptop, the session was very code heavy and not really what I was hoping for. That said, I got the impression from the other people in the room with better knowledge of the products that Chris was providing some good information on integrating the three.

 

Functional Alchamey .. Keeping C# D.R.Y - Mark Rendle

This was a good pick-me up session! Started off with an overview of functional programming and then jumped straight into applying D.R.Y with C#. Really good samples were shown in the session. Mark is great joker (.. I mean speaker!) he really impressed on how these "simple" tips and tricks he showed (and is making freely available!) can keep your code D.R.Y.

KP - https://bitbucket.org/markrendle/functionalalchemy

KP - Mark mentioned something called "Reactive Extensions" for linq quires to execute queries on demand rather than at last minute at enumeration time. It was very much a passing comment in his talk but this is a problem I've faced a couple of times so I'm looking forward to trying this out!

 

Is your code S.O.L.I.D - Nathan Golyn

This session really hit a home run for me! I'm not an devout follower of S.O.L.I.D and didn't event fully know what it meant before this session! However am a strong believer in writing clean, simple, and maintainable software of which Nathan showed that S.O.L.I.D is the science and framework behind this belief. There were great examples showing how each pattern can be applied to an existing code base. 

 

From .Net to Rails, a devs story - Colin Gemmell

An interesting concept - A .net dev at a .net event talking about why he uses ruby over .net! I'm so glad I attended this - I wouldn't say that I've come away thinking "I want to jack it all in and start using ruby!" and this isn't what Colin wanted either. I have however got a jump start understanding of Ruby and how it compares to .net. 

 

Introduction to PowerShell - James Boother

This sessions did exactly what it said on the tin! I have spent many a time trying to learn PS and just getting lost with demo's and tutorials on the net. James didn't just talk about what PowerShell was but about where its come from and how its evolving. Given all the sessions I attended, this is the one I picked up most KP's in and want to start trying our straight away! 

 

Overall, this was a great day! Kudos to the organisers and speakers for all their time and effort in planning the event. To MS also for letting the DDD guys use the centre for the event.

4 Jan 2011

TFS Work Item Search in Google Chrome

Most of the time I use Visual Studio for creating and managing work items in TFS. However, often I find the need to quickly review or modify a work item when visual studio is closed, or i'm working in a different workspace. Typically what happens is someone comes to my desk and asks "can you quickly take a look at work item 123".

I use Team System Web Access as a web alternative to working with work items outside of visual studio. There is a useful work item search located in the top right of the application, however I take that a step further using a custom chrome search!

I simply type tfs [space] 123 [enter] and I am taken directly to the work item in TSWA.

Tfsworkitemsearch2

The Setup

Its very simple. 

Add a new search engine to the search engines list with the following information:

Tfsworkitemsearch1

Search