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 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.
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.
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.
… 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.
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.
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 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.
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 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.
I am by no means a security guru, but can all you developers please end your stupid habit of saving passwords in clear text to the database.
It makes my cry when I click ‘forgot password’ on a web site and get a mail with my old password in it.
Make a hash out of the users password combined with a random value, called salt. Store the salt and the hash in the database.
Share and store documents… Free.
When you do daily builds, a practice I think is essential for high quality software development, it is important to make sure the build is so complete and easy to find that the test team and sales force can choose what version, and when, to install by them selfs.
It is an accepted truth that the longer you wait to fix an error the more expensive it gets.
It is quite interesting to see how developers are affected by a projects perceived market value and internal company status.
When a new project is started people are usually open for new ideas and most of the involved does things to move the project forward. A direction that is not allways the same for an individual as the group, but at least it’s moving.
When the project has been going for a while and it hasn’t delivered as planned, decisions might be made to rewrite parts of the system, partly to show the market that it is able to adapt and partly to get the staff moving again.
We’re doing some static analysis with NDepend as part of our daily build and the cohesion measurement caught my interest.
When googling for cohesion I stumbled upon some articles discussing reading and writing normal text (normal in this case meaning not source code).
The concepts that I fell for are cohesion and redundancy.
Here is what Wikipedia has to say about these words regarding programming:
Cohesion: a measure of how well the lines of source code within a module work together to provide a specific piece of functionality.
I’m slapping localization on to an existing product and needed a way to have my culture neutral resources in a satellite assembly. I can’t use embedded resources because I am extracting data from the compiled assembly to use for the resources.
The solution was to use the assembly attribute: NeutralResourcesLanguageAttribute to indicate what culture should be used as the default culture and use the UltimateResourceFallbackLocation enum to indicate that it should fallback on a satellite assembly.