The role of a product owner on mid-sprint changes


Since we deal with clients everyday and since they are the ones who give us requirements they need to understand certain work ethics. If they are our clients and if they are the ones who suddenly changes the requirements, we need to let them know, very gracefully, that these changes come with a cost.

I have been having a conversation in an online forum regarding change request and how we can incorporate them in a sprint and the following is just one of the replies that I had  from one of the experts. I thought his reply was amazing and it is worth sharing.

==============the reply starts here=============

The key is transparency, and making the costs apparent to the customer. Then they can decide if they want to pay or not.

Customer: I need X done right away.
PO: OK we can put it at the top of the backlog, and the team can start on it first thing next sprint. Do you agree it needs to go ahead of these other things here that are currently top priority?
Customer: No, I need work on this to start right away.
PO: let me get back to you in a little bit with a cost estimate for that.
PO (a little later) OK the team has scoped that work at 4 points, and I’m going to add another 4 points for disruption caused by introducing this change mid sprint since the team has to stop what they are doing and re-plan things etc. So if you need this right now, we need to agree on 8 points of pending stories to be removed from the sprint. Or would you rather put it on the backlog?
Customer: so wait, it’s going to cost me twice as much to do it right now as opposed to waiting a week?
PO: yep, that’s the cost of ‘changing horses midstream’ as it were. And we need to remove other work from the sprint to accommodate it. You need to be sure this is more important than these other things here. Do you need it that badly?

At this point the customer can make an informed decision. If not having this thing is going to cost him thousands per day, then he may still want to team to make it a #1 priority. Or he may decide that having it at the end of the next sprint is soon enough

It’s not ideal, but if something is badly needed right away, it’s pretty non-agile of the team to take the ‘following a plan’ line over ‘responding to change’.

Key things (IMHO):
1) Such change is never free, and this MUST be made apparent to the customer.
2) If in doubt, overestimate the cost of change, if you are wrong the team can pull in a story from the backlog should they discover they have capacity. Which is far better than the alternatives of unsustainable pace or undone work at the end of the sprint.
3) There MUST be work not yet started that is > the cost of the new work plus the overhead, otherwise even this is not really a viable option and your only choice would be to end the sprint early with that work undone (presuming the customer absolutely must have you drop everything and work on some dire emergency right away)
4) The customer must be involved in choosing what work is moved out of the sprint and back to the backlog, this is part of making the cost obvious and forces them to balance the priority of the new work vs what’s remaining in the sprint.

==========the reply ends here===========

Adapting to scrum

  • Being Open For Changes – Scrum framework is simple but not easy to implement unless there is an open minded people across the organization. Simple doesn’t mean easy. What sort of an open mind does it need? Well, First and foremost, be open for changes. Scrum requires radical changes as far as the process is concerned. Team needs to be independent, no one should baby sit the team, team should take control over things to be done. No one has the right to assign the team tasks, maintaining product vision by Product owner etc. Lots of them. This isn’t the case in traditional project management, You don’t have a complete project plan done with Microsoft Project! In Scrum, you take a small step towards the final goal and make necessary changes when your iteration completes at a certain time. Everything in Scrum is time bound.
  • Trust Towards Others – Senior management should trust the Scrum team. They can partially influence product owner for any changes needed in the product vision. Even the Product Owner can not assign tasks to the team. He just needs to maintain the vision and priorities for the project. He can be there during the sprint planning, sprint review meeting to see the progress and verify if the team is building the right things. How much to do in a sprint, how to do is all up to the team. That gives the complete ownership of the tasks to the team. No project manager drives the show. Scrum team together manages the show. This can just be done with trust.
  • Willingness To Understand Changes Required – Scrum framework is intended to handle frequent changes. Only during Sprint, things committed will not be changed. Before and after sprint, there is always changes proposed by product owner, management, team etc. Scrum encourages changes that refine the product. So, everyone needs to provide feedback and be ready for the changes.
  • Inspection and Adaptation – Scrum needs constant inspection, review process to understand the progress made. If anything needs to be changed, it has to be done. Team needs to adapt best practices as and when needed.
  • Honesty – Everyone in the Scrum team needs to be honest. Members need to take complete ownership and be responsible for the completeness. Members should be cross functional, non egoistic and honest in taking others work when needed. Since, no one assigns tasks, members should be pro-active in taking up responsibilities etc. Product Owner should do honest review of the progress, talk to customers and be up to date with their requirements. Scrum Master must do an honest attempt to help the team when they are in trouble. He needs to protect the team when additional changes come from upper management during sprint etc.
  • No Blame Game – Scrum Team members should not point fingers at each other. It is very important to maintain this during Sprint Review and Retrospective meetings. Members need to respect each other and be polite to each others. If we are rude in pointing mistakes, the team chemistry gets affected adversely. All these qualities in an enterprise is not easy to find. Management needs to do a considerable work to provide such environment in the first place. Company policies need to have changes to accommodate such things.

Source: internet.

How to get motherboard serial : JAVA


This is more like an extension to the my last post. The previous entry was regarding the extraction of S/N using VB script but this is for the java lovers. So here you go:


public class MiscUtils {
private MiscUtils() { }

public static String getMotherboardSN() {
String result = "";
try {
File file = File.createTempFile("realhowto",".vbs");
FileWriter fw = new;

String vbs =
"Set objWMIService = GetObject(\"winmgmts:\\\\.\\root\\cimv2\")\n"
+ "Set colItems = objWMIService.ExecQuery _ \n"
+ " (\"Select * from Win32_BaseBoard\") \n"
+ "For Each objItem in colItems \n"
+ " Wscript.Echo objItem.SerialNumber \n"
+ " exit for ' do the first cpu only! \n"
+ "Next \n";

Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
catch(Exception e){
return result.trim();

How to get motherboard serial number in VB script


The following is a code snippet, infact the entire code, that will echo(print) the serial number of motherboard of the machine it is running on. You might as why would it be necessary for one to know the serial number. Well, if you build a software which you do not want to run on multiple machines or do not want it to be installed in multiple machines then it is very useful. For example if you have built a software that is licensed and want it to expire after a time period and want to restrict it being installed again, then you might want to check some unique attribute of the machine it is being installed into. Here you go.

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
For Each objItem in colItems
Wscript.Echo objItem.SerialNumber
exit for

Java Runtime.getRuntime().exec(…) will and will not work…


The class java.lang.Runtime features a static method called getRuntime(), which retrieves the current Java Runtime Environment. That is the only way to obtain a reference to the Runtime object. With that reference, you can run external programs by invoking the Runtime class’s exec() method.

There are four overloaded versions of the exec() command:

* public Process exec(String command);
* public Process exec(String [] cmdArray);
* public Process exec(String command, String [] envp);
* public Process exec(String [] cmdArray, String [] envp);

For each of these methods, a command — and possibly a set of arguments — is passed to an operating-system-specific function call. This subsequently creates an operating-system-specific process (a running program) with a reference to a Process class returned to the Java VM. The Process class is an abstract class, because a specific subclass of Process exists for each operating system.

Let me give an example:

Runtime r=Runtime.getRuntime();
Process p=null;

try {
String notepad = “c:\\windows\\notepad.exe”;
String wordpad = “c:\\windows\\regedit.exe”;

p = r.exec(notepad);
p = r.exec(wordpad);

}catch(Exception e) {

The example given above clearly shows how to invoke executable through the runtime. If you look carefully the exec() method is responsible for creating a new process for the executable, the parameter of which is a command or rather a location to the executable in this case. Look at the command carefully. Lets take one of the commands as example:


If you notice the backslashes are escaped using yet another backslash. What if there was a space in the command? For example, “c:\\Program Files\\someFolder\\some.exe”. If you try to print the string then the out would to exactly, c:\Program Files\someFolder\some.exe with the backslashes properly escaped and the space exactly where it should be. But the fact of the matter is that it wont be executed by the exec() method. An exception will be thrown suggesting that “c:\Program” cannot be found. Everything beyond the space has been omitted by the method. Therefore the spaces are not escaped by the exec() method which is bug posted in the Sun Developer Network ( There happens to be a workaround. Instead of assigning the command to a string object, if it was assigned to a string array, the exec() properly executes the command.

JAlbum, hop your way to a new gallery


JAlbum is a very simple yet very handy desktop application for creating album and publishing it on the web. It runs on JVM so it can practically run on any operating system. All you need to do is create an album and show the path to the directory of the photos and voila!!! You have your own gallery hosted on the web. Initially JAlbum will provide 30MB free space for hosting your picture gallery but space upto 10GB can be bought.

The software allows users to manage their photo collection, sorting photos into albums, performing basic digital editing and commenting (although not tagging) individual photos. The main focus is on producing HTML and Flash based galleries, for publishing online or distributing via other means. Users can customize the look and functionality of their photo galleries by using a small set of templates or skins that come with the program, or by choosing from over 100 skins available for free download. The community that has formed around Jalbum produces a variety of creative skins, offering galleries based on standard HTML designs, AJAX slideshows and popular Flash based image viewers.

The application is very intuitive, hence one can download it and start using it straight away. You can download the latest version from here.