Requirements Analysis Problems

Last modified on 2009-08-06 14:55:49 CDT. 0 comments

In an earlier post I'd lamented about the problems in managing requirements, this post probably reads as a prequel to that one. What are the real problems when it comes to requirements analysis? Meryl K. Evans of the lockergnome identifies 5 specific issues:

  1. Customers Don’t Know What They Want
  2. Requirements Change During the Project
  3. Timeline Trouble
  4. Communication Gaps
  5. Customer Organization Politics
True, customer is King. However, everyone has heard the Hans Christian Andersen tale the emperor's new clothes. Who tells the customer that he is wrong? The answer is embedded in another question. Do you even know that the customer is wrong? And when you say customer, who are you referring to? As always the "two sides to a story" paradigm holds here. Business knows business. Technology speaks technology. Some of the requirements are never ever seen by the business user who is detailing his requirements - these are system requirements, file transfer protocols, security measures, compliance issues, hardware sizing, upstream applications, downstream applications. Showing mock-up screens and having walk-throughs and spewing tomes of documentation will get you a business buy-in, however beneath and beyond the snazzy drill-down reports and ease-of-use-navigation and pretty and a pie user interface lie the incompatible data formats, tucked-away-in-binary information , firewall issues, port problems, network latency, hardware scaling and application performance issues. Ask any developer - can 'this' be done? and he will tell you... it 'caaaaaannn' be done, buuuuuuuut.... The length of the 'can' and the drag of the 'but', translate loosely to: Sure you 'm0&@#', I'm an engineer and this is code and I can get it done. However, do you realize the number of lines of re-coding and hours re-testing effort it takes to have that silly nice-looking jazzy useless piece of junk information on the screen? And, do you even begin to fathom the performance impact this is going to have on the downstream applications that use the data feeds from this system, and the weekend batch is going to take at least a couple of hours more? As you swivel nervously in his cubicle, waiting for him to say some thing more.. he ends the mystery abruptly by saying: No. Can we involve the IT during the functional phase of requirements, ideally yes. Do they have to sit in everyone of the meetings? Probably not. However, before you go in for the final grand sign off from the 'business', make sure you have a tacit approval from the development. Goes a long way in avoiding surprises later. I've noticed in several instances that accommodating requirements changes from the IT are more time consuming and project impacting than those from the business. Business can be 'made to understand'; whereas, IT issues are more immediate, critical and non-negotiable. Hey, if a particular entry violates the primary key, then you can't really do anything to code around can you? If the security policy will not allow users have then lower their browser security settings, you can't have the fancy browser based copy-paste functionality can ya? This issue is compounded when multiple mini-clients exist within the client organization. And if there exist political friction between the client's teams.. ouch .. you are sitting on a live mine. Time solves everything. Except when it's solving time related issues. Study the requirements and share the time-line with the customer. If you don't have any room for over-runs and slippages, fine - but, tell the client that you are running a tight schedule. This might help him, help you prioritize. If a project has even a minor chance of slipping time lines, then the chances are it will. and the earlier you the tell the client, the better it is.

Breaking Down Software Development Roles

Last modified on 2009-08-06 15:01:10 CDT. 0 comments

As a IT professional, I've often found myself at a loss when I've had to explain my job concisely. Usually following the informal pleasantries, including hellos, name exchanges and handshakes is the dreaded "So, what do you do?" Um' I'm an IT professional. Okay, but what do you do? I um.. develop software. Develop software? Well.. I do requirements analysis, design, architect, develop, document, test and deploy software applications based on customer needs, while working with various vendors and integrating with other applications and co-ordinating activities with offshore team members. Huh? I write code. oh! By this time, the pleasantries have ceased to be that, and the other person either looks at you and your family pitifully or warily. The truth is that the software developer of today is expected to perform all these roles. Internet.com, has tried to break down the software development roles as they exist today. Software development, the paper observes, is done differently at every organization, and recognizes that the process that one organization or person uses to develop software may not work perfectly in all circumstances. While environments will change and with that the process that are being adhered would be adapted either marginally or dramatically.. however the multiple and multi-faceted practitioners of the fine art of software engineering remain largely the same - for the requirements are the same - There will always be a need to understand the business problem, convert that problem into an architecture, convert the architecture into a solution, test the solution, and deploy the solution. Although each of these processes may change to some extent based on the programming models and tools being used, fundamentally there are some roles, which every process has in one form or another. One person may be filling all the roles or a handful of the roles, or one very specific role. Despite this there is a need for all of the roles -- each serves a purpose. From Subject Matter Experts, Functional Analysts, Solutions Architect, Development Lead, Developer, Quality Assurance, Deployment (Deploy), Training, Project Manager, to the Development Manager, each role has a set of critical skills required. Download the paper from here. (free registration required)

The Future of Software Development

Last modified on 2009-08-06 15:02:19 CDT. 0 comments

Software development has come a full circle states Alex Iskold in a scathing, pull-no-punches broadside upon the Waterfall model. Read it here: the future of software development Alex states that arrogance was the main problem with the waterfall model. The arrogance he argues came from the fact that we believed that we could always engineer the perfect system on the first try. 37 years ago, W. W. Royce published a sequential development model, coining what is now known as the waterfall model. This approach applied the insights from mature engineering disciplines (mechanical, civil, etc.) to software. The idea was to construct systems by

  1. first gathering requirements,
  2. then doing the design,
  3. then implementing it,
  4. then testing,
  5. and finally getting it out the door in one linear sequence.
Ironically, Royce actually argued in this presentation that this was a flawed and actually proposed what is known as iterative design. 37 years - a lot has happened, and we have come a long way and (hopefully) have learned a lot about making software. However, in the real world, (and in other unreal places that I happen to work in) software projects have ill-defined and constantly evolving requirements, making it impossible to think everything through at once. This effect is compounded by the accelerating pace of business. Older development methods completely fail to address business needs. The Waterfall Model is rigid and unrealistic and incapable of rapidly adapting to and keeping pace with the changes to the business. Using the Waterfall Model, these
  1. changes were impossible,
  2. the development cycle was too long,
  3. systems were over engineered and
  4. ended up costing a fortune,
  5. and often did not work right. ;-)
In nature, dynamic systems are not engineered, they evolve.
  • Build small and then add on.
  • Model the Happy day scenario. Leave the esoteric corner cases for another day, another release.
  • You cannot and must not code for *all* the weird and *potential* use case scenarios
  • Build pluggable frameworks
  • Design to integrate
  • Leave the system open, and flexible
The solution to achieve these niceties, it appears is an age old one. In 1975 - (a few years after the Waterfall term was coined), Fred Brooks famously propounded that "Adding manpower to a late software project makes it later" in his book titled The Mythical Man-Month: Essays on Software Engineering. However we see this mistake repeated everywhere; and in every project that is going sour. "Throw-more-resources-at-it", will probably get you a few more months out of your aging PC - but hardly ever speed up the project. Alex evangelizes the adoption of agile methodology as proposes that in the future, software will be developed by "Just a Few Good Men" and provides a simple overview of Agile Software Development Principles:
  • Have Fun
  • Focus on Simplicity
  • Adapt the code
  • Embrace Change
  • Get feedback
  • Refactor
  • Communicate
  • Release Often
  • Test
.. and concludes with his forecasts for the future:
  • High-quality, passionate software engineers will be in very high demand and will make substantially more money. - Good!!!
  • The developers who do not have great programming skills are going to have to look for jobs elsewhere. - hmmm... why are they in this industry in the first place?
  • The changes that we are witnessing today in the social software market are going to reach the enterprise level. - SAS? the Web is the computer?
  • Software off shoring will make less and less economical sense. - why so? does agile software development going to make the world less flat?
  • Computer science is going to remain a highly competitive and prestigious field. - sure hope so.
While I agree with Alex's theme in general, with respect the Agile methodology adoption, I fail to see why off-shoring would get affected by this; Unless this this is was just a general comment. On this topic, I had a brief chat with a colleague of mine, another proponent of the Agile methodology himself, and he argued
  1. it would not be possible to have synergistic agile teams across the seas and across timezones.
  2. Agility would be impeded due the overhead of heavy documentation; people would not understand the business properly otherwise.
  3. it is not cost effective to have several delivery dates from offshore
I smiled in reply - it will evolve.

J2EE v/s .Net

Last modified on 2009-08-06 15:09:37 CDT. 0 comments

[Originally posted Friday, November 26, 2004 @ Caffeine Kick] While I know that several Terabytes of data have been generated in the online and off-line feud over what's the better, I decided I wanted to join in with my own rant as well. I have several issues with J2EE and Java, at least the way we have it today. I'll talk about one of them here. There are just too many ways of doing any single thing. Take persistence frameworks, application servers, MVC frameworks, testing frameworks.. the list is virtually endless. For each and every thing that I want to do, I have at least two (usually more) options to choose from, each better, faster, lighter, easier, cheaper… xyz-er than the other. While I understand that choice is a good thing, what we have today is definitely an overkill. So much of time and effort expended on ‘deciding’ the ‘appropriate’ ‘stack’ to use… only have that sinking feeling 1-month into development, when an even better, even faster, even lighter, even easier, even cheaper and … even xyz-er, brand new way of working surfaces out of the blue (usually apache / SF or someplace similar) To EJB or not to EJB is usually the first question, then follows a plethora of nerve wracking choices .. Hibernate or Spring, Struts or JSF, XML or Resource Bundles, Weblogic or Websphere… you get the drift. .Net on the other hand is much more straight forward. You have one vendor, who gives you all the damn stuff that you need. You concentrate on the work at hand. In .Net we do this like this, and that like that. Over, Simple, Period, Full Stop. No further unpleasant DAR (Decision Analysis and Resolution documents), no further uneasy CAR (Causal Analysis and Resolution meetings).. No more irritating sales calls from SUN, BEA and IBM pushing their servers through, No more newbies in the organization with a conceited grin of mockery claiming "we could have done it better if we had used that 'other' framework". [Originally posted Friday, November 26, 2004 @ Caffeine Kick] Seriously, almost 3 years later, what has changed? AddThis Feed Button

Iterative vs. waterfall software development

Last modified on 2009-08-06 15:25:41 CDT. 0 comments

Nowadays, this question seems to figure at every technical interview that that I been involved with (at either side of the table). What would you choose - Waterfall model or the Iterative approach? The correct answer - it depends. The usual answer - some mumbling about extreme programming (followed barely disguised rant on how one was forced to use it). Classically, in development we use either the Waterfall or the Iterative approach. While the Iterative approach is more adept at accommodating requirements change, the Waterfall model treats changing requirements as the exception. However, this does not preclude either model or approach from accommodating change. In the waterfall mode - There is a long requirements definition and approval phase (the elusive sign off), followed by the subsequent life cycle steps (design / development / testing / deployment), and there is one huge grand ship date (the famed / dreaded go-live date). The requirements are considered sacrosanct post the sign-off and any change is expensive. In the iterative mode - The development cycle is actually a series of sequential and repeated short release cycles. This lends itself to injecting changes to the application without disastrously affecting the bottom line. While the iterative approach may seem the obvious choice; a panacea for all our problems, the choice isn’t really that easy. See Bill Walton’s take on iterative versus waterfall in Computer World.