Continuing the theme of Things I Have Heard I Don't Think I Agree With.
To developers technologies are everything
I can't remember the context of this but I hear the same sentiment in different guises over and over again. Often from non-techies, but more alarmingly from developers.
Is this true?
It's true for a certain tribe of techies, sure. And creating and effectively using new technologies is an important part of what drives the current information age forward. But I'd be worried if I thought that 99% of developers were like this.
In our day jobs, and also if we want to create something that makes any money, we need to be interested in solving people's problems and creating solutions. Sure, we'll use technology to do that. But if we were all only motivated by technology, we'd always be trying out the Next Big Thing when our customers wanted a simple CRUD web app. Any organisation that encouraged this sort of technology um, infidelity? playing the field? might find themselves with lots of fascinated and broadly-educated developers, but not a lot of productivity.
I always thought developers were drawn by wrestling with the machine to solve a particular problem, or to do something that hadn't been done before. I didn't think we liked learning Ruby because we didn't study it at university, or switching to a functional language simply because that's the way the whole world is going.
We can train The Business to speak our language
I've heard a number of people talking about the Holy Grail of having business owners write acceptance tests. At
LMAX we have a (Java-based) DSL that theoretically could allow technical-ish non-developers to write our automated acceptance tests. However, is this the right thing to do? To make our jobs easier, and our code better quality, we need the business to become almost developers?
Our (very difficult) job as developers is to act as translator between the ones and zeros a computer speaks and the real life doman language our business guys (and girls) use. Forcing the business to become more technical is just, well, lazy.
So if our business people shouldn't be forced to become more technical, how can we bridge the gap? Is there anything that we as developers can do to move closer to the business?
A
Ubiquitous Language is a good start. When a business user talks about an order, a developer should be thinking about the Order class, or something that implements an Order interface. When the business talks about placing an order, a developer shouldn't be thinking "place order translates into the execute method", they should assume there's a placeOrder method somewhere they can use as a start point.
We certainly shouldn't be training the head of sales to start talking in terms of Java classes or technologies - "I want the Resin tier to validate the order while the OrderMatcherImpl checks for availability". That would be silly.
Development is hard, that's why they pay us. And part of that hard job is learning the business model we're implementing so we can mirror and support the business. We shouldn't be inflicting our technology on the business.
I do agree with everything you said, but the Holy Grail doesn't have to involve the business guys learning tech-speak. In the past I've written jbehave scenarios in business-speak which the business easily understood and signed off. These were then run as unit tests on every check-in in our CI environment.
ReplyDeleteIt forced me to get a detailed knowledge of the business problem and to think of all the business workflow edge-cases which was really cool, as well as get the confidence that any other unit-test gives you. It also gave the business a lot of confidence in our system, something that had previously been lacking.
The next logical step would be for the business guys to then write the jbehave scenarios themselves, but I actually prefer writing them in order to improve my business knowledge. And good luck getting busy traders to sit down and write a bunch of jbehave scenarios!
Actually that's pretty much the model we follow with our DSL - although originally we hoped that business people could write the tests, in real life it forced us to think about and model the business domain, and the developers / BAs / testers write the acceptance tests. However, our business users can read the tests and see that they're doing the right thing.
DeleteIt works well for us, but I didn't want to distract from the message of "learn the business domain" by going into detail of how we use the DSL to do that, I felt that our technology solution might distract from the fact that it's learning the domain that's important, not the technology you use to help drive that.