Bindings, Platforms, and Innovation
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
Tracking change and innovation in the enterprise software development community
Posted by Sadek Drobi on Jan 04, 2008 07:15 PM
Many decisions on software projects are driven by productivity concerns especially when a project is successful, its market grows and so does the complexity in terms of both domain knowledge and clients’ needs. Unanticipated shifts of scope are likely to occur and the product requires more and more customization. As highlighted by Lispy, many teams “implement awful hacks" to adapt rapidly to new needs and "to keep a client happy enough to keep the money coming in.” This is what he refers to as “the pain of success” given the implications for the quality of the software.
Bob Martin describes these implications and argues that quick-and-dirty approach cannot be sustainable in a long run because it would inevitably result in slowing the project down:
I was at a client recently. They are a successful startup who has gone through a huge growth spurt. Their software grew rapidly, through a significant hack-and-slash program. Now they have a mess, and it is slowing them way down. Defects are high. Unintended consequences of change are high. Productivity is low.
[…] quick-and-dirty is an oxymoron. Dirty always means slow.
Often hack-and-slash approach is justified by the assumption that business software is anyway messy but Bob Martin strongly disagrees with that. He argues that even though business rules tend to be “complicated, arbitrary, and ad-hoc”, the code, on the contrary, has to be as clean as possible:
You cannot manage the mess of the rules if they are contained by another mess! The only way to get a handle on the messy rules is to express them in the cleanest and clearest code you can.
According to Roland Kaufmann, commenting on Martin's article, what actually explains the primacy of productivity concerns is “an insane internal rate of return which makes any short-term saving preferable over long-term gain.” This is particularly true since many managers operate under the assumption that any project going long enough cannot avoid periodical design and re-implementation from scratch. This was highlighted in a comment whose author also argues that such short term and productivity-oriented rationality is one of the reasons why computer science graduates are often blamed for not being able to write software.
It is true that “computer science and software engineering are very different disciplines” as highlighted by David Chisnell. The latter “teaches the process of developing software in terms of both tools and processes” whereas computer science course would only “briefly touches on these topics” and is not meant to be a “vocational training”. Graduates are exposed to many languages but do not get any in depth knowledge about them and related tools. Hence, they are likely to be unable to code productively and respect tight deadlines. As it was emphasized by one blogger “their inadequacies are visible to all”, whereas someone “with little or no large-scale design/architecture smarts” making fast progress would not be “personally blamed when their poor large-scale design decisions cause the whole system to slowly become unmaintainable”, because “their earlier successes make management think the eventual failure was likely unavoidable.”
However, unproductive computer science graduates have, according to Lispy, skills that are crucial for successful development of projects as they grow in size and complexity. “Adding tons of features to the software, or do expensive custom work on each deal" is "way too much friction to scale” and Lispy argues that even with luck and hard work “untrained “street programmers” can only get the project to a certain point to grow beyond which, they require "tools to help them write their tools”. Bob Warfield, for instance, advocates for domain specific languages as a means to “make it possible to maneuver a bit at low cost and give customers what they want". Lispy believes that computer science expertise is necessary for providing such tools because it requires operating at a different level of understanding. Einstein used to say that “the significant problems we face cannot be solved at the same level of thinking we were at when we created them.” To solve problems faced in real world development one may need computer science graduates who apparently are unable to code under real world productivity-oriented requirements.
Open Source Middleware Reference Architecture Whitepaper
Business Benefits of Open Source SOA
Developers and their managers should understand how to balance feature-chasing and bug-whacking against factors such as maintainability, scalability, and stability, true. But it's absurd to think that a checkbox on a job application form has anything to do with that balance. You don't need a comp sci degree to know the importance of long-term planning and solid foundations. If you're capable of learning from experience and from your peers, a few long-lived projects will teach you those facts of life just as surely and painfully as you've been taught to deliver prioritized functionality on schedule. Similarly, a comp sci degree is no guarantor of slow-wittedness or inflexibility. Good engineers will shape their practice to fit real-world evidence no matter what their starting points may have been.
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.
This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.
This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.
This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.
After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.
IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.
Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.
1 comment
Watch Thread Reply