Curved Gauges and Running Track charts using dotnetcharting

More chart type tweaks for dotnetcharting users…

In this example, we are using nested pie to perform various tricks and output some pretty nice looking gauges – I think these rival the out-of-the-box gauges that currently ship with DNC.

Using a nested pie to output a nice curved gauge using dotnetcharting

Curved gauges in dotnetcharting, as shown in Cosmos Call Centre template

In the second example we are using the nested pie in a similar way, this time to create a “running track” chart (is there another name for these??). As always, contact us via Kicktag.co.uk if you want more info on the techniques used in this post…Running track charts created using dotnetcharting

Posted in Data Visualisation | Tagged , , , , , , , | Leave a comment

Dotnetcharting – some formatting examples and tricks

As promised in earlier posts, I wanted to try and get a few examples of dotnet charting chart formatting and tricks out there so people could see more about what this .net component is capable of. These are certainly not the greatest you will ever see but hopefully they might help get people thinking about the styles you can create using DNC.

All of these created in Kicktag Cosmos, of course. Please note that the infographic charts are simply using the chart area background image with no data points added – this becomes quite a nice way to deploy bespoke charts created by data artists.

Infographic background on dotnetcharting chart

Infographic background on dotnetcharting chart

 

 

Infographic background on dotnetcharting chart

Infographic background on dotnetcharting chart

 

Dotnetcharting column chart with brushed background and shading effect mode 7

Dotnetcharting column chart with brushed background and shading effect mode 7

 

Dotnetcharting column chart with image background and shading effect mode 7

Dotnetcharting column chart with image background and shading effect mode 7

 

dotnetcharting simple treemap built from dummy data

dotnetcharting simple treemap built from dummy data

 

Posted in Data Visualisation | Tagged , , , , | 2 Comments

RadColorPickers and jQuery

Just a very short post for anyone using Telerik controls and a jQuery-heavy web template. There is plenty of support out there to help you handle the jQuery libraries appropriately and avoid conflicting code for the majority of the Telerik controls. When we were first implementing our new template we had plenty of js issues popping up at run-time but the pointers in the Telerik forums helped us figure out the conflicting jQuery and we sorted all of the issues. On some pages we already used Telerik controls that automatically loaded the relevant scripts – and on those pages where these controls didnt exist we just needed to make sure the right script ref’s were provided.

Still after all this, we were finding that the RadColorPicker was still throwing a lot of CSS issues – randomly hiding the selection icon and showing the color options way down to the right and bottom of the screen, outside of the template main body (you can see this in the pic below).

 

Image

We couldn’t find any references to the same issue and so started to try and resolve it ourselves. In the end, a strange trick was needed in order to fix it. Simply create a dummy RadColorPicker as the very first item in the body of the page – we found that this rcp worked fine and suddenly all the other rcp’s on the page also worked fine. I guess this is forcing the page to load the relevant CSS or JS before the other content from the template is coming in. The last part of the trick was to hide the dummy RadColorPicker in a div with display:none set. This all adds a little overhead to our page, but at least this is working as intended now, and the RadColorPicker is an excellent little control.

I hope this is useful to somebody, especially those of you working with jQuery templates you may have bought rather than built yourself. If you know why this works then please leave a comment here.

 

 

Posted in Uncategorized | Leave a comment

dotnetCharting – where is everybody?

I am going out on a limb with this one perhaps, but I LOVE dotnetCharting and I am wondering why it seems like the rest of the web currently does not. I have worked with this charting software for about 7 years, since first getting into ASP.NET, and DNC has been the back-bone of my online data visualisation tools ever since. Way back at the start I reviewed ComponentOne and Dundas before getting into DNC, and in the intervening time I have tried to keep an eye on the competitor 3rd party products to see where the market was headed. In this time, Google have entered the fray, and there is even a charting component built-in to the .NET Framework now.

Some of these alternatives have great demos and some don’t; some have comparable feature sets and others only attempt 50% of the items that dotnetCharting has. But very rarely do I see an example of a chart that can’t be created using DNC. Just look at the Gallery on the dotnetCharting website, they have hundreds of charts, tweaks and variations. New versions of DNC are released on a fairly regular basis and new chart styles are included every time, so there is clearly some development still taking place. The support is also excellent so they clearly still care that somebody out there still uses the software. Let’s face it, DNC ain’t cheap and I am starting to feel that the lack of community discussion and support is diminishing the licence value.

I find surprising the lack of developer community discussion surprising, people must be out there, busy on the implementation of dotnetCharting – but it seems like the usage is in decline and the volume of discussion online in the forums, compared to, say, Telerik, is miniscule. Does anyone know why? Is there a chance that people are out there but just not sharing their experiences with the community? Lord knows that the documentation is certainly not so great as to remove the need for any posting of queries.

For now, I am going to post up some of the useful tips and tricks I have found helped me out along the way and see if I can’t encourage a bit of a revival of the DNC community. If someone smart can come along and point me toward the best online resources for dotnetcharting, or even a superior product that I am missing, then great – but until that time I will keep searching…

Posted in Data Visualisation | Tagged , , | 2 Comments

Kicktag Cosmos Q2 2012 (12.2) – we made it / lessons learned

So, much to the relief of the development team, Kicktag now has a Q2 release for Cosmos. It has been an intense period of 4 weeks or so of full-on development and so much of the functionality has been falling into place in the final few days of the sprint. We are all pretty happy with the outcome and we can honestly see a potential market-leader in Cosmos, hopefully to be achieved within another couple of releases. For research agencies wanting a self-serve DV tool now, this is the perfect time to get on board and help shape the roadmap and pick up a bargain.

During the run-up to the shippable version 12.2 everyone was focussed on the roadmap document and pushing through the last stages of several hundred hours of work. But in the final sprint I saw some exciting emergent features as the foundation of the coding seemed to be guiding us toward new functionality and improvements that were being triggered simply by the design principles we had invested so much time into in the early days.

Take for example the new features of OPAP (OnPoint Action Plans), Red Alerts, Threshold Manager etc. Now, in various previous incarnations I had run several months of custom development on closed-loop feedback systems such as these and suffered some of the worst scope-slip you could ever experience. However, when it came to implementing these in Cosmos, we saw a phenomenon you might call ’emergent simplicity’ – a beautiful thing that can happen when you realise that the design you put in place for a number of other reasons inadvertently clears a whole bunch of barriers to new requirements.

In the past, closed-loop feedback development attempts might have sprawled across a dozen database tables, procs and app classes. But in Cosmos we had so religiously repeated the mantra of keeping all complexity out of scope that we found a set of three concepts were more than enough to support these requirements. After all, if you have: 1) Data, 2) Thresholds, and 3) A submissions table – then you have everything required for most of these features. Augment them later with dynamic connections to database objects, user tables and anything else by all means – but the core coding is actually minimal and the functionality set is large.

The point is, if your design is clean and simple and you stick to that approach then opportunities pop up when you don’t expect them and genuine innovation is made a whole lot easier. So, although Cosmos doesn’t have, or aspire to have, the most complex closed-loop performance improvement toolbox on the web – it does have a light-weight, self-serve, configurable suite of tools that even a beginner can get into within 5 minutes of watching the training videos.

So, we are back to business development now, and already our first glimpse of 12.3 shows we have a few hundred more hours of (top secret) features ready to crack open – so let’s hope we can keep reaping the benefits of a clean design and see these features realised three months from now.

More info as always on kicktag.co.uk, and also on the youtube channel (KicktagDV) – where we have the first really comprehensive Cosmos pres from first principles, through advanced features all the way to price model. 45 minutes is a big ask for busy DV decision makers, but there really is a bit of everything in there. We hope people enjoy it. If you just want the deck then head to SlideShare, we should be there in the next 24 hours…

 

 

Posted in Uncategorized | Leave a comment

Gartner 2011 BI platform user survey summary

 

Results from the 2011 BI Platform review

Results from the 2011 BI Platform review

 

 

 

 

 

 

 

 

 

 

 

 

I came across this chart recently via the useful Market Research Data Visualisation discussion group on LinkedIn and thought it was worth posting. I don’t know too much about the Gartner survey but the summary chart  makes some interesting points about the BI landscape.

Firstly, why extract Ease of Use from the Composite Product Score to create this scatter? Isn’t the useability to be thought of as part of the full set of product attributes? If the two variables are not independent then the trend is already inferred, no? It’s like plotting “overall customer experience of staying at a hotel” against “customer rating of the bedroom for comfort”. Certainly the decision to represent the data this way has big implications for Tableau and for Netweaver – makes me wonder if Netweaver scores more highly on other measures which would make this chart look more favourable. I would like to see this chart with a true independent measure on the Y-Axis, such as “cost-per-user”, or “volume of sales” - maybe this is out there and I just need to look harder or pay Gartner some money. It would be worth looking at the financials to see if Composite Product Score bears any relationship to the unit sales – if not, what else drives the comparitive success or failure of these systems?

Secondly, are we really looking at “apples-with-apples” comparison? Seems strange to compare the whole Microsoft BI stack with Tableau alone, for example. Is the granularity of the platform classification appropriate? Is it a surprise to see Microsoft end up smack in the middle of the chart given the breadth of the offer?

And lastly, this chart really inspired me to take another look at the two outliers so I can re-calibrate my own thinking on these BI platforms. For Tableau to crop-up as such a clear positive anomaly it really says a lot about trends in data management, UI design and the overall user experience – for me this is really where Tableau is ahead of the game but to see such postitivity towards it also says a lot about what the competitors are lacking. Of course, the other BI solution to check out is Netweaver – I haven’t looked at this much in the past but a result like this certainly tells me there must be some important lessons to be learned by checking this out.

 

Posted in Data Visualisation | Tagged , | Leave a comment

Development Project Planning: The Importance of Good Estimation

Development projects succeed and fail based on how well the team can execute, test, and deploy the work items defined by the business. In Agile development, the full task list is defined based on the requirements documentation and stored as a Product Backlog – with batches of tasks/tickets assigned to Sprints as a Sprint Backlog. After each sprint the product owner is able to provide feedback on the progress and the development effort can be closely aligned on an ongoing basis with what the business is expecting. This approach is the great strength of the Agile model and it is clear how this approach brings benefits in any business where requirements evolve rapidly.

So at the core of running an Agile project is the ability to deliver Sprints successfully – if the development team can do this right from the start of the project then this will foster confidence in the product owner and the wider business. Too often though, sprints become over-ambitious, poorly defined or ambiguous and although the source of trouble often originates from business requirements, the development team can contribute to their own downfall during the Estimation process. If the team can really grapple the sprint definition and prove their estimates are sound with a high degree of confidence then we can see a higher percentage of successful sprint deliveries and happier product owners, as they see the overall product sticking closer to budget and timings. This article offers some pointers on how to improve estimation and therefore provide tighter control over sprints:

 

1) Estimate Conservatively

This may seem fairly obvious but developers tend to underestimate the distractions and inefficiencies that can impact on the actual work time on tasks. In many ways this entire list aims to address this point by highlighting all the reasons why a conservative estimate is often not as conservative as the developer thought.

When estimating, many developers think back to the most similar task they can recall, and remember the time taken, even applying a discount based on the experiences learned. Of course, we really need the developer to analyse, question and understand the current request rather than taking a previous item as a proxy.

There should be a contingency built in to every ticket to allow for: analysis time; time to ramp-up and ramp-down from each ticket; unavoidable inefficiency occurring during the working period; potential risk of technical issues arising; logging time and progress in the ticketing system.

2) Is the Ticket “Workable”

Encourage developers to push back on tickets that are poorly defined – never estimate the inestimable even when under duress. Be careful to distinguish between inherently flawed task requests (“build a chart tool” or “make sure all users only have access to what they should”…) and tasks that are temporarily unworkable (“please upload this file when I send it”). The tasks that are well defined but not possible to implement immediately are still possible to estimate. The flawed tickets are like a sickness to a product backlog – they can lurk in the background, failing to make it into a sprint but preventing the proper burndown on the project overall. It is the job of the PM / scrum-master to find and confront these items. But let’s assume we have a neat and tidy task at hand, with a clear test case, a good specification and a great chance of the developing getting it “Right First Time“. Let’s start the estimation.

3) Create the “Baseline” or “Happy Scenario” Estimate

This is the type of estimate that is well-intentioned but can be poorly thought-through, and without care can make it’s way into sprint-planning as a final estimate. In my approach, this estimate is just the baseline and the subsequent items need to be added to get this closer to reality. But starting here, you need the developer to imagine a completely uninterrupted timeslot where their IT equipment works perfectly and nobody is around to break their concentration. Make sure that the developer considers the QA they need to perform themselves, or the time taken to handover to the QA team. Ideally the developer will formulate a test case at analysis phase and perform this unit test themselves before marking the ticket as ready for testing in the ticket system. If the ticket turns out exactly as hoped then this is our best case scenario – let’s say for our ticket this is 1 hour.

4) Benchmark or Cross-Reference Estimates – “Planning Poker”

For increased comfort level on the precision of our estimate, arrange for multiple developers to estimate the same ticket and take the mean or modal average. If they are wildly different estimates, why? Maybe this reveals a flaw in the design of the development task. Maybe it shows the developers have differing ability levels, or just a more cautious/ cavalier approach – all of which needs to be considered by the PM. Below we look at the analysis time required in more detail. Often the PM is reluctant to double or treble that time by cross-referencing the estimates in full – so a great, low overhead, Agile approach is Planning Poker. In this game, developers hold cards with a number of different estimates (1hr, 2hr, 4hrs, 1 day, 2 days, whatever) – and when the task is shown they are asked to play the card they think is closest to the estimate. This means they are unable to influence each other and the PM gets a good insight into the nature of the estimate. If they are all the same then the PM can be confident the estimate should be accurate. If they are very different then the ticket is flawed or the developers have reached different understandings of the task. This can even work for non-colocated Agile teams by running the session online at http://www.planningpoker.com.

5) Allow Properly for Analysis Time

Analysis time is the time taken for the developer to review the task, confirm they understand it, request clarifications and then formulate a plan of attack. When this is done it should be possible to create an estimate. Analysis time happens in two phases: the first being during the estimation and the second is more in-depth, occurring when the work is undertaken. Project managers need to make a trade-off between taking a long time to fully analyse up-front and produce precise estimates, and the risk of “ballparking” the estimates and potentially adding extra analysis time at the start of each task, or carrying the risk of estimates with poor accuracy. Every project is different and the project manager (or Scrum-master) should choose a balance here that gives them the level of comfort about estimation accuracy that they need. Of course, it is important that this is communicated clearly so the developer knows what they are being asked to do - if they are asked for ballparks it must be clear that they are accountable for mis-estimation to a much lesser degree than if very precise estimates are requested.

The total analysis time is proportional to the complexity of the ticket, and will vary depending on the precision required – if you can live with a 80% chance that the time logged will be within +/- 5% of the estimate then there is little overhead to the analysis time, but you will pay it back in the mis-estimations, depending how lucky you get. If you need 95% chance that the time-logged and the estimate will match-up then there is a much more considerable investment in the analysis time. As a yardstick, you could 5% for quick and dirty analysis and 10% for more precise analysis (so add 3 mins or 6 mins to a 1 hour task).

6) Acknowledge, Understand (and tackle) the Team’s Avoidable/Unavoidable Inefficiency

Every team and every individual has inefficiency – this is not a bad thing per se, it is just an acknowledgement that there are many sources of background noise and distraction that can slow down a person’s work. Inefficiency is avoidable or unavoidable though, and it is important that a good development team has a good awareness of both and takes steps to tackle them or at least acknowledge them in their estimation.

Avoidable inefficiency is the kind of issue that has to be tackled through better management of people and can include: tardiness; lack of focus; lack of knowledge; being too easily distracted by others, even when done with good intention; attending to personal issues at work. Nobody is perfect and there is always likely to be some waste of time in everyone’s day – you can’t always control when you may get a phone call from home, or when the train is late. So make some small allowance for this and as a side-project you can aim to reduce it. Every team is different of course, but if you find there are developers losing 30 mins or more in a day to these kind of issues – this reduces their efficiency to 93% – on a regular basis, then the alarm bells should be ringing.

Unavoidable inefficiency is a term that can cause some debate – I just mean Unavoidable in the sense that this is a distraction that arises naturally from within a person’s job role, or due to the nature of the business. Being a good project manager is all about making the Unavoidable Avoidable, but tackling these issues is definitely a longer term challenge. To provide some examples, we could consider that a developer may be taken away from their task by a critical bug on another system or part of the system; or another developer may want to pick their brains for a solution to another problem in an informal way; or they may need to attend an ad-hoc announcement from the company; or just staying on top of their email backlog; and from a health, safety and sanity perspective developers should remember to step away from their workstations periodically to give their body and brain a break. Be careful here that we are not including known interruptions – such as the weekly company meeting, or lunch breaks - this time must be subtracted from the plan, and not double-counted into the inefficiency factor.

In the unavoidable inefficiency I usually find it sensible to subtract an hour per day from each developer’s schedule. With all this taken into account, it is sensible to have an extra 10-20% on any estimate to allow for these inefficiencies. If we take the middle ground then we have added 9 mins to our one hour estimate.

7) Assess and Allow for the Technicality of the Task

The PM really needs the developer to incorporate the possibility that, despite best efforts to analyse the task and provide a good baseline estimate, they find out mid-task that they hit a technical barrier. These barriers could relate to infrastructure, licencing or purely to the coding, but they represent show-stoppers from the developer perspective. At this point the developer has to limit the amount of time take to “force” the issue – this is the time they spend re-writing code or attempting a different approach. The last thing a scrum-master wants to hear at the daily scrum is that the developer was working on a one-hour task the previous morning then spent 7 hours looking for a work-around and hasn’t solved it. The developer should spend no more than 25-50% of the ticket estimate trying to resolve the issue, if the issue is within their domain – if the issue is outside their domain then they should stop immediately. This is where the scrum master steps in and escalates the problem to the relevant group to ensure a speedy resolution.

To add some sort of factor to our calculation, we need to consider both the percentage of tickets suffering from this phenomenon and the average time cost. Fortunately this should be a rare occurence, but when it hits, it can hit hard. I would suggest that only 5% of all tickets should hit a barrier like this – if an organisation has a higher incidence then the boundary parameters need to be analysed, possibly in the infrastructure or the developers themselves, if they are constantly having to amend their approach. When a ticket hits a barrier the effects can be severe – I have seen work items take up to 5000% of their original estimate and there must be more severe occurrences out there. Often the developer has to take out a snippet of code or change a class, and it works out taking 50% longer than estimated. For our example we can assume that the average barrier causes the estimate to double – so we take a 5% incidence and multiply by 100% of the estimate. This means it would be sensible to add 3 mins on to our one hour ticket (and all tickets) just to give us the contingency we need.

8) Allow for the Proper Recording and Documentation of the Task

It is always extremely important to properly record the progress and final outcome of the task being worked on. Whichever issue tracking platform you use, there is a time required for the developer to provide commentary on the task, log the time taken and generally update the ticket. You may also encourage them to provide labelling on source control check-ins and also check-in T-SQL scripts into source control or append to the tickets. Although this creates overhead, it does show a development team in control of the issues being worked on, and provides continuity should one developer need to pick up another developer’s work, as well as an audit trail of what has been done.

For a 1-hour task, a developer might spend 2-3 minutes updating the ticket system, logging their time spent and doing any other tasks relating to the closure of the ticket. This type of overhead can often be overlooked – meaning developers rush this and the quality of information in the ticket system suffers because of it.

9) Ramp-Up and Ramp-Down Time

In between tasks there are a number of things that happen while the developer is reaching full productivity. First of all the human brain takes a short while to get fully concentrated on the task, especially if the current one is very different from the last – and at the end of the task it takes a little time to re-focus on the “real-world” tasks such as updating the ticket system and preparing for the next task. On top of this, the developer must prepare their tools – perhaps moving between visual studio and sql ms, or accessing a remote server. Hopefully these issues are minimised by ensuring the business is providing the developers with easy access to systems and high-quality tools for the job. For a simple one-hour task, we only need to add a minute (approx 2%) to the start and end of the curve to alow for this.

So our simple 1 hour estimate has acquired an extra 23 mins due to factors that may be invisible to a PM who is just blindly accepting happy scenario estimates. In a 40 hour sprint the team would only achieve 29 tickets instead of 40 baseline tickets. This is valuable information when it comes to finalising the estimates and defining the sprint backlog – there are in fact two options at this stage: include the extra overhead within each estimate and record our 1 hour estimate as 1hr 23min; or record the estimate as 1hr and incorporate the  23min into a “buffer” of overhead within the sprint (so either 29 tickets that completely fill the 40 hour window, or 29 hours of tickets and 11 hours to cover overhead). The PM must ensure that one (and only one!) of these options is taken – if they double-count then the team would attempt 21 tickets at 1h23 and also set aside 11 hours of overhead, leading to an underachieving sprint.

I hope developers and PM’s might benefit from considering the items on the list and how they influence the estimation process. Mis-estimation is one of the leading reasons for failed or unsatisfactory sprint deliveries, and confronting the challenges here should lead to tighter estimates and some deeper insight into productivity at a developer, team and organisational level. In the next post I will look in more detail at the composition of a sprint and how we can formulate a backlog that the team can be confident of delivering and demonstrates to the business that great progress is being made.

Posted in Agile, Development Project Management | Tagged , , | Leave a comment