The management of software development is all about using scarce development resources to satisfy unlimited wants of the customers.
In the situations with limited resources (time, budget and skilled labor) the only way to get more out of nothing is to use these resources more efficiently. One way of achieving such a goal is about better automation of some development processes and leveraging the opportunities provided by the integration of different development subsystems.
Here some examples of such automation and integration:
- Integration server tags SVN on every production build, runs the normal routine, then packages all redistributables in a separate folder (matching build label) that is accessible via FTP (side effect is that all production packages are saved somewhere and could be easily retrieved if such need arises).
- Integration server uses svnRevisionLabeller (or any other similar plugin) to retrieve revision number from the SVN, incorporate it into the proper 4-digit version and build .NET assemblies with that.
- Integration server updates version flag on every production release. Production systems have module that checks this flag regularly and informs user of the new version.
- Integration server updates Click-Once publication on every production release and the client application updates automatically after the next launch.
- Keywords (feature from the Subversion) are used to populate attributes of some business classes with the “last changed” and “latest revision id” values on per-file basis. These values are retrieved via the reflection upon the generation of some inter-development reports/statistics
- Integration server hosts continuous monitoring project that regularly checks the production systems, runs some sanity checks and reports any failures or deviations if they are detected
- Integration server checks commit messages before build and passes all encountered tags to the build script (i.e.: #RunAllTests, #DeployToTest, #CreateRelease, #SetVersion(1.2), #TestPerformance etc). Friend of mine used to do that on his projects.
- Integration server locates all issues/tickets that were closed since the last release build, marks them with the build version and either creates a link to the filter in issue management system (JetBrains does that) or auto-populates change log report (being delivered with the release artifacts).
- Integration server runs the unit-tests and captures screen-shots of all the presenters available. These shots are then labeled and framed nicely and are used to update the pictures in the product documentation (which is also gets packaged and processed on the release cycle)
- Production release creates Virtual Machine package with the pre-installed and pre-configured solution (could be used by testers and sales-people)
I’ve leveraged some of these scenarios (items 1 through 6) in different development projects I’ve been a part of (esp. in projects that were based on the xLim principles). On the overall such things do really reduce the development friction and have solid Return On Investment rate in increased stability and saved time. And they also reduce the risk that a mere mortal would make a stupid mistake while performing some mundane action.
Reduced development and release friction obviously promote faster development iterations. That shrinks the lag between the moment customers have requested some functionality and the moment they can inspect it (and provide feedback for the next changes).
Are there any time-saving recipes that have proved themselves worthy in your project and are not on this list?
NB: Obviously one must be cautious about taking any single item from the list and applying it to the specific development project. Specifics always matter and not all combinations will be worth it.
Joannes Vermorel has posted on migrating from the Axosoft OnTime bug tracker to the open source issue tracker Trac. Here are some thoughts, that were spiked off by the topic:
- Trac does integrate really nicely with the TortoiseSVN:
- You could configure TSVN to recognize issue numbers like #134 in the commit messages and turn them into the URLs that point to the appropriate web page.
- Trac does keep track of all the SVN commits (along with the ticket and wiki changes) and all #ID numbers are treated as links in the timeline as well (additionally you can reference milestones and wiki articles in SVN commit messages, and they will be decoded).
- Trac (at least in the default installation and in my opinion) does not fit really well into Agile-type of the development (esp. when used in teams with the complex organizational and management structure). But it can play out really well in small and medium teams, when it is used along the lines of the classical Project Management approach and is utilized merely as light-weight tool to pass tasks/assignments from the Microsoft Project to the resources and track their execution.
That’s what happens to the Resharper 4.0, if you open 14MB flat XML file in Visual Studio 2008.

Note, that after closing this file and running GC, memory consumption drops to a mere 880 MB. This feels like a tiny memory leak, does not it?
And that’s one more reason to switch to 64 bit OS - you can add enough RAM to keep R# happy.
Notes to self:
- Upgrade the blog to the latest WordPress + K2 (keep all the tweaks and plugins and save them under SVN)
- Make sure that RSS feed gets full text and the proper formatting
- Add/create RSS feeds per tag/category
- Assign designer to spend some time on the look
Is there anything else that I’m missing from the UI/usability stand point?
Published on July 28, 2008
in Tips.
If something has gone wrong, and it is really tough to figure out the reason, try looking at the situation from the different angle. Could it be, that there are two separate and simple problems that play well together in distorting the symptoms?
This has been the case with the Web Deployment Projects failing spontaneously on the CC.NET. Deployment projects do really fail under VS 2008 under some weird circumstances (that’s the first problem), but the real cause was simple build timeout on the integration server (second problem).
And I’ve got way too carried away by the complexity of the first problem (and ease of reproducing it locally) and didn’t even check server log (CC.NET separates build logs from the server log, which holds higher-level messages) for some other hints (i.e.: “Process timed out:…”)
That was a good lesson.
Now I’m getting to love VS 2008 and deployment projects.
Web Deployment Project always fails the build, when being executed from VS 2008 (and sporadically on the CC.NET), but, at the same time:
- There is not a single error or warning in the error log (or in the output in the diagnostic mode).
- Command-line build works
- Googling shows up multiple posts with the same problem and no definite resolution (there is a workaround for Linq 2 SQL users, but that’s not the case in this situation)
- VS 2008 itself messes up the math: 3 succeeded projects (as reported by the output) equal to summary: “Build: 2 succeeded or up-to-date, 1 failed, 0 skipped”
How am I supposed to fix the thing if it does not tell me what’s going wrong?
Updates (as I’ve been looking for the problem):
- Some people report this problem to manifest itself after installing VS 2008 SDK.
- MSBuild could fail silently if some custom task breaks down.
- Fusion log viewer reports that aspnet_compiler.exe fails to load aspnet_compiler.dll|exe. But this is not the root of the problem.
- That’s the nice assembly that get merged into the precompiled one: App_Theme__svn.dll. This issue with the deployment algorithm is not the cause of the problem, however.
Resume: according to the rule of thumb below, it is not efficient to continue looking for the solution to this specific problem.
If you spend more than a couple of hours trying to fix some mysterious framework/IDE problem without any luck, then probably this problem is not worth fixing. It would either be fixed by some hotfix/SP or the home-made fix would be quite complicated/fragile (adding more maintenance problems than it resolves). Let it go, step back and look for the workaround.
Latest Comments