Lets develop an enterprise integration app: Well an upstream system needs to send me something - bring out my favourite messaging provider. A bit of Message Driven Bean or Spring Messaging support, some Hibernate for the persistence and Bob's your uncle.
How often do we see this kind of design? You can have a very similar conversation for C# .Net. This kind of thinking process is further encouraged by so called architects imposing their favourite solutions regardless of the problem. Feels to me that the enterprise application development industry has armed it self with a few hammers and then preceded to whack everything in the head pretending it's a nail. I'm certainly guilty of this thinking process.
There are many arguments for this approach - uniformity of software assets, availability of skills, developer mobility to name but a few. However, it can also be said that this kind of thinking process stifles innovation. In an industry that is built on innovation, that is a bit of a disadvantage.
Our application designs are constrained by the prescribed technologies and frameworks often resulting in complicated and unmanageable solutions. This cannot be avoided due to the available skills and technologies. However we need to broaden the choices available to us so that our application designs result in more suitable solutions. There is always a compromise between uniformity and flexibility. Currently we lean heavily towards uniformity sacrificing the flexibility of choice during the design effort. A more balanced approach requires a breed of developer who is at home with learning different technologies. This requires strong fundamentals that underpin the current technology landscape allowing them to switch between technologies and learn new ones with relative ease. It is essential for a senior developer to be a polyglot so that during the design effort he/she is not dominated by one particular technology or framework. The emphasis then shifts towards understanding paradigms and approaches rather than specific implementations. Having said that one cannot implement a solution without seeking expert knowledge.
In conclusion a software engineering effort requires breadth and depth of skills during application design/development and it is our responsibility as professional software developers to ensure that we always strive for the best solution to every problem.
Mash is a pragmatic software craftsman always looking to improve his software creation skills and helping others do the same. He firmly believes that a well-rounded software craftsman must have a keen interest in all aspects of software creation, including; process, people, technology, user experience, development, operation, maintenance, and social impact. He relishes the daily challenges that Codurance brings to him–stretching his existing knowledge and expertise allowing him to constantly grow as a professional.
Mash is an advisor and a leader. During his diverse career, he has succeeded in invigorating large ailing software projects as well as creating highly effective software teams and departments. His broad and deep technical knowledge, organisational skills, craft focus, and empathy to people involved have been integral to his success. He has worked in many roles for charities, investment banks, consultancies, government, media and cloud providers. He prides himself at being a hands-on software developer and believes that software development skills are very hard to learn and the best way to maintain them is to apply them.All author posts
Software is our passion.
We are software craftspeople. We build well-crafted software for our clients, we help developers to get better at their craft through training, coaching and mentoring, and we help companies get better at delivering software.