A while ago, I made a presentation about ‘Improved software testing using Visual Studio and TFS2010’. I thought it would be interesting to put it on my blog too.
A while ago, I asked a question on Stack Exchange Project Management about how to use the Kanban board for very small tasks. Let me explain what I mean about small tasks:
We do development of some products (web-applications) which are used by our clients. Some clients use our generic products, and some others have a customized version. Mostly in the -week before release- we get several test-run remarks from our client. Those are (mostly) some small things like some CSS tweaks, some formatting, changes in the list-orders and so on.. Nothing big..
I was struggeling about how to translate those issues to our Kanban board. Do I have to create a ‘post-it’ for every issue? If yes, I suppose it will take longer to create a post-it, attach it to the right column, let the dev fix the issue and then let him move it to the testing/done column. Another thing is the board overload.. Ok, you have the WIP limit some columns, but in the end all the done items are there, and the board will look very overcrowded. Also the WIP of the ‘selected’ column is less than the number of items to fix.
So, how to handle situations like this? As I really want to visualize the issues and have a reference to the Kanban board.
I found the answer on Joakim Sunden’s blog. (Thanks to Pawel Brodzinski for the link). The concept he explains is to have a dedicated log for such tasks. The only thing in this log is an issue ID (wich can be the TFS workitem number, or a task-management/bug tracking tool ID). The ID is crossed out once the issue is fixed. If you keep this log close to your Kanban board, you have a clear overview of the open and fixed issues. The other nice thing is that you can easily move items to the Kanban board which do need more work than initially thought.
Personally, we did choose for a project approach to group our issues. Each project has a column, and this colum does only contain a list of issue ID’s. You could also create columns for each individual person in the team. It’s up to you to decide. If someone is working on one of the issues, you can add a sticky to the correct column on your Kanban board with some information about issue fixing of product X/Y/Z
We can also analyze the issues list. A lot of the issues are created because the product did fail to deliver the actual value the customer was waiting for. By collecting the data, we can get to the root cause of the issues, and we can find a way to reduce the number of such items. This gives us more resources to focus on delivering a good product.
We are using this approach for a while now and it seems to be working well! I’ll keep you posted about the evolutions we make with our Kanban board and the issue list! Thanks for reading!
Now that we are using our Kanban board for a while, it’s time to do some analytics with the visualized information on the whiteboard. Kanban is not only about visualizing your process with a bunch of post-it’s, you can actually do a lot with those “post-it’s”. What I will try to explain in this post is how you can define the lead & cycle time of your items on the board. That way, we can provide some time-related information to our customers about how long it will take to make a particular feature and how long it will take from ‘request’ till ‘delivery’.
When you use the Scrum methodology to deliver new features to your client, it’s clear that your feature will be ready by the end of a sprint (in normal circumstances). That’s because it uses a time-boxed approach. Using Kanban however, you don’t have any time-boxed iteration. That way it’s quite hard to tell the client when the request will be accomplished.
First of all, what’s the defintion of a lead time and a cycle time? And also, what’s difference anyway?
This is the time needed to get your feature ready. In Kanban, this is the time from when your item is added to the backlog till your item is live. So the clock starts when the request is made and ends at delivery.
- The date as when an item/feature is added to the backlog = the request date
- The date as when an item enters the ‘todo’ column
- The time each person spends on anthe item
- The date as when anitem is ready/live
Using these 4 measurements, I will be able to determine the lead and cycle time of our board.
Note: I’m not quite sure about the time as when the item is ready. Is it really ready when the feature has passed the acceptance phase? Or is it really ready when the feature is ‘live’? Any feedback is really appreciated!
In a next post, I will try to explain how you can improve the lead and cycle time using my personal experiences. Thanks for reading!
A while ago I wrote a blogpost about why scrum didn’t work for us. Some of you did suggest me to use the Kanban methodology instead. This would be a much better suit for our team. I did a lot of research of what Kanban really is, what the best practices are and how to implement this in our team. I will tell you in a few steps how we did this..
First of all, what is Kanban? Well, Kanban is a method to visualize the development work flow and the work in progress. Kanban has 5 principles:
- Visualize the workflow
- Limit WIP
- Manage the flow of work
- Make process policies explicit
- Improve collaboration
Using these aspects, you can highlight any bottlenecks in the development process. You have a visual overview of the things which are happening in your team, so you can guide it. Perhaps change the process, change the WIP limits, ..
Kanban is an approach to change management. It isn’t a software development or project management lifecycle or process.
A kanban system is often designed on a big white-board used to reflect the workflow. Different color cards are used to show different types of work. This could be a task, a user story, a bug. There is a more detailed description of the task written on each card.
The first thing I had to do is reflect the development cycle to columns on the whiteboard. Pawel Brodzinski made a very interesting blogpost about that. Using his guide, I created my first-ever Kanban bord. This is how our ‘version 1’ board looks like:
Note that the columns seem to reflect some kind of waterfall style process mapping. Well it isn’t. The Kanban board reflects all phases an item must go through in the development cycle. It encourages small independent user stories to be developed in little pieces. The columns on the Kanban board don’t represent hand-offs between team members but more or less the state of what’s the feature in during that time in its development lifecycle.
As you can see, we also use some Kanban queues. Those are a small inventories between two processes to create the appearance of instant availability.
Some notes on our board
- How did we define the WIP limits? Trial and error.. There is no science which will tell you what’s the best WIP limit number. It depends on your process, your team capacity, ..
- We will not continiously deploy. We keep a list of features/bugfixes in the ‘ready’ column, and the PO decides when there is enough ‘buzz’ to make a commercial feature release/bugfix release.
- High priority is a special ‘swimlane’. If there is an item there, mostly a bug, the developer is obliged to pull that item when he is ready for some new work.
- There will be a montly retrospective meeting. In this meeting we will discuss the board, check if the colums are still good and if there are other remarks.
- The queue will (mostly) be fed by our weekly prioritization meeting.
Why is Kanban better than Scrum (for us)
- First of all, they are both process tools. They both help us to work more effectively.
- The biggest difference is that Scrum is iterative based and Kanban not. This was a problem for us as with Scrum, we never released what was planned in our sprint.
- We went from PO driven development to a combination of PO driven and sales/client driven development.
- We handle critical issues much faster that we used Scrum, where you have to wait till the start of the new sprint.
- We can prioritize our items so important things go first.
- Developers have more motivation (maybe because Kanban is less prescriptive?)
- It’s easier to work on multiple products. If we want, we can even use a different swimlane for each product.
What will change?
- Other (bigger) post-it’s with more information to visualize. The current post-it’s only have a brief description of the ‘todo’, but I want more information on it.
- I also want the start/end date and the time spent on the task visualized. I would like to make some stats to define average lead time (starts when the request is made and ends at delivery) and cycle time (clock starts when work begins on the request and ends when the item is ready for delivery)
- Investigate the possibility of using swimlanes for user stories and the linked user story tasks.
- Kanban cards are now colored by type. Like: a feature, a bug, a task, .. Perhaps we can use the colors tho define which type of work. Like: core development, configuration, design, marketing, .. ? (any suggestions on that are welcome!)
- The outline of the sub-columns needs to be smaller, or maybe dot-lined. Now it’s hard to see the general ‘flow’.
Some interesting links
- Kanban vs Scrum Minibook
- Overview of what Kanban is
- One day in Kanban land
- Noodling on Kaban (4 parts)
- Work in process limits, revisited
- When iterative development causes problems
Thanks for reading and I’ll keep you posted when something changes in our Kanban story!
Last week, Brian Keller released the Visual Studio 11 Developer Preview ALM Virtual Machine along with 6 hands-on-labs. You can read more in the blogpost he made about it. I definitely wanted to try the new features that were introduced with Visual Studio 11 and Team Foundation Server 11. So how easy can it be to just download the Virtual Machine Brian made, fire it up and discover all this amazing stuff.
Just perfect, only one problem for me. I don’t have a running Windows 2008 R2 machine which I can use to run the Hyper-V image. What I do have is a VMware ESXi server with some space and performance left. So.. How to run a Hyper-V image on a VMware ESXi? It’s quite easy, and I’ll explain how this can be done.
Step 1: Download the Hyper-V image
That’s about 12Gb, so it can take a while if you don’t have a fast internet line. When all parts are downloaded, just click on the first item which is an exe file called: “VisualStudio11ALMDeveloperPreview.part01.exe” This will start a WinRar unzipping, and it will create 3 folders and a file. What you need is the file “BL_WS2008R2SP1x64Std.vhd” in folder “Virtual Hard Disks“.
Step 2: Convert your .VHD to .VMDK
What we did was a manual conversion from the vhd file to vmdk. We did this using a small utility called Winimage. The conversion is really simple. Select ‘Disk->Convert Virtual Hard Disk Image’. After that, select your .VHD file, choose the type of image you want to make (As this VM will only be used for the labs, I took a fixed size one), and the last step is to select the output destination. Here we go, the conversion will start and it will take quite a while to convert.
Step 3: Upload your .VMDK to the ESXi datastore
Now we have the virtual machine in an .VMDK format, we can upload this image to our ESXi host. Once this is uploaded, we can use it as hard disk in our new VM we will create later on. To do that, you have to:
1. Start your vSphere client, and connect to your vCenter
2. Select your VMware host
3. Click “Configuration”
4. Click “Storage”
5. Look at right hand side datastore
6. Right click one of the datastore LUN and click Browse Datastore….
7. Click on the upload button
8. Select your .VMDK image and start the upload
Step 4: Create new a VM and attach the .VMDK image
The next step is to create a new VM. Just loop the simple wizard to create one. Give it enough resources (The installation guide tells me 6 GB of free physical RAM but 8 GB or more is recommended). The latest step is to remove the newly created hard disk from the list (as we already have one from Brian) and add yours, which you have just uploaded. When ready, just save your VM.
Step 5: Time to play
When the VM is created, it’s time to start it. Normally the VM should boot into Windows 2008R2 without any problems. If you see the login screen, you’re awesome!
PS: I read something that you can also convert your .vhd file using VMWare converter, but we did not try that.. If you did, just add a comment!
PS 2: As Brian just mentioned in his comment: Note that the agile project management dashboards assume that the date is Sept 14 and the time is 8 p.m. If you care about getting the right agile dashboard data then you should look for an option to disable the date/time sync. In Hyper-V this is an option under settings. If you use VMware, you can install the VMware Tool on the host machine, and then disable the checkbox ‘Time sync’ as you can see in the screenshot below. Thanks for the mention Brian!
Thanks a lot for reading and have fun playing! The credits for this post are also for my colleague Frederik Vannieuwenborg
At the Build conference this week, a new service for the upcoming version of TFS was announced. They call it Team Foundation Service. This is a Windows Azure hosted solution of a Team Foundation Server, which is pretty cool! The TFS team definitely did a great job to bring the Application Lifecycle Management features of Visual Studio and Team Foundation Server to a higher level. And from what I can say, it looks promising. In this post, I’ll describe some setup steps and a general overview of some new features.
First of all you need an account for the Team Foundation Service on tfspreview.com. For now, you need an invitation code to create an account. (If you don’t have an invitation code, I have some left. Just post a comment..) Brian Harry already made a nice blogpost about the registration process and how to add and invite users to your Team Foundation Service environment. When you finish your registration (using your Windows Live Id), you’re in the adminstration mode of the Team Foundation Service.
One tip I can give is that the gray border on top indicates that you’re in administration mode. This is one thing I didn’t notice in the beginning. I was a little bit confused when I tried to open my team project when I was still in administration mode. But after a while I got whole point.
The first thing you can do is create your first team project. You can do this by clicking on ‘create team project’. There you get a dialog where you can enter a name and a project description. You can also select which process template you want to use. The Microsoft Visual Studio Scrum 2.0 Preview 1 template is selected by default. (More about this specific template will follow in a later post) Currently it is not yet possible to add extra process templates. But I think most of us will use the Scrum template or the Agile Software Development 6.0 template.
Creating the team project only takes about one minute or less. Actually it will queue a job in the background, and the service does some jobstatus polling to show the process status to the user.
After the team project is created, you can click on the ‘My Team home page’ and you are redirected. That’s the place where all the fun starts. On top of the page you see:
- Home: where you have some shortcuts to your activites, and a link to some administration
- Backlog: where you can add your userstories
- Board: where you have a graphical overview of the running/sheduled/.. work items. There you can also change the status of the workitems.
- Source: where you have the possibility to search in changesets, shelvesets. You can lookup code, compare code with previous versions.
- Builds: where you get an overview of the build history. You can also manage the build qualities.
I spent some time on the Team Foundation Service now, and from what I experience it’s really good. It’s surprisingly easy to use and quite fast. I really like the ajaxified interface. The only things which I think will need some change are some usability issues. Apart from that, my first impressions are good.
In my next blog posts, I’ll cover some other things like the product backlog, work-items, the board, how to use Team Foundation Service with Visual Studio 2010,.. You can always share your personal experiences by adding a comment to this post.
Thanks for reading!
After installing Windows 8 on VirtualBox yesterday (mentioned in my previous post), I spent quite a while playing with the new OS. The only thing that bothered me was that I could not find a way to run the virtual machine fullscreen on my native resolution: 1920×1080. Windows 8 on VirtualBox did not gave me an option to use this resolution. Even Google (Bing) couldn’t help me. I also tried the command below but had no result..
VBoxManage controlvm “Windows 8 (name of the VM)” setvideomodehint “1920” “1080” “32”
The fullscreen issue (for me) forced me to try an alternative. As I also have VMware Workstation 7 installed on my machine, I tried to install it there, but quickly ran into this (apparently known) issue after the bootscreen:
So no luck on Workstation 7, up to Workstation 8 than! This are my steps to setup Windows 8 on VMWare Workstation 8.
This is how the installation process of Windows 8 looks like. As from what I experienced right now, it looks really awesome and superfast!
You can download the ISO from here. I took the ‘Windows Developer Preview with developer tools English, 64-bit (x64)’ Then I installed the ISO using VirtualBox as a Windows 7 x64 operating system. I assigned 1 gig RAM and 40 gig space for the OS. This method did not gave any problems at all, it works like a charm.
I also tried it with VMware Workstation, but this approach gave some strange errors about the display.
Here you go (attention: lot’s of screenshots)
Note that I used my live-login to create an account. You can also choose to create a local account, which has totally no connection with Microsoft Live.
All experiences are welcome!
Yesterday evening, I had a really great time. The Belgian Umbraco User Group (BUUG) organized a livestream to follow the keynote from the Build conference. As not all of us can make it to Build in California, this was a very good alternative! (Wich was also organized by several other usergroups btw).
At 05.00PM, we were expected at the offices of Combell at Ghent. There we were warmly welcomed by Thijs Feryn, which is really an super enthusiastic guy btw! After some food & drinks it was time to watch the keynote.. This is what I will remember from the talk:
First of all there were some demos about what they call the Windows metro style applications. Those applications use the new Metro design language which is already used on the WP7 devices. I think Microsoft is really convinced about that style of applications, as they are pushing to use it everywhere on every device. The demo applications Microsoft showed us were mostly developed by a team of interns. They were all created within 10 weeks, and developed by several teams of 2-3 developers. Those guys did some great work, and I think they will be really proud to put ‘First Windows 8 developer’ on their CV.
After the demos we saw a slide with ‘the’ change for Windows 8: The application development architecture. Which I personally think is really the way to go.
What I do find exciting is the usage of Blend in combination with HTML5/CSS. As I’m not a CSS genius, Blend will make it extremely easy to just position your HTML stuff, handle all the rotating and scaling issues without digging into CSS floats, absolute positions,..
The next part of the keynote was mostly about hardware, the speed of Windows 8, the reduced memory usage and the reduced processes. They also showed some awesome ultra-thin ultrabooks, some cool tablets, a high-end machine showing some very realistic renders.
I can’t wait to start playing with the WinRT API’s and getting to know them. As they always say, try before you judge!
Just wanted to say thanks to the BUUG and Combell for the friendliness! I had a good time.
All reactions are welcome, just post a comment.
First of all, what is MSDeploy.exe aka WebDeploy? Well, MSDeploy is a server technology that enables a publishing and deployment mechanism. It enables you to not only publish files, but also create database schemas, run database change scripts, set security and much more. If you want to know more about how to install webdeploy on IIS, just take a look at the great blogpost of Scott Guthrie.
The other tool we use is AppCmd.exe. This is the single command line tool for managing IIS 7. It exposes all key server management functionality through a set of intuitive management objects that can be manipulated from the command line or from scripts. AppCmd.exe enables you to easily control the server without using a graphical administration tool and to quickly automate server management tasks without writing code. More information can be found here.
Allright, What we gonna do?
- Create new IIS site
- Assign an application pool
- Add HTTP binding
- Add HTTPS binding
- Set require SSL
- Enable custom error mode
- Set HTTP to HTTPS redirect
- Sync the files from the source to the new site using msdeploy
- Set ACL on a specifc folder
Step 1: Create a new batch file called f.ex. ‘NewSite.bat’. On top of it, define your application variables which will be passed trough the commandline to the batch file
::The name of the remote server
::The credentials to access the deployment services (credential manager entry)
::The path of where IIS sites are located like c:/Inetpub
::The sources of your application to deploy
::The name of your application used as IIS site name
Step 2: Create a new batch file called f.ex. “PreSync.bat” where you define the AppCmd commands to perform the first 7 steps from the list above
::Create site directory
%SYSTEMROOT%System32inetsrvappcmd add site -name:%ApplicationName% -physicalPath:%IISRootPath%%ApplicationName%
::Create application pool
%SYSTEMROOT%System32inetsrvappcmd set config -section:system.applicationHost/applicationPools /+[name='%ApplicationName%',managedRuntimeVersion='v4.0'] -commit:apphost
::Assign application pool
%SYSTEMROOT%System32inetsrvappcmd set site %ApplicationName% -[path='/'].applicationPool:%ApplicationName% -commit:apphost
::Add http binding
%SYSTEMROOT%System32inetsrvappcmd set site %ApplicationName% -+bindings.[protocol='http',bindingInformation='*:80:%ApplicationName%'] -commit:apphost
::Add https binding
%SYSTEMROOT%System32inetsrvappcmd set site %ApplicationName% -+bindings.[protocol='https',bindingInformation='*:443:%ApplicationName%'] -commit:apphost
::Set require ssl
%SYSTEMROOT%System32inetsrvappcmd set config %ApplicationName% -section:access -sslFlags:Ssl -commit:apphost
::Enable custom error mode
%SYSTEMROOT%System32inetsrvappcmd set config %ApplicationName% -section:system.webServer/httpErrors /errorMode:"Custom"
Step 3: Continue in the ‘NewSite.bat’ file – As we want the ‘PreSync.bat’ have the correct parameters, we generate a new .bat file called ‘PreSyncGenerated.bat’. First we remove any existing files called like that, and create a new one with the correct parameters.
::Check if GeneratedPreSync.bat and delete file
if exist PreSyncGenerated.bat (
::Create GeneratedPreSync.bat and replace variables
for /f "tokens=*" %%a in (PreSync.bat) do call :replace "%%a"
Step 4: Still in the ‘NewSite.bat’, find the MSDeploy.exe location and check if MSDeploy.exe exists
if "%MSDeployPath%" == "" (
for /F "usebackq tokens=1,2,*" %%h in (`reg query "HKLMSOFTWAREMicrosoftIIS ExtensionsMSDeploy" /s ^| findstr -i "InstallPath"`) do (
if /I "%%h" == "InstallPath" (
if /I "%%i" == "REG_SZ" (
if not "%%j" == "" (
if "%%~dpj" == "%%j" (
::Check if MsDeploy.exe exists
if not exist "%MSDeployPath%msdeploy.exe" (
echo. msdeploy.exe is not found on this machine. Please install Web Deploy before execute the script.
echo. Please visit http://go.microsoft.com/?linkid=9278654
Step 5: Sync your application sources using MSDeply.exe. We use MSDeploy.exe to execute the AppCmd commands in the generated .bat file. Note that we skip some files and directories that we don’t want to be affected
::Sync site files
"%MSDeployPath%msdeploy.exe" -verb:sync ^
Step 6: Add modify rights to a folder (in our case ‘AppData’) using MSDeploy.exe. The permission will be assigned to the ‘networkservice’
::Set rights on AppData directory
"%MSDeployPath%msdeploy.exe" -verb:sync ^
That’s it.. What we’ve done now is create three batch files. One called ‘NewSite.bat’ which handles the MSDeploy.exe, the second one is PreSync.bat which handles the AppCmd.exe command and a latest one which is generated from the previous file and contains the correct parameters.
Now you can just run the ‘NewSite.bat’ file using commandline with the correct parameters, and your site should be deployed on IIS. Also all files are synced from the source to the destination.
I hope you enjoyed this post! If you have any questions, just post a comment and I’ll be in touch.