patkua@work

The intersection of technology and leadership

Page 52 of 53

Faster MSBuild Scripts – Convert ItemGroup to CreateItem

Speed, speed, speed… I wish MS tools would give me faster and faster feedback.

My lesson from last week – stay far away from ItemGroup elements in MSBuild files for most normal fileset equivalents (most especially if they only get used once). They are far better as CreateItem elements (though unfortunately only declarable within a Target element), taking almost the same syntax.

The result – instantaneous execution of any other targets outside of the one that uses these items, and a quicker ability to fail faster if you mistype the target name. Maybe it’s time to convert all of our targets to Nant?

Speeding up Visual Studio 2005

After working intimately with IntelliJ and Eclipse on previous projects, Visual Studio seems like such a beast for doing very simple things. Resharper makes it bearable though has a cost of its own. Our team has been playing around with trying to speed up the responsiveness. Here’s a few things we’ve tried that have worked at least most of the time:

  • Close the Toolbox tab – Even with just the tab closed, VS2005 still seems to use resources to keep it up to date. By removing it from your workspace, the project pane and other windows appear much more responsive.
  • Turn Off Animated Windows – When VS2005 gets sluggish, expanding and hiding tabs can appear horrendously slow as the screen repaints. Turning this option off helped a little bit. Uncheck the box found under Tools … Options … Environment … General … Animate Environment
  • Turn off the VS2005 File Navigator – With resharper installed, you don’t need VS2005 to update the list of methods and fields at the top of the file (CTRL-F12 does this nicely). I’ve hardly even noticed the small panel that sits at the top of the file you’re editing but apparently it takes quite a lot of effort for VS2005 to keep it up to date. Disable the Navigation Bar checkbox under Tools … Options … Text Editor … All Languages … Display.
  • Disable Startup Page – Wondered why VS2005 seemed sluggish on start up? It’s probably because it’s trying to download something from the Internet by default. Turn off the main startup page and the “live” content by unchecking the box found under Tools … Options … General … Startup … “Download content every”. I’d also change the “At Startup” option to “Show Empty Environment”.
  • Install Cool Commands – When you use Track Active Item in the Explorer pane, collapsing projects to run tests of various kinds can be hard. Cool Commands has some helpful things like Collapse All Projects so you don’t have to do it yourself when running tests.

I’d enjoy hearing anything else that anyone else may have tried to continue making VS2005 productive for you.

Onboarding Strategy: Big Vision Business Problem

Walking Over London

Photo taken from Sean Stayte’s photostream under Creative Commons.

Its Purpose?
Big Vision Business Problem helps team members form a common understanding of the problem they are trying to solve. It introduces them to a number of high level domain concepts and puts the work they will do into an overall context. The Big Vision Business Problem must be driven by a real Business Need.

How Did We Execute It?
The entire team sat down at the start of the project, and using a whiteboard, we started drawing people (represented as stick figures), systems (as boxes) and talked through a number of workflows. We incorporated both technical and non technical systems as we talked about the needs of the users, how the system satisfies or doesn’t satisfy those needs and how they interact. We kept mainly to the main “happy flow” or the “common walkflow” through the system because it is such a big system.

Techniques Found Useful For Running It

  • Personas – We leverage personas a great deal during requirements gathering, and found this same technique helps new people grasp with the system for many of the same reasons. Giving a name to a person playing a role in the overall business problem is much easier to understand than simply labelling them with that role.
  • Physical Diagrams – Talking over a set of boxes at a high level and seeing the users interact with each box helps give context to what is really going on.
  • Whiteboard – Nice big diagrams are great, but simple lo-fi diagrams that you can edit in response to people’s questions and around discussions is much easier

Why Is It Important?
Putting people’s work into context is important for me, and by talking over the business problem as a team, helps people understand what it is they are contributing to. Technical solutions may seem strange and may appear clearer if people understand the business constraints. It also allows people to offer alternative solutions that might be more practical and less costly. I can imagine that if you are having difficulty expressing the business problem, perhaps there is no problem, or it needs to be simplified or clarified as people focus their energies on work that may not contribute to solving the same overall problem.

Next Time I Might Try:

  • Taking and Showing Photos – Could be quite useful for showing people using the system
  • Drawing a Timeline – Doing a simple walkthrough over a well spaced out timeline to discuss stages of an older system, and what the business would like to achieve in the future.

An Introduction to Project Onboarding Strategies

In the last month and a bit, I’ve been heads down starting with a new team on another release of an old project I worked on last year. Onboarding new members to a team or to a project is important to me – namely because I’ve been in positions where if it’s not done right makes people a less effective team member. Tight schedules and the overall lack of domain knowledge in new team members meant that successful or unsuccessful onboarding a huge influence on overall project success.

Perhaps it’s my emphasis on coaching, learning and sharing that means that my interest naturally gravitates towards onboarding activities. Just like well-run company inductions help new employees in their overall position, I feel project onboarding is important for setting the scene, establishing the role and efforts of new members. The last thing I wanted was for a bunch of really enthusiastic people to be pulling in separate directions. After talking with some people at the pub, I realised that the techniques I applied aren’t naturally that apparent to people, so I thought I’d write up about them, how we used them, how unsuccessful or unsuccessful they were and then what I’d change about them. In a way, these patterns are a combination of learning/teaching patterns that might be useful to someone (if so, I’d really like to know and please leave a comment!)

I’ll continue to categorise/tag each of these as “Onboarding Strategy” so it’s easy to find. Read on for the first one here.

Domain Specific Language (DSL)s in Action

I get a certain amount of satisfaction when I find the right way of modelling something in code. I’ve been working with a Zebra printer lately, and is one of those really annoying devices you must send “special” instructions to. I ended up building up some generic commands for representing the language, and then built a small Domain Specific Language (DSL) for using it in our application.

Here’s an example of our code (modified for public consumption of course):

    public class StandardLabel
    {
        private string instructions;

        public string ToZebraInstruction()
        {
            return instructions;
        }
        
        public StandardLabel(string barcode, string name, string passion)
        {

            instructions = new LabelBuilder()
                .IconAt(485, 10)
                .BarCode(barcode).At(10, 10)
                .Label(“Name:”).At(10, 150).WithValue(name).At(150, 150)
                .Label(“Position:”).At(10, 250).WithValue(position).At(150, 250)
                .Label(“Passion:”).At(10, 350).WithValue(passion).At(150, 350)
                .ToZebraInstruction();
        }

    }    

The code above is useful for representing the layout for a label similar to the following (also modified for public consumption):

Example Label

I think the best bit about this block of code, is that it didn’t take any longer to abstract, and I’ve been able to get our Business Analyst to actually change the layout with only a minimal amount of hand holding. In fact they ended up modifying the label’s entire layout to suit the customer without needing to involve a developer. I like to think it’s a great outcome.

Knowledge Management Tips

Everyone has their own style of keeping on top of things and a former workmate told me about the way one of his team members organised his information that I thought might be useful for people. I haven’t given it a go yet but I should definitely try it out.

  1. Everything that he thought useful, he would write in a small text file and save it away.
  2. Using google desktop, he could search for the information whenever he needed it.

Listening to yourself for feedback

Having new people join the team always brings great insight, even if they are kind enough to come onto the project not firing criticisms immediately. When introducing them to a new codebase, I find it’s important to listen for yourself as you’re showing them for key phrases such as ideally we would have, I’m not particularly proud of, I have no idea why this is here, or this is a work-around.

Circumstances change and constraints in the past may no longer apply. All of this means you can continue to refactor the codebase to be clearer and easier to maintain. It may not mean you can fix things straight away but at least you know which parts you can improve on.

More Reflections on the 2007 Retrospective Facilitators Gathering

I’ve had a few days pass since getting back from the Retrospective Facilitators Gathering and since I’ve been working on a new project haven’t had much time to reflect on the last half of the conference.

Here’s a condensed summary of notes I took:

  • Four and a half days of an open space conference is extremely exhausting, especially in the desert. I think it’s a great way of running the conference and since I am who I am, I feel like I need to attend all the interesting sessions (of which there was plenty) and contribute or take out a lot of it. I’m very glad the organisers planned a small break at the end of Wednesday afternoon to help relieve some of this pressure.
  • A retrospective facilitator’s toolkit can be minimal and at another end of the spectrum could easily fill an entire small suitcase with equipment that looks like an arts and craft or stationary store. Many that we listed include various types of tapes, various types and sizes of post-its, papers, cards, thinking toys, focus tools, food, tissue paper, pens, pencils, markers, dry erase, pins, hand cleaner, timers, and dots.
  • Open space events help people solve specific problems. One I attended that seems particularly relevant to me and many people I know was called “Avoiding Burnout (How to be energised by your passion and not drained by it)”.
Lutheran Retreat Centre in Carefree Arizona
  • Linda Rising’s quote: “You don’t get the thermometer out if you’re not sick”.
  • Even people in the retrospective community make mistakes but are amazingly quick at reflecting, applying themselves and learning from it. It’s a community that really eat’s their own dog food (and this is a good thing – follow the link if you don’t believe me).
  • Norm had a great story about how retrospectives and wisdom from their retrospectives are leveraged in the US Fire Fighting system. I found it fascinating how teams fighting fires hold reflections on how to improve their firefighting abilities while the US Fire Fighting Academy takes all those reflections, writes about them in journals, magazines and reports, teaches their students about the lessons learned from mistakes in the field, and lobby the government to influence and improve fire fighting standards.

I’ll get around to posting a final book list here sometime soon.

Dear Microsoft Connect Feedback

Thank you for responding to the issue that I raised (located here) about a problem how one of your ASP.Net 2.0 Framework controls and Internet Explorer (and only Internet Explorer) fail to work well together.

I’m very happy that the time that I spent detailing the steps to reproduce the problem was well spent and that, you too, were able to reproduce it. I’m quite disappointed that we have not made any progress on fixing the problem and the solution offered to me was to submit the same issue but against a different product group. Unfortunately it looks like that avenue is currently closed (see Internet Explorer feedback site)

As someone who has spent time giving you feedback that I feel will help make your overall product better, I find it a little shocking that you ask for me to commit even more time even though I do not feel like we have made any more progress to fixing the problem. I can understand your desire to ensure issues are properly classified so the appropriate team may address it, but I feel I do not need to be involved with your company’s strategy at issue resolution since I feel you have all the information you need.

I appreciate your constant correspondence to my submitted issue, but I think I would have had a much better experience had the person who closed my issue, reclassified, or even duplicated the issue for the correct team to ensure that continued progress is made on the issue. I don’t understand why I need to spend additional time iterating the same information I have already provided your company with.

I am happy to discuss more of my experience submitting feedback and my own personal thoughts on how the user experience could be better. I do encourage you to contact me (emailpat “at” thekua.com) as I will be happy to share more of my thoughts to help improve the experience.

Yours truly,

Patrick Kua

Current Reflections on the 2007 Retrospective Facilitators Gathering

So it’s at the end of the second day that I’m writing about my experiences at the Retrospective Gathering. I hope that this entry not only helps me to distil my thoughts, realisations, affirmations and respect for different opinions but I hope it helps other people understand what retrospectives are, how important they can be and why there is an entire conference dedicated to it.

I’ve attended and participated in several conferences in the past, and the gathering I’ve been part of two days so far feels very different to others I’ve attended. Perhaps part of it has to do with the size (26 or so people), or perhaps it has to do with a group of people sharing a common passion helping each other to learn and grow. Either way, I feel it doesn’t matter that you’ve published (or not published) any books, it doesn’t matter the number of times that you’ve attended, and it doesn’t matter how you choose to participate, as it feels like a safe environment to share experiences and push each other’s learning comfort zone.

We are running this particular gathering using open space rules and despite the small number of participants we get quite a few different streams of so many different topics. I will post a link to the area where we are currently collating results.

Thinking Toys at the Retrospective Gathering

For me, even after only the second day, it has be a phenomenal learning experience. Despite everyone’s passions for the same thing, I’m fascinated how so many people found the role of retrospective facilitation through so many different paths. I think I’ve already come away with plenty of learnings that I will try to distil (so far) in the list below:

  • Training and coaching other retrospective facilitators actually requires lots of thought and preparation – sometimes people aren’t or will never be completely suitable for running them but it doesn’t mean they can’t contribute to a valuable session with other facilitators.
  • Despite my passion for the topics, I don’t think I’ve personally spent enough time promoting or encouraging retrospectives (or what I prefer to classify as continuous improvement at a company, team or individual level) in my company enough and I definitely will try more to when I get back.
  • I learned a heck a lot more about Temperature Readings and I think I’ve addressed a lot of my fears and concerns about not using it inappropriately.
  • Facilitating distributed retrospectives brings about a whole heap of its own obstacles and it’s good to have contributed to developing a toolkit for dealing with it.
  • Gut feel plays an important part of the way facilitators seem to make decisions – though best practices may exist, judgement about when things are used and not used is more important than sticking to “best practices”.

There’s some really interesting resources I’ve accumulated so far, and at the end I will certainly ensure the list is put in one place, but here’s some of the items I’ve got to look into right now:

  • Diffusion of Innovation
  • Non Violent Communication
  • The Elegant solution
  • Innovation Games
  • Corporate Cultural Survival Group
  • Managing at the speed of Change
  • Naming the Elephant
  • Focused Questions
  • New People Making
  • Fearless Change

As always if you have managed to get this far, I would enjoy hearing your feedback, thoughts, opinions and questions on anything I’ve written about so far.

« Older posts Newer posts »

© 2024 patkua@work

Theme by Anders NorenUp ↑