Fear Driven Development - FDD
I had an interesting chat recently at a conference in the "hallway track." The hallway track is all the great conversations that happen in the hallway between sessions.
What drives your development processes? Are you a TDD house, where your tests drive development? Or, perhaps there's a chief architect who isn't a very nice person. We call this ADD - Asshole Driven Development. However, this chat was about FDD - Fear Driven Development.
Organizational Fear
Organization fear can have developers worried about making mistakes, breaking the build, or causing bugs that the organization increases focus on making paper, creating excessive process, and effectively standing in the way of writing code.
This "analysis paralysis" slows the entire project down. Every one is so afraid of the process that forward motion stops. There's a great post called "10 ways to lose a team" that covers many negative behaviors that can affect a team. Things like
- Forbidding one-on-one meetings
- Don't share information
- Implying that everyone can be replaced
- Micromanaging
All of these behaviors increase ambient fear and can cause a cloud of anxiety to loom over the organization.
Losing Your Job Fear
Other kind of Fear Driven Development is when an organization tries to get developers to stay far too late, work unreasonably hard, by implying that they'll lose their job at the sign of any problems with the project. Threatening jobs will never create a more productive team. It only perpetuates negative feelings and will always lead to people quitting. This also can cause management to believe that heroic effort is a common and acceptable part of the software development. An occasional "work push" is one thing, but if EVERY RELEASE cycle means a heroic effort at the cost of your personal relationships, you've got problems.
Fear of Changing Code
Another kind of Fear Driven Development is when your development organization (or your entire organization) is afraid of the code. Perhaps the code is older (legacy code) but more likely it's just not fully understood. It mostly works, but folks are afraid that a small change to the code could cost unpredictable side-effects. Fear of bug regressions - a closed/fixed bug coming back to life also stresses developers out.
Can you think of other flavors of Fear Driven Development?
* Photo by Stacy Brunner, used under Creative Commons
Sponsor: Many thanks to Aspose for sponsoring the blog feed this week! Aspose.Total for .NET has all the APIs you need to create, manipulate and convert Microsoft Office documents and a host of other file formats in your applications. Curious? Start a free trial today.
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
This made me realise FDD is common nowadays. How will one know if you are not yet part of that kind of organization? Its better to know before joining.
Fear of shame "I don't want to decide which approach to use because they'll shame me for wrong choice - better make Architect decide" - causes every single decision to be escalated
What kind of learning is that that has grown on fear? What kind of memories it produces? 'Oh I learned that and that really hard way.. there were no other ways to learn/achieve this for me and I must be stupid therefore'.
"If you don't do this they are going to cancel our project"
and
"We put all your names on the work item report so senior management knows exactly who is working on what"
The second one basically came out as a threat.
I don't think any other industry suffers as much on both sides of the estimation problem
The saying of 'Carrot and Stick' is what i can think of..Someday the donkey eventually decides to Chuck carrot and go for grass :)
Developers who have been working on a project for weeks, months or even ( occasionally ) years can lose track of the great work that they have done.
They can see all the "mistakes" and fret over the things that they have already implemented because they were'n't "done right" ( even though, they work ).
It can be very hard to push them over the line and get them to make release 1.0.
My rule: If you aren't embarrassed by version 1.0 you released to late.
-- every-other-week announcements of "if we can't make this surprise demo next week, we're finished" produced a lot of expedient but unmaintainable design and implementation choices (plus a lot of overtime)
-- fear of somehow limiting the appeal of the technology by committing to a feature set led to a whole host of horrors, including incoherent design and user workflow as well as feature specification via dropping more checkboxes in the WinForms UI editor
-- later, we were acquired by a much larger organization, where fear of producing a quote too high to make the sale meant that the hours that should have been spent on documentation were the first thing to go
-- fear of a specific, heavyweight SCM system created a culture of leaving big blocks of unreferenced and #if 0'ed code checked in, even after we switched to a SCM system where reverts and diff viewing were straightforward
*cough* Silverlight! *cough*
I was disappointed about Silverlight as well, but the web technologies have stepped up quite a bit.
you are joking about silverlight support. MS cannot even generate the async WCF proxies. Sorry we have a large app in silverlight and MS doesn't help enough move it forward.
Please distinguish between maintain and support.
How much did MS invest in Desktop .NET technologies (WPF)?
I'm sure that many companies must support win7 for another 7-10 years. And MS forces the new app model.
Who has a bigger fear?
Laci
On silverlight, well I think flash is dead in same way, HTML 5 replace both of them.
This leads to a slower development cycle, as estimates get padded too much, and over-engineering occurs. It also leads to a fear of doing the complicated matters, in an effort to put out a "safe" release.
"... this isn't a threat, but, when projects run late it gets harder to find work for you because you develop a reputation for not delivering, and it also becomes more difficult to get backing for contract renewals."
I've always admired great strategic thinkers.
What can you do to improve the situation? I found an old VHS player in the roof and started watching old episodes of The Muppet Show... I thought, just maybe I could reach this guy through better empathy.
It's all about people skills.
The sad thing is, i became so used to such environment that I thought that's how software development companies are run here in the states. Everything is about the bottom line, and FDD will always get you result.
Nevermind that 100% is ridiculous, nevermind that we have 3rd parties that stand in for us during downtime. Any change that generates downtime is looked at as poisonous to the continued survival of the business. It leads to incredibly unhealthy maintenance routines.
Fear of the customers.
"Our customers are all idiots. They won't understand this so we can't do it." Really? Then your customers will -always- be idiots. Anyone with any sense will flee your products like the simpleminded plague that you make them.
Now, back to FDD ... :-)
Fear to give ideas because some older colleague or manager will say after hearing only few words : "Oh no that's stupid, that's impossible, the manager will not accept it."
if(a)So when a new requirement came down requiring something special if a and b are true, instead of doing this:
do1()
else
do2()
if(a && b)you had to copy and paste the entire block, then add a new condition. This way you do not modify the existing code. So it becomes:
doSpecial()
else if (a)
do1()
else
do2()
if(b) {Slightly redundant, but no big deal, right? But that meant every new condition doubled the number of lines of code. I found an if statement that was literally thousands of lines long because of years of this duplication! The code was indented so far it required scrolling horizontally to see the conditions! I created a truth table and rewrote the if statement to be <100 lines. Then they explained the rule to me.
if(a)
doSpecial()
else
do2()
} else { // not b: code unchanged
if(a)
do1()
else
do2()
}
PS. I always enjoy you Scott, I love your articles and presentations but it was MS that killed Silverlight. We had solid solutions built and bought into that HTML5 and fancy javascript are not replacements for. Not even bad replacements. MS made quite a few of us look like jerks when they killed SL. Ending development is the same as killing it. I hope we can still be friends though. :)
Usually followed by Fear of taking responsibility: "I don't want to change their code because I will be responsible of any kind of instability I may cause"..
Ugh...
They also then wonder why they have so many "outages". I think you can feel my eyes rolling right now.
FDD is real and lives among us.
Occasionally I find myself worrying about the perceived level of work. Does the person at the next desk think I'm just chilling when I'm reading technical blogs? Does the boss? In the past I have let myself jump into coding before I was ready because I felt my coworkers (non-coders) thought I was spending too much time looking for the optimal solution to a problem.
The place was driven by fear and violence. The youngsters were taught their profession the hard way by threats and strict orders. Two special managers, young ladies, were in place because of their particular sense of bully and lack of total human qualities and empathy.
The old ones were maintained here by fear to lose their jobs. Near their offices, in the corridor, you could smell alcohol from the Thursday mid-day until Friday evening. It was tolerated to buy peace.
The telco client was quite satisfied of the result. The bosses made big money by selling the company years later.
That was the saddest place I ever worked in.
"Behind every big fortune there is a crime". Honoré de Balzac
There is a plethora of literature on stuff like design patterns and software design methodologies, but they never cover or make mention of 'Programmer psychology' and how it affects the end product.
I totally agree with you. One important aspect which I want to point out is 'guild driven development' which I would say is part of FDD. With the recent explosion in tools that can 'impose standards' and find faults with your code, I have observed a trend where a developer is expected to write code which will satisfy all the standards and best practices anyone has ever know; disregarding the time and money aspect of doing such a thing. It is assumed that it is the moral responsibility of a developer to write code which satisfies all standards and best practices, irrespective of the time given to him !
And yes .. did someone mention about 'Zero defect' requirement !
I know I can "do it right" if I try hard enough / spend enough time on it. I hold myself to a high standard of quality and ultimately my fear comes from from fear of not meeting that self-imposed standard.
Problem is, as I become a better programmer, that bar keeps shifting higher. I've been in industry for almost two decades now, and I'm still learning better ways of doing things. That keeps raising my internal bar. But, if I hold off on a release to the rest of the team too long, I hold them back. Truth is, my output was fine (perhaps excellent even), before I raised my own bar. So, that adds a second fear that is in direct tension with the first: fear of being the bottleneck.
Both of those are intrinsic fears, not fears due to extrinsic factors. To address those, I have to keep reminding myself that it's better to release something to the team with a bug or a limitation and fix it in an update than it is to keep delaying in an attempt to perfect it. No one will think less of me for the occasional bug, and everyone will be more productive with a steady, predictable stream of updates.
A company whose core business was online trading, despite my lack of knowledge in the field wanted ME, that i did mostly web integration and flash at that point, as a dev.
They sugarcoat it at first and,since was unemployed for a while with check running out, needed to work to pay my rent and my living since wifey was unemployed too.
Then they revealed their true face. The place had a very high turnover rate, as you can expect, despite that out of need i managed to stay there two years!
Had to pratically build the whole site, style the forum, install a multi-user blog, create the back-end for their sign up system -that had to integrate with SOAP with the platform and MS-SQL while the site was written in PHP/MYSQL, had live feed of streams on pages, lot of flash, video tutorials, a wiki, etc. AND also had to take care of graphics; the icing on the cake was that i had to administer all of it.
Requirements changed daily, sometimes affecting core features, manager literally breathing on my neck, for the next two years had to work 12 hours per day and even weekends and holidays to finish that thing.
On salary.
Reduced.
No vacation.
Questioned gestapo-style for every absence and scolded for every lateness, even of minutes.
Got screamed at every time a bug happen or a subscription appeared incomplete;
the boss, a micromanaging condescending figure required from me omniscence, complaining that every time i asked for feedback and more explaination.
At the end after i mostly finished all the work and platform was reliable enough got laid off. While still US in crisis. Despite having no more income for me and wifey felt relieved not to be there. While indeed this job had a strong influence and helped me doing the ropes for being a Dev, i would rather starve not to find myself in the same condition again.
Using a pseudonym because the owner of this company was pretty paranoid and used to google itself and employers for every reference: it also caught me one day updating my resume!
There are lots of examples in these comments from people who have experienced badly managed teams and projects, but few explaining what a well-run project or team looks like. Is that because nobody has ever worked in one or that they will moan whatever the arrangement is? What have people done to try and fix their situations?
Maybe the job market is different in the US, but in the UK, certainly in the big cities, talented developers can name their own price. If you're in a bad situation, have tried (constructively) to improve it but you're not being allowed to, then leave.
I think people are also neglecting the fact we live in a fear-driven world. There are plenty of industries at the moment where if that feature doesn't ship on time or if customers slam you in reviews because what you released is buggy, then companies will go out of business.
Too many developers seem to feel that they should be insulated from this and be allowed to develop as they see fit, in their own sweet time. In what other job are you allowed to behave like that? Grow up.
Neither my world nor my dev job is fear-driven. That's not to say it's paradise, but it comes pretty damn close to how it ought to be. Team and management supporting each other, insistence on work-life balance, and creative/generous compensation and benefitting are all hallmarks of where I work. It CAN be done the right way, and it CAN result in a dev department that wins awards and gains trust in the company for competence and productivity.
I've lived both sides of that choice; in fact, I just came from a fear-driven situation. And I'm not ever, EVER going back.
Read more interesting comments there:
http://ask.slashdot.org/story/14/09/17/0035238/ask-slashdot-have-you-experienced-fear-driven-development
Comments are closed.
In addition, fear of the unknown leads to over-engineering. It's quite a curious occurrence to mix poor planning _and_ over-engineering. It sounds impossible, but it results from focusing on the wrong things.