Click here to Skip to main content
15,885,546 members
Articles / DevOps / Agile

Learning to Embrace Changing Requirements

Rate me:
Please Sign up or sign in to vote.
4.82/5 (13 votes)
11 Feb 2014CPOL4 min read 22.3K   11   5
A personal story about changing requirements and agile software development

Introduction 

This is a story about how old-school software engineering principles failed me and how I learned to embrace change. I'm sharing it in the hopes that it can help others understand better understand one of the core principles of agile software development: responding to change over following a plan. 

The confusion of agile 

The principles of agile software development were first proposed thirteen years ago. Unfortunately today there is a lot of confusion around what it is and how it should be used. I attribute this in large part to the fact that it became an industry buzz-word where “agile” became synonymous with “good” and the ubiquitous two-day training on scrum processes watered down the original intent of the agile software development manifesto.  

 I think you have to truly understand the pain and failure of waterfall software development in order understand what motivated those seventeen software development gurus to get together and figure out why their industry was broken and how they could get it back on track.   

A young programmer fresh out of school  

Back in 1996 I was a young and idealistic software developer fresh out of school. I was eager to apply my new found understanding of software engineering principles learned at school to my job.  At that time I worked in a neuroscience research lab where I created data acquisition and analysis software for a researcher and his colleagues. I wanted to do an excellent job and I was determined to make their tools into the best software they had ever imagined. 

The big idea  

I started my project by carefully gathering a list of requirements from my boss and getting him to sign-off on them. I then started off on a giant rewrite of the software he was previously using. It took me months to get to the point that I was proud enough of what I had done that I would let him use it. It had many of the features in the requirements document and many more that he hadn’t specified (but I just knew he would just fall in love with them!). I was also terribly proud of my beautifully engineered object oriented framework that would allow me to add so many more features that I was sure he was going to ask for.  

The let down  

Guess what, after six months of hard work he didn’t like a single new feature and was upset about several missing features from his original software. Those features were never captured in the requirements document. I was upset, how inconsiderate of him to not respect the requirements and to not shower me for praise for all of the great features I added. Of course this was defensive thinking, I was actually mad at myself for having let him down.

I went away and reflected upon the golden rule of customer service which is “the customer is always right”. In this case the customer was my boss, but this line of thinking meant somewhere along the line I must have screwed up! How could that be? I had done everything by the software engineering book. 

The realization  

After thinking about it at some length (some would call it obsessing) I realized that the problem wasn’t me and the problem wasn’t the customer, it was just that the software engineering principles I learned in school had overlooked basic human nature. People don’t really know exactly what they want until they try it, and their needs and desires constantly change.  In other words I had learned a truth about software development: 

Requirements are constantly changing. 

A new set of principles 

From that day forward I vowed to give my customers working software as early as possible and incrementally improve it according to their feedback. This meant: no more grandiose software frameworks in anticipation of feature requests that never came, no surprise features that were never asked for, and no more withholding software from the customer until it was “just right”.   

Final words  

These principles have of served me well for over 15 years and I continue to see them echoed in articles about software development best practices, and often more eloquently than I have expressed them here. Unfortunately the core ideas are still somewhat misunderstood and overlooked in many larger organizations that declare themselves as having adopted "agile" engineering principles.  

Having shared my personal experience, perhaps Agile development principles might make a bit more sense to you. Always remember: being agile is not about scrum meetings, velocity calculations, planning poker, or any of those process artefacts. It is about putting the ego aside and collaborating directly with the customer. 

Acknowledgements   

Thanks for taking the time to read this personal account of my early days as a software developer, I hope you enjoyed it. I also want to give a big thank you to my old boss Dr. Matthew Shapiro who inspired in me a love of software development and who was always so patient, supportive, and inspirational.  

Recommended reading 

Here are some related articles that I recommend reading:  

And if you really liked this article check out my other articles at CodeProject.com.  

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer Ara 3D
Canada Canada
I am the designer of the Plato programming language and I am the founder of Ara 3D. I can be reached via email at cdiggins@gmail.com

Comments and Discussions

 
QuestionExcellent Article But There's Deeper Issues... Pin
C Grant Anderson17-Feb-14 8:48
professionalC Grant Anderson17-Feb-14 8:48 
Excellent article but there are deeper issues at work here. And these deeper issues not being adequately addressed are the reason why existing software development methodologies do not work well. Please take this as constructive criticism that's helpful to get to the heart of the problem(s). First, you missed several important features in the existing software that you were trying to replace. You did this because you either did not understand exactly what the software was doing and/or how your boss was using the software. Your boss didn't include his very important features that he uses every day in his/your requirements list because it is a common human failing to be unable to completely and adequately state a complete and prioritized list of anything one routinely does be it directions to/from home, a list of what one does every day, a list of favorite songs (some good ones will ALWAYS be missed), or how one uses a software program. This is not your omission. A requirements list is absolutely required for software development but we never ever seem to have ones that are adequate. This is your "requirements are always changing" point.

The cause of this is very simple: Human psychology. And it's application to software development. This has been called "Software Psychology" and had a brief emergence with the book of the same name by Ben Shniederman in 1980. It has largely been forgotten and ignored but was an excellent start on this subject - How human psychology affects software development. And how it actually determines the success and failure of software development. Since few psychologists are software developers it's rather unsurprising that this has escaped everyone's attention since then. However, having a Master's degree in psychology and extensive experience in software development I intend to dust off this old subject and re-invigorate it for practical application.

One excellent approach that I've used time and time again on my software development projects is to quickly build a working prototype, show it to the end users, and get real time feedback on what's good, what's not, what's wanted, and what's not. This used to be called "Rapid Prototyping" and it should be an established Agile technique. Then do weekly or bi-weekly build-release-demo-get feedback sessions and you'll still get a fair amount of variance in the requirements over time but you'll get much faster and a much better end state software deliverable. This works quite well in my experience and there's also some tuning that one can use with this approach that improves it.

Now if your boss would have sat you down and let you look over his shoulder while he used the application and you took notes you would have seen exactly how he used the program and what features were critical to him. This is often not done in software development but should be. I've seen this technique mentioned from time to time but never actually included in a formal methodology. It should be because it gets around the missing requirements problem nicely and then can be coupled with rapid working prototyping and weekly releases. This makes Agile a whole lot more agile and on time and target much more often.

I will be posting a series of articles here on Code Project about Software Psychology and how it can be applied to common software development situations such as this one. Thank you for sharing your experience with us (and me). Please let me know what you think of these suggestions. Thank you!
C. Grant Anderson

SuggestionExtremely well written... Pin
CoderPanda4-Feb-14 18:31
professionalCoderPanda4-Feb-14 18:31 
GeneralRe: Extremely well written... Pin
Christopher Diggins11-Feb-14 4:13
professionalChristopher Diggins11-Feb-14 4:13 
QuestionAwesome Pin
.dan.g.4-Feb-14 14:38
professional.dan.g.4-Feb-14 14:38 
AnswerRe: Awesome Pin
Christopher Diggins11-Feb-14 4:09
professionalChristopher Diggins11-Feb-14 4:09 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.