Trisha has developed Java applications for a range of industries, including finance, manufacturing and non-profit, for companies of all sizes. She has expertise in Java high performance systems, is passionate about enabling developer productivity, and right now is getting to grips with working in an Open Source fashion as a developer for MongoDB Inc, where she contributes to the Java driver and Morphia. Trisha blogs regularly on subjects that she thinks developers and other humans should care about, she’s a leader of the Sevilla Java & MongoDB User Groups, a key member of the London Java Community and a Java Champion - she believes we shouldn't all have to make the same mistakes again and again. Trisha is a DZone MVB and is not an employee of DZone and has posted 69 posts at DZone. You can read more from them at their website. View Full User Profile

Overheard: Development Myths

  • submit to reddit
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?

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.
Published at DZone with permission of Trisha Gee, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)


Matt Young replied on Wed, 2012/06/27 - 3:03pm

While I agree with almost everything said here, it is worth pointing out, that our Jobs as developers should never be to abstract and automate the business so much that the users no longer understand their own rules.  I have worked as a consultant for too many companies where you walk into an application that is a mess with alot of rules and you ask "Why does the app require X, Y or Z before A and B?".  When the business domain experts says "We don't know, it has always been that way.", the application now knows more about the business than the business "experts" do.  

Good Application/System design should act as validation and documentation in addition to expediting business processes.  A great application should be a model on which business rules are demonstrated.  

Black box systems are very dangerous to business continuity and non-technologists should be leary when a developer says "It just is that way, you don't need to know why."  Even if it is true, there will come a day when the developer and maybe even the original domain expert are no longer around.  The system, properly designed, should be able to act as a crutch and a roadmap to building that knowledge back into an organization.

Trisha Gee replied on Sun, 2012/07/01 - 12:43pm in response to: Matt Young

I completely agree, I absolutely don't think things should be abstracted to the nth degree, I think the design of your system should mirror the business domain it supports, for exactly the reasons you mention.  Some of the "abstractions" mentioned like the DSL we have should support that model, not hide it.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.