Do you remember the first time you used an ORM (Object Relational Mapper)? For me it was something I wrote to make it easier to map data related to testing electronic devices into a SQL database. Different devices generated different test data, and so I used a convention to map the property names on the classes to the SQL tables and columns. At the time I didn’t even know what an ORM was.
What is bespoke software? Bespoke is just a fancy word for custom, right? Well, yes. And no. According to putthison.com the word ‘originated in shoemaking, but gained in popularity through custom tailoring in England, where lengths of cloths were said to be “spoken for” or “bespoken” by another customer.’ 1 There are several levels of custom-made clothes: Made-to-order - only the materials are customised Made-to-measure - the materials and the cut are tailored based on a single fitting Bespoke - garments are made through a series of fittings Translating this into software development, we can think of ‘made-to-measure’ as being like a fixed-scope, Waterfall development process, where we get the requirements up-front, build the software and then deliver it.
Sometimes it seems that we simply go from one extreme to another. Once upon a time developers didn’t bother to write tests. Everything was tested manually. When changes were made the whole thing would need to be manually tested again. Sometimes we used test scripts, other times we just played around trying to break functionally. And then we couldn’t remember what we had done to break it! Managers would roll their eyes in frustration when developers talked about writing unit tests.
Sometimes we forget how much old software is out there. We talk about the software industry still being young and perhaps quite immature, but actually, word processing software started reaching offices in the early 1970s - over 40 years ago. The first version of PowerPoint was released in 1987, public use of the internet began in 1989 and then exploded during the 1990s. Looking back it is striking how much has changed in a short period of time.
In short, it depends! At Elastic Mint we take experience seriously. It’s one of the things that informs everything we do. We find that a good developer with a wealth of experience will make better decisions. They will reflect on things they have seen and done, learn from them, and then use that knowledge as and when appropriate. Although it’s a bit old now, Peter Knego makes this point in his blog here, where he analyses reputation statistics on Stack Overflow.
On 19th March Gordon and I attended a 2 day agile coding retreat in St Austell, Cornwall. Hosted by Kevlin Henney and Jon Jagger the retreat was organised for developers to discuss, practice and improve their software craftsmanship, communication and creativity. Having personally never attended such an event before I was interested to see if there was an opportunity for me to hone my programming skills to ultimately improve my performance as a developer.
I was working with a company recently where we were using Xunit as our test framework, NSubstitute for mocks, stubs etc and we ran our tests using NCrunch whilst developing in Visual Studio. At one point during the project we noticed that some of our unit tests were failing intermittently. This is more common in longer running integration tests but not so common in unit tests. When we do see this behaviour in unit tests the cause is often shared state being accessed when unit tests are being run in parallel.
I first learnt about writing unit tests following a project where we missed the deadline and spent far too long fixing and then refixing the code. I became frustrated that we would fix one thing and then something else would go wrong. When I saw how tools like NUnit and Rhino Mocks gave me the confidence to fix bugs and refactor it genuinely changed my working life. On my next project I determined to write tests as I went along and to be honest I’ve never looked back.
Like me haven’t you at times been frustrated by software that has been delivered late and not made the business impact you expected. A lot of time and money had been wasted due to assumptions being made with inadequate requirements; poor communication of team objectives and an overall lack of understanding, focus and misalignment with the overall business goals. As a developer I use interative delivery and this places emphasis on integrating learning from delivery and refining the scope and requirements.
Over the years I’ve worked on lots of teams. Some good, and some not so. But what is it that makes a team successful? There are the obvious things like the kind of people you have on the team. If the team members just don’t get on, if they don’t have the skills required to do the job, or they just aren’t interested in working hard then it’s clear the team will suffer.