Category Archive for: ‘Tech / Work’

Questioning the Software Development Process

0

If you’ve taken a look at the homepage for my business site, you’ll know that there are three areas of expertise that really interest me:

  1. Enterprise .NET Development
    Architecture, Design and Development of enterprise n-tier .NET solutions using a domain-driven, object-oriented approach.
  2. SQL Server Development
    All aspects of development with the full range of the SQL Server suite, including Analysis Services, Integration Services and Reporting Services.
  3. Software Development Process Improvement
    Proven experience implementing version control, work item tracking and continuous integration.

The last point is fairly woolly and difficult to convey in a single bullet point. What I’m trying to get across is that, having spent a decade or so developing solutions for a wide variety of organisations and industries, I have had the benefit of witnessing many working practices and techniques and obtained a reasonable idea of what does and doesn’t make for an efficient and productive software development team.

Further, I believe that this experience of “other places” is an example of the added value that comes from hiring a freelancer or consultancy for a piece of work. So, whilst clients will generally initially hire me to undertake a particular chunk of .NET/SQL development work, inevitably as I go about that task I will bring to the table some of the best practices that I’ve encountered over the years.

Often these issues will be raised early in an engagement, when asking seemingly basic and straighforward questions of the client in order to get on with the job in hand:

  • Which source control system are we using?
  • Where do I log bugs?
  • Which unit testing framework are we using?

As time progresses, and depending on the nature of the client, the questions have a tendency to get increasingly specific, and perhaps be re-phrased as open suggestions:

  • Will the deployment occur out of hours?
  • Should we be performing static analysis as part of the build process? FxCop, NDepend perhaps?
  • Wouldn’t it be a good idea to use a mocking framework like Rhino Mocks or MOQ to simplify these tests?
  • I really think that the database schema should be version controlled.

Some clients are more receptive to these ideas than others, and inevitably there’s a You Don't Wanna Do It Like That! delicate balance to be struck between being seen as the helpful and experienced consultant who’s full of good ideas, and the irritating Mr “You Don’t Wanna Do It Like That” character portrayed by Harry Enfield. And the willingness of an organisation to change will fall somewhere on the continuum between “let’s change everything again starting today” and “but that’s the way we’ve always done it!”

Still, it occurs to me that there is a definite value in asking these questions when it seems appropriate. Further, I find that some of them work excellently in job interview situations to turn the interview into more of a dialogue (letting the interviewer see that you’re interested and thoughtful), or at the very least as fodder for the inevitable “Do you have any questions for me?” coda.

So, with that in mind, I’ve decided to compile and publish a list of the questions I like to ask (if only to myself!) about the way in which development teams work.

You’ll find it at http://ianfnelson.com/software-development-process-questions

Feel free to add comments and suggestions to that page, and I’ll try to keep the list updated over time.

What Value a Conference?

1

Tuesday of this week was a good day for conference announcements.

First, Ben Hall announced the next Alt.Net.UK conference, to be held in London over the course of a full summer weekend. This includes an Alt.Net beers session on the Friday night, one of Alan Dean’s much talked-about Open Space Coding days on the Saturday, and finally an AltNetConf Open Space discussion on the Sunday. The value to any prospective attendee would appear to be sizable, yet the cost? As with all Alt.Net.UK events, it’s free.

Later that day, when our American cousins awoke, Jeff and Joel announced a series of five Stack Overflow DevDays, to be held in four US cities and London, UK. Deliberately priced reasonably at just $99/£85, the places have filled up fast – the cost seems to be low enough to pose no barrier for most of those interested in attending, even in these harsh economic times.

This caused one of the Alt.NET UK organisers, Alan Dean, to tweet the following hypothetical question:

“We intend to keep http://www.altnetuk.com / free (we like it that way) but I’m curious: if it were a paid event, how much do people think that tickets would cost?

It’s a tricky question, especially in the current economic climate, and there’s definitely a difference between “tickets would cost” and “people would be willing to pay”. But having given it some thought, I tweeted this reply:

@adean alt.net pricing – for the recent In The North event, perhaps £195? For full weekend, incl. codeday, more like £495. But free is good!

And here’s my thinking: looking at pricing for the big name conferences such as Tech-Ed, DevWeek, DevTeach, Mix, or Software Architect, you can expect to pay thousands of euros, dollars or pounds. Plus, they’re always held on weekdays, which further increases the effective cost for freelancers such as myself.

From a technical learning perspective, one of the most useful paid conferences I ever attended was Software Architect 2007 (see this blog post). The speakers were generally excellent, and really helped me get to grips with concepts including Contract First Development, Loose Coupling and Inversion of Control, which have all since been staples of the solutions I’ve developed. But as I mentioned at the time, the attitudes of some of the other attendees surprised me:

“It amazed me that a number of my fellow delegates kept raising their hands and asking questions which invariably began "Yeah, but why can’t I just…", followed by suggestions which effectively seemed to boil down to creating hardcoded, inflexible solutions! To say that this was supposedly a conference of architects, even relatively simple concepts such as Reflection, Polymorphism and Generics seemed to be lost on some people, who apparently would be more comfortable maintaining massive switch statements for the rest of eternity!”

Although there is some overlap in delegates, there’s a notable difference in the attendee demographic between the big paid conferences and the shoestring community affairs. Generally speaking, many of the attendees at the former tend to have their costs covered by their employers, and perhaps see such events as being a cunning way to get an easy day out of the office. By contrast, those people who give up their weekends and pay their own way to participate in community events are invariably passionate about technology and best practices. As a result, these tend to be the better way to network, socialise, learn, share experiences, and generally meet like-minded individuals (as opposed to suffering death by PowerPoint), and how do you put a price on that?

I consider that, for the right attendees, the OpenConf Alt.NET events offer the same value as these big-budget conferences, but without the associated glamour, high-profile speakers, swag, and other overheads.

So, with a finger waving wildly in the air, I thought that a figure of £495, being approximately half the cost of a typical three-day conference, sounded reasonable. But then an afterthought struck me, and I followed up on my original tweet with:

@adean …although having said that, any charge would change the attending demographic, probably negatively so, and hence reduce the value!

Gah, it’s a paradox! The intrinsic value of the OpenConf format is that it attracts the passionate folk who turn up, unfunded by their employers, out of their love for tech. Start charging an appropriate sum, and the demographic will change, reducing the value of the conference accordingly.

Fortunately, the Alt.Net.UK organisers have no plans to start charging, so this can remain merely a curious hypothetical discussion!

What do you think? Which events, paid or community-driven, do you consider to be most useful to your career and personal development?

appSettings Considered Harmful

0

Since .NET 1.0, developers have been able to easily dump all manner of settings in the appSettings configuration section. And boy, does it get overused! Ever join a new project and find something like this lurking in the config file?

<appSettings>
<add key="SmtpServer" value="smtp.mycompany.com" />
<add key="bgColor" value="lightsteelblue" />
<!-- <add key="connstr" value="Server=TestDB;initial catalog=DBName;Integrated Security=SSPI" /> -->
<add key="connstr" value="Server=LiveDB;initial catalog=DBName;Integrated Security=SSPI" />
<add key="PageSize" value="20" />
<add key="Homepage" value="/default.aspx" />
<add key="FooServiceLicenseKey" value="YR39-WN51-CB73-DF62" />
<add key="SendEmails" value="True" />
<add key="FontName" value="Arial" />
<add key="CookieName" value="Foo" />
<add key="AdminTabVisible" value="False" />
<add key="BetaTabVisible" value="False" />
<add key="NotesTabVisible" value="False" />
<add key="IntranetURL" value="http://intranet.mycompany.com" />
<add key="DummyCustomerID" value="99" />
<add key="TimeoutPeriod" value="150" />
<add key="ShowErrors" value="2" />
<add key="PostcodeRegEx" value="^([Gg]
[Ii]
[Rr] 0[Aa]{2})|((([A-Za-z]
[0-9]{1,2})|(([A-Za-z]
[A-Ha-hJ-Yj-y]
[0-9]{1,2})|(([A-Za-z]
[0-9]
[A-Za-z])|([A-Za-z]
[A-Ha-hJ-Yj-y]
[0-9]?[A-Za-z])))) {0,1}[0-9]
[A-Za-z]{2})$" />
<add key="FirstDayOfWeek" value="1" />
<add key="Environment" value="Test" />
<add key="AdminUsers" value="smithj,brownc,davist" />
<add key="ValidityPeriod" value="20" />
<add key="ExchangeRate" value="1.50" />
<add key="ExchangeRateEUR" value="1.10" />
<add key="EmailBody" value="Dear {0}\nThank you for your email, one of our operatives will be in touch shortly." />
</appSettings>

Yuk!

Here’s the good news: It doesn’t have to be this way. In fact, I would go so far as to suggest that there are no longer any good reasons to use the appSettings section. Yay!

Firstly, since .NET 2.0, we have the connectionStrings section, specifically designed for holding database connection strings. Tobin recently posted a nice simple example of how to handle connection strings for multiple developers / environments within a single source-controlled config file.

Secondly, there’s a whole bunch of settings in this example which would be better stored in the database, with administrative users given a front-end to manipulate the values when required. Otherwise, you end up relying on the likes of sysadmins to make changes to business rules, which can be more trouble than it’s worth.

Thirdly, and most importantly – for the remaining properties we can instead choose to use custom configuration sections to hold our settings in an organised, hierarchical way and strongly-typed manner. This is the de facto approach when developing shared class libraries, but is also really valuable for application-specific settings. This is nothing new – here’s a nice succinct blog post from Phil Haack in March 2007 explaining this technique – but in my experience it isn’t used frequently enough.

Windows 7 Release Candidate

7

I’ve never done an in-place OS upgrade before. As far back as Windows 95, I’ve always taken the more laborious (but in my mind, cleaner) method of formatting the hard disk and starting again from scratch. I’m a bit of a masochistic neat freak in that sense.

But, having only very recently repaved my business laptop with Vista Ultimate x64, I couldn’t stomach the thought of doing it all over again with the Win 7 RC. So, for the first time in my life, I thought I’d give the in-place upgrade a go. It took a long time (like, about four or five hours of unattended installation), but it all worked perfectly – best upgrade ever!

So far I haven’t encountered bugs or compatibility issues whatsoever – all the software I had installed just works fine (including SQL Server 2008, Visual Studio 2008, and all the usual developer tools).

I’m growing used to the new-style taskbar (it’s very MacOS inspired, isn’t it?)…

taskbar

…and I appreciate the fine-grained control I now have over the icons that appear in the system tray (sorry, “Notification Area”)…

 notifications

…and the Wife Acceptance Factor is high. She “likes the fish” :-)

fish

Agile Yorkshire @ The Pub – Exploratory Testing, May 13th

0

If I can get a pass out from helping to look after the burgeoning Nelson family for an evening, I’ll be going along to this Agile Yorkshire session next Wednesday.

May 13th – Ralph Williams: Exploratory Testing

Details

In this session, Ralph will provide an overview of some techniques that bring Agility into the world of testing. (The world of testing is a strange place: regarded by most people as a nice place to visit but you wouldn’t want to live there, it is an unmapped wilderness where the waterfall methodology still roams unfettered.)

The main focus will be on one such technique, Exploratory Testing. It is defined by many as "simultaneous learning, test design and test execution", but Ralph will attempt to be more helpful. After the presentation many of you will claim this is what you have been doing all along, but now it has a fancy name you can use it without shame and companies can sell you high-priced consultancy in it.

Speaker

Ralph Williams is a Test Consultant at the Yorkshire Building Society, based in Bradford. The Society develops much of the application software used throughout its 140 branches and offices, and Ralph is responsible for managing the testing for some of these systems. He has previously worked in various management, testing and development roles at Erudine, Wanadoo and British Telecom, and specialises in Agile Testing and chocolate.

Venue: Victoria Hotel, Central Leeds

Date/Time: Wednesday, 13th May, 6.30pm for a 7.00pm start.

More details: http://www.agileyorkshire.org/

Alt.Net UK In The North

0

I spent much of this weekend over in Bradford, talking shop with the good folks at the Alt.Net UK ‘in the North’ conference. I had a great time, learned much, and am grateful to Richard Fennell of Black Marble and the other organisers and sponsors for making the event possible.

This was the first Open Spaces event I’ve attended, and I was pleasantly surprised at how orderly and productive the sessions turned out to be. Unlike conventional sales-pitch conferences of the MSDN roadshow variety, this was more of an open forum, with an expectation that all of the relatively small number (25ish?) of participants would, well, participate!

I was also surprised to find that there were more pragmatists in attendance than architecture astronauts. Maybe it’s a reflection of the current economic climate, but a common theme was on finding toolings that were good enough with which to deliver suitable solutions quickly and effectively, rather than striving for architectural purity and perfection.

It was great to hear some war stories, and learn about technologies, tools, methodologies and ideas that are currently exciting other people. It would be difficult to come away from a weekend like this one without some inspiration and a big list of several things to follow up on. Here’s mine:

  • MVC Framework – like myself, a lot of the attendees have had enough of the WebForms model, and are excited about the potential of ASP.NET MVC.
  • Fluent NHibernate – it sounds like the project being feverishly worked on by James Gregory et al is ready for prime time. People spoke very positively of the ability to ditch XML HBM files in favour of this strongly-typed configuration.
  • Balsamiq Mockups – loved by everyone, even despite (or should that be because of?) its use of Comic Sans MS!
  • Inversion of Control – there was a wide mix of IoC containers being used. I’ve tried Castle Windsor, other people made positive murmurings about Unity and StructureMap.
  • TypeMock Isolator – apparently capable of mocking the unmockable.
  • Sketching User Experiences – everyone who’d heard of him spoke highly of Bill Buxton’s work.
  • Open Quarters CMS – a great demonstration of a CMS built on ASP.NET MVC by Anthony Main and Andrew Magee. I look forward to taking a squizz at the source, I’m sure it will be an excellent learning aid.
  • SWAT – a web testing tool developed by some folks at Ultimate Software and released on Sourceforge as an open source project (thanks to Nick for the link).
  • Wild Blue Yonder – a delicious amber ale from Oregon which was on tap at the Sir Titus Salt pub, to where we decamped after the planning session on Friday night. Yum!

I’m probably forgetting some things, there was a lot to take in, and I regret not having a pad of paper on hand. Hopefully my memory will be jogged by the blog postings of the other attendees.

Thanks again to all who made it possible, and all the attendees for quality the chat and inspiration.

Seeking Kindred Spirits

0

I’m coming round to the realization that my hugely enjoyable first contract at Ventura last summer might have been something of an anomaly. That project was decidedly agile, test-driven, and used a bunch of modern technologies including Monorail, ExtJS, Subversion, NUnit and NHibernate. The requirements were well-defined, and the team was highly effective, with a pragmatic project management team who kept the development team free from bureaucratic processes, leaving us able to get on with delivering some cracking software in double-quick time.

So, it has been something of a surprise to move onto pastures new and discover that there are still organisations out there who follow the Waterfall model and highly prescriptive change control processes. It also seems that no amount of evangelism or proselytism from freelancers such as myself is likely to change the situation any time soon – it’s just the organisational culture. To be realistic, there comes a point in time at which I have to accept that fact, shut up, and knuckle down to achieving the project deliverables in the manner requested by the client. The customer is always right, as they say.

Agile Yorkshire logo

As I bide my time looking for some new clients who share my development methodology ideologies, I’ve been trying to retain some semblance of sanity by keeping on top of agile techniques and technologies, and by seeking kindred spirits with whom to discuss the same. I was pleasantly surprised to discover the existence of the Agile Yorkshire Club, who meet monthly in the back room of a pub in Leeds. So I pitched up last Wednesday, enjoyed the free beer, met some friendly and seemingly like-minded people, and listened to an interesting session by Richard Fennell of Black Marble as he talked about Alistair Cockburn’s Crystal Clear methodology, which seemed to me to be essentially “Pragmatic SCRUM”.

I’ve often heard people say that it’s a good idea to get involved with a local user group, or attend community events, and now I’m starting to appreciate why. In addition to the mind-broadening opportunities, the networking potential for freelancers is also an obvious benefit. If, like me, you’ve never before tried to get “out there” and meet other IT professionals, why not give it a shot? If a shy and reserved geek like me can do it, anyone can.

And if you organise or know of other, similar groups local to Leeds, I’d be interested in hearing about them.

SQL Server 2008 SP1

1

SQL Server 2008 SP1 has been released! The big news as far as I can tell is that SSRS Report Builder 2.0 can now be deployed via ClickOnce, which should make it easier to provide this application to end users. Apart from that, it’s mostly tweaks and fixes which have already been made available in previous cumulative updates.

That said, reaching the first service pack is often a helpful milestone for persuading clients that a product is at a suitable level of maturity for deployment across their business. Think it’s tough persuading your bosses to upgrade to VS 2008 and start targetting .NET 3.5 SP1? It’s a doddle compared to getting them to upgrade operating systems or databases.

Failed MCP Exam 70-553 :(

3

My current primary client has an annoying habit of closing for random days and half-days, including last Thursday afternoon. I decided to try to make the most of this time off, by taking Microsoft exam 70-553, which has the snappy title “UPGRADE: MCSD Microsoft .NET Skills to MCPD Enterprise Application Developer by Using the Microsoft .NET Framework: Part 1”. I’ve already passed the second part of the upgrade process (70-554), so passing this exam would give me no fewer than four new certifications, including the prestigious MCPD Enterprise Application Developer.

I was not as prepared as I should have been before facing such an exam, but it is currently available at a 40% discount, and having the afternoon to spare I thought it was worth a shot.

Well, unfortunately I failed by a narrow margin. The exam is in three sections, covering the material from three other exams which is new to .NET 2.0. I passed both the Application Development Foundation and Web-Based Client Development, but fell short of passing the Windows-Based Client Development section by the equivalent of one question! That’s probably a fair result, as I’ve spent much less time working with Winforms than Webforms.

So, back to the books I go, and await another suitable opportunity to retake the exam that doesn’t involve losing out on half a day’s revenue. Areas on which I plan to bone up include the TableLayoutPanel, ContextMenuStrip, PropertyGrid, ErrorProvider, BackgroundWorker, and ClickOnce deployment technologies.

On the positive side, failing the exam has at least helped me to discover where there are gaps in my .NET knowledge, and enhanced my respect for the MS certifications in general – you can’t just pitch up on a whim and expect to pass these things, you really do have to know the syllabus material.

ASP.NET Just Became a Legacy Platform

4

One of the least surprising but more significant announcements to come out of Mix ‘09 last week was the general availability of ASP.NET MVC 1.0. The development process for this framework has been very transparent, with no fewer than eight previews, betas and release candidates made available over the past year or so.

Microsoft are being careful to tout ASP.NET MVC as being “an alternative, not a replacement, for ASP.NET Web Forms”, but just look at their list of some of its benefits:

  • Clear separation of concerns
  • Testability – support for Test-Driven Development
  • Fine-grained control over HTML and JavaScript
  • Intuitive URLs

iStock_000003255884XSmallWhich begs the question – if you were kicking off development of a new web-based application on the Microsoft platform today, why would you even consider using Web Forms? Surely the choice now boils down to Silverlight or ASP.NET MVC? I fully expect that, by the time the summer Olympics come to London, Web Forms will be considered to be a legacy platform, with job adverts referring to it as “Classic ASP.NET”.

And that’s probably no bad thing. Sure, for those of us who lived through the static web, CGI forms and classic ASP, ASP.NET was a godsend, with its cunning state management techniques, custom controls, and page lifecycle events. But, even in the hands of decent developers, it does tend to promote a magic pushbutton anti-pattern, with untestable business logic frequently dumped in the code-behind. So, as a fanboy of OOP, TDD, and Separation of Concerns, this eventual release of ASP.NET MVC comes as a source of great pleasure to me, and means that I can look forward to many more years of enjoyably developing web apps on the MS platform.

But hang on a cotton-picking minute – what exactly is truly new, here? Haven’t we been able to do MVC development on the MS platform for years, using Castle Monorail? Well, yes we have – I had the pleasure of using it last summer when developing systems for Child Maintenance Options. And Monorail itself was inspired by Ruby on Rails, and the J2EE platform has had Apache Struts for donkey’s years (I used it briefly in the summer of 2002 when developing systems for Three).

So, if we could do this stuff already, even on the ASP.NET platform, why does the release of ASP.NET MVC still matter so much?

The slightly depressing but inevitable truth is that it matters because it’s a product which has been developed by and will be fully supported by Microsoft. To many organisations, that’s reason enough to use it when they would have never in a month of Sundays considered using the likes of Monorail.

As a crude indicator of popularity, consider the questions posted on Stack Overflow to date. 1819 of them have been tagged “ASP.NET-MVC”, whilst a mere 22 have been tagged “Monorail” or “Castle-Monorail”.

The same can be seen of many other modern technologies used in the development of custom applications. Take ORM for example – NHibernate has been around for, what, around six years or so since it was originally ported from Hibernate (I seem to have first mentioned it on this blog in 2004). But the traction that LINQ to SQL and Entity Framework have garnered in their short existence has already almost outstripped the popularity of NHibernate by some metrics.

Entity Framework, while not to everyone’s taste, at least has the potential to offer something quite different and distinct from NHibernate. But the same can’t be said of some other recent examples of Microsoft’s ongoing Embrace, Extend and Extinguish policy – what does Visual Studio Unit Testing offer that NUnit didn’t? Why develop the Unity Application Block in a universe that already contains Castle Windsor and a plethora of other IoC containers? How long will it be before Microsoft write their own mock object framework? Surely they will eventually do so, to meet the demands of the large proportion of dev shops that simply won’t touch none-MS tooling.

Why this should be the case, I can’t really say, but as a freelance developer I’ve seen it with my own eyes – working with organisations with technical strategies that specify the use of Microsoft technologies wherever possible, and shun the adoption of open source or third-party solutions. I hear people say “we’ll wait for Entity Framework to mature, rather than trying NHibernate”, and I see the funny stares people give me when I meekly suggest that we use xUnit.Net or Moq on a project. iStock_000004857675XSmall

So, perhaps we can’t entirely blame Microsoft. True, their practices do sometimes feel to be anti-competitive and limiting of choice. But they are a business after all, and are merely meeting the demands of their customers.

And is it really in my best interests to complain about these practices? I am a freelance developer and Microsoft registered partner and have to be pragmatic about this. I am in business developing custom applications for the Microsoft platform, and in doing so I want to use 21st-century techniques such as ORM, the MVC pattern, unit testing, mocking, IoC, etc. If my clients are more likely to be receptive to those concepts if there exists a suitable Microsoft implementation, then so be it. But please, let me continue using NHibernate instead of Entity Framework…

ASP.NET RIP. Long live ASP.NET MVC.

Page 5 of 14« First...«34567»10...Last »