I’m a scrum novice

I have been forced to learn what Scrum is due to two independent assignments.

So in the spirit of learning stuff by myself I just read Agile Software Development with Scrum and I’ve got Agile Project Management with Scrum in the pipe.

It struck me that Scrum is a little like it has turned out when I, and the good developers around me, have had some saying in the organization of software development.

I’m by far an expert in the field but I get the feeling that it will be hard to convince a customer to embrace Scrum. I would gladly work in a Scrum team though.

My Scrum encounters this far is by one customer that want to use Scrum in a project to migrate a rather large application from VB6 to .NET, and one customer where I helped them inspect and evaluate a software supplier (and their software) that uses Scrum for their application development.

Done in the right way I really think it enables both transparency and creative thinking.

Refactoring in VB6

I just got handed a click event with 19 pages of code. Yep, you read it right: nineteen pages!

What can I say? My need for a refactoring tool that works in Visual Basic 6 became immediate.
Luckily I found CodeShine through a little googling.

It doesn’t do a lot, compared to Refactor! and Resharper, but the things it does are invaluable. Its functions are: Extract method, Introduce Explaining Var, Extract function, Localize module variables and Rename.

At about SEK500:- I’d probably pay for it with my own money if I would need it more than the 21 days I can try it for free. This is a tool everyone maintaining crappy legacy VB6 code should have.

Open source translation service

Writing the previous post got me thinking:

I would like to have an open sourced free hosted translation service available.
It should offer procedures and tools for localizing .NET applications. A developer should be able to upload a bunch of strings and some context describing text so that volunteering individuals could translate them online.
It could be set up so that you got one string translated in return for translating another string. So if you know one language you could log in to the site and translate other developers stuff and get your things translated in return. This way you could pay someone to translate string to one language on your behalf and you would get more languages in return.

I’m not quite sure how the Ubuntu translations work but I guess we could learn a lot from them.

Is this already done or will it be done before I have had the time to think this through?

Coalesce operator in C#

I got reminded about the ??-operator in C# today. It is a coalesce operator and works like this:


string a = null;
string b = a ?? "Woops, a is null.";
Console.WriteLine(b); <- Will write 'Woops, a is null.'

I really need to read the language specification at least one time per year to remind myself about all the things I don’t use frequently. It is way to easy to keep on solving programming problems with the same old tools all the time. I like to learn new languages. At least to the level that I know what to google about if I have to use a specific language. But at the same time I think one should try to master at least one language. C# has been my favorite tool for years so I am blushing a bit as I confess my shortcomings.

Coding is fun

… and so is solving problems using software.

Consolidating documentation and writing for the sake of wasting bits is utterly boring.

I have a hard time writing for an audience that I know will not take the time to understand what I write if I make it unambiguous. But most of the time they will make weird assumptions if there is a tiny hint of ambiguity.

I can totally understand that not all people grok software development, but I’ve always thought logical thinking was the killer feature of mankind. Recent encounters makes me wonder though.

This also leads to the importance of a well defined vocabulary. I waste huge amounts of commas and parentheses when writing systems related documentation because I can not allow myself to make any assumptions at all about the readers current knowledge and taste in words.

So I guess it’s my fear of ambiguity that makes my writing unreadable. At least I’m not spreading any misinformation :)

…and while I’m writing about my writing: My sentences are way to long and I don’t know if it’s OK to start one with ‘But’ just to skip a comma in the previous one.

Moving to SharpDevelop from Visual Studio Express

In light of the recent controversy of using plugins in Visual Studio Express and getting some inspiration after listening to the DotNetRocks episode with Christopher Wille on SharpDevelop I thought I should give SharpDevlop a chance again. I am working on two utilities that I plan to release as shareware and as I do not want to rely on tools supplied by my employer I have been using Visual Studio Express until now. I haven’t done any real work in #Develop yet, but I’ve got both projects up and running.

The first thing that bit me was the lack of a typed dataset designer. I was on the way to move that structure into a List<T> anyway so it doesn’t bother me that much right now. I’ll write about the progress of each project this week.

Check your automatic builds frequently

Make sure your automatic, daily and continuous, build actually works.

It is just like checking that your backup procedures actually works. You do not want to find out either one of those is not working when you really need them.

This weekend our Team Foundation Server was moved and everything looked all right on Monday morning. There was no problem at all to connect to the new server and the Cruise Control Tray icon was a comforting green. I did have that uncomfortable feeling that something was wrong though…

… and sure enough; the configuration for Cruise Control wasn’t changed so it looked at the old server and kept on building the same old stuff.

Broken builds sucks and it should be a cooperative effort to keep the system in a buildable state, but there has to someone responsible for the automation. Someone who verifies the build frequently.

Developer Summit, Architecture and Business value.

I attended Developer Summit last week and went mainly to the architecture sessions.

One trend I noticed was the wake up call for developers to close the gap to the business side of their organizations. It is a line of thought I have taken for granted, but that may be because I worked for five years as a bean counter before I became a developer. The colleagues that came straight out of some tech school and never saw the process and people side of software development might need the wake up call, but calling it a new paradigm to see software as an enabler of business is to devalue a lot of talented people around the word.

Another trend I spotted was that we have to understand that there are lots of architectural decisions made at the developer level. I think that discussion is a bit taken out of context without discussing the role and abstraction level of architects. We tend to call a lot of developers architects independent of the level of abstraction they work in. Both deciding between static methods or a singleton and the amount of external data centers are considered architectural decisions.

I think that you hand over the right to decide about thing in abstraction levels below yours as soon as you hand over your design to the implementor. As I wrote here, I think that one responsibility of an architect is to aggregate external information and spread it within the organization. Seen from the abstraction level point of view that would mean that every one within a developer organization should aggregate information relevant to his abstraction level and inform those at a lower level. Taken one step further you have to inform the ones ‘above’ you too, since small gravel can make the optimal solution undo able.

It is not about climbing the abstraction ladder the better you get. It is about finding the abstraction level you are fit for and grow within it.

Continuous builds instead of meetings.

Lots of times I have been involved in lengthy discussions about how to solve a problem and trying to guess what the user really wanted based on his initial request. It is not uncommon that implementing all of the possible solutions and lettings the user choose the one that satisfies his needs would have been done in a shorter amount of time than discussing it.

I’m probably rambling but if we have a continuous build, that is releasable, we could in many of these cases give the customer builds with all of the solutions and let the customer decide.

I have heard of development teams that has taken deliverable builds to such an extreme that they build Virtual PC images with their system preinstalled every night. So even if there is server software involved it is possible to create agile deliveries.

Installable daily builds and salesmen

I have quite often ended up in situations where the salesman has promised new or existing customer non-existing functions. Functions that took lots of overtime and ugly code to get done. When developers, more or less loudly, protests against this practice they are either laughed off or told they don’t understand the sales process.

Quite often these forced solutions are not tested enough so the client isn’t satisfied anyway.

Assuming you took my previous advice and created releasable daily builds, I suggest you deliver what you have at the moment and update with new functionality as it is done. With shorter iterations everyone involved gets a feeling of success. This will probably not work for all kinds of systems but I think that generally it is not devastating if you (re-)introduce a bug that a large regression test would have found. The risk is quite big that a suite of test that are run a couple of times a year will find less than an ever growing suite of tests that are run every day. Furthermore, the receiver knows it it non-critical since there a new deliveries soon.

I don’t think you should be afraid to deliver often. One way of removing that fear is to have a well organized automatic test suite and build environment.

Next Page »

Close
E-mail It