Is Process Killing the Software Industry?
blackbearnh writes "We all know by now that Test Driven Development is a best practice. And so is having 100% of your code reviewed. And 70% unit test coverage. And keeping your CCN complexity numbers below 20. And doing pre-sprint grooming of stories. And a hundred other industry 'best practices' that in isolation seem like a great idea. But at the end of the day, how much time does it leave for developers to be innovative and creative? A piece on O'Reilly Radar argues that excessive process in software development is sucking the life out of passionate developers, all in the name of making sure that 'good code' gets written. 'The underlying feedback loop making this progressively worse is that passionate programmers write great code, but process kills passion. Disaffected programmers write poor code, and poor code makes management add more process in an attempt to "make" their programmers write good code. That just makes morale worse, and so on.'"
If you want to go off and do your own thing, fine. Have at it.
But don't expect to write code that keeps a 777 safely in the air. That is the type of scenario that we need discipline, not creativity.
I'm all-too-aware of this issue and how quickly it sucks the life out of you and prevents anything from getting done, but at the same time obviously having no process doesn't lead to stellar code either. My question is, do any of you work in a place where you think you've struck the right balance? What are you doing?
Dislike the Electoral College? Lobby your state to join the National Popular Vote Interstate Compact.
70% unit coverage? CCN complexity 20? Pre-sprint grooming of stories? This article is apparently not meant for a general geek audience. Can someone translate these terms into something that non-professional programmers can comprehend?
Part of the hardcore faithful who believed in Apple long before it was cool again to do so
Yes. When you need to spend almost as much time learning how to and using the tools, processes, and configuration than actually producing code... then yes. And no it doesn't always help make better code. A lot of the time it takes time away from making code good.
-- I ignore anonymous replies to my comments and postings.
Get rid of management!
Karma be damned, this is relevant to TFA:
This is why I left development. After 5 years working at a software company I found that only 10% of my time or so was spent writing new code, which is the only thing I really liked about the job. The rest of the time was spent in meetings, wading through red tape, reviewing others' code, doing maintenance on the (junkpile) legacy system, doing remedial training for the front-line tech support staff, and the 5 million small tasks that have nothing to do with why I went into the career field.
On one hand, I can understand the creative process that goes into coding and the 'fun' you have in making it your thing.
However if you're likely to have millions of people depending on your code, which will alwso be modified by other people, then you had better have a good process as well.
I used to work at a company which required that pretty much all the important pieces of code have JUnit tests for them. Whenever someone else touches your code - which is bound to happen (I was modifying code which was written years ago - and the author wasn't employed anymore), it'll be a good thing if you know you haven't smashed anything.
So there's a time and a place for everything. If its very important code, yes please, strictness. If its something small and silly, then go creative on it.
I've worked on projects where they had procedures as thick as a phone book, and it was still possible to write crap code. In fact, due to the incompetence of the person who wrote them , they sometimes pushed you into writing bad code.
On the other hand, some programmers produce good code, whether they're specifically ordered to or not.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
That about sums it up. If they're so keen on doing it their way, then they can do it!
I think may be the guru-disciple system of education practiced (allegedly) in ancient India might bear better fruits. Guru lead teams with disciples learning from them might turn out better quality code, but the system would be expensive in the short run and takes a while to take root. The quarterly bottom line obsessed corporate world is as far away from the system of stoic ascetic guru living in a hut in a jungle accepting princes as students romanticized in Indian mythology.
sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
Only about 10% of programmers are "artistes" who create new things of beauty...process stifles those.
80% of programmers come to work more-or-less on time, sit where they are assigned, work using the tools and processes given, and produce most of an organizations output. Process is beneficial to those, in that it makes their work useful in the overall "whole."
10% of programmers should be fired before they do any more damage. A better HR process would help with those.
The first version needs to written with passion. You then throw it away, and write the second version seriously. Also, code for your next php-driven social-thingy must be written with passion. Code for the satellite, not so much.
Religion is what happens when nature strikes and groupthink goes wrong.
"We all know by now that Test Driven Development is a best practice."
No, TDD is a painful waste of time that at best serves as a crutch for unskilled or insecure coders and at worst a smokescreen behind which serious bugs remain unfixed because they aren't picked up by any test cases.
The main issue is that measuring whether code is good or not is impossible. I promise you that I can write code that has the prescribed level of unit testing and complexity that also doesn't work. Software reliability/dependability was a problem in the 1960s. It's still a problem today. No silver bullet, and all that.
What really cripples things is when process is deemed a substitute for understanding the specifics of individual situations - where a one-size-fits-all-problems approach is adopted and imposed - usually by people who have no practical experience with the processes they espouse.
If software development could be successfully reduced to a process, I'd have automated it. Where there's a considerable burden of process, either the process is inappropriate - or developing the software itself is inappropriate as it amounts merely to re-inventing the wheel... an exercise in task creation that benefits no-one.
We should think of software development techniques and apply them judiciously - and the more techniques a developer masters, the wider their skill-set and the better they will adapt to new challenges. The critical question that needs to be asked is this: why is a technique being used and is it providing tangible benefits? If this question can't be adequately answered, everyone involved is wasting their time.
There is a balance between process and actually getting things done. Most companies never find it. The biggest problem I have is when this is used to audit progress on a task. For instance, I am a consultant for a company just starting to get out of startup mentality. There's been a push for more process and they've implemented their version of Agile. One of my first tasks was to write a script to dump data from Agile Zen so they could run reports on how fast developers are finishing stories.
Fail #1: All stores are not the same size! ...
Fail #2: Each team has different rules for stories and use agile zen differently. How do you compare them?
Fail #3: About half my time is spent in meetings, writing stories, fighting with QA to test things (not enough people). I'm supposed to do the same amount of work in half the time?
Fail #n: You're doing it wrong
The worst part is that when we had PRDs, at least there was a big picture loosely discussed. Now we get stories that don't integrate with each other and a big ugly mess.
MidnightBSD: The BSD for Everyone
Passion isn't important. Cost and risk are important. The processes are put in place to (attempt) to minimize cost and risk associated with software development. Experience teaches us that cost and risk are very high when building software.
When it's your money paying for the development effort, feel free to structure it so that you can chase your passion.
I sympathize with the idea that this kind of bureaucracy can suck the life out of developers, but guys, this is work. If it were that fun, they wouldn't have to pay you to do it.
-- Truth goes out the door when rumor comes innuendo. -- Groucho Marx
As more and more DRM "solutions" are deployed, and the DRM systems themselves get larger, more complex, and more expensive, I think you'll find it not far from the truth that: "Process killing" IS the Software Industry.
And most software is not written by one individual.
As soon as you have an actual team writing software and as soon as there are others telling this team what they have to code, you need every bit of control you can get. There's no way around that and every anecdote "proving" you can get away with passion and good coders just proves that you can be lucky.
This is really the key insight of most Agile methodologies. Development should own the process and change it to suit their needs during regular retrospectives. The team (not the whining individual) should be able to say, "You know what, I think we're not getting bang for our buck out of this many unit tests, let's shift to 50% coverage." As long as that same team is taking ownership of the regression failures and making an informed trade-off their comfortable with, all is well.
If you get a good team together, you're going to get good code. You'll get better code if you empower them. Experienced and good teams will usually have a lot of these processes and tools in place because noticing things like high code complexity automagically alerts them to "bad smells" that can be examined and either accepted as necessary or invested in to address or test more thouroughly.
Generally, I think development is most fun when you're on a new project and don't give a damn about breaking things. Then it's pure creation. But once an app is older and there's some weird code you're staring at you have to decide, "is this probably a bug, or is this a bug fix for some weird situation or platform?" That's when you wish that the guy having fun three years ago had written some damn tests.
Like in everything else, from economics, to love life (whatever it means for different people), there needs to be competition in software development. This means performance based compensation, this also means getting rid of those, who cannot achieve.
Developers should get goals in terms of business questions, then they should be let to do their own estimates and they should 'bid' on projects. There should be tracking of the success of different projects - from accuracy of estimate time and cost to number of features, to number of bugs per unit of time, to overall user satisfaction, to amount of time it takes to fix a bug or add a feature (this really would measure complexity and cleanliness of the code), to the average amount of time it takes the support team to deal with user issues (cleanness and usefulness of documentation.)
It is possible to do this, of-course large organizations rarely if ever achieve this level of 'enlightenment' even to start thinking about things this way, that's mostly because people do not understand economics, it's not about software.
You can't handle the truth.
Process isn't the problem, environment isn't the problem, language isn't the problem. The problem is that everyone looks to all of these things as the silver bullet that's going to "fix" software. Test driven development doesn't make good software any more than I-495 makes New York City. There is no silver bullet.
In most engineering disciplines, the process of actually building something is long, hard, expensive, and persistent. If the project is build a bridge, you spend a lot of time making sure the design is right; why? because the process of actually building the bridge takes months or years, costs many millions of dollars, and once built is not easily replaced. There is no room for error, so process is taken very seriously as a central part of ensuring timely cost-effective correctness.
In software, the process of actually building something is instant, easy, free, and transient. Type "make all" and go get some coffee; find a bug? tweak a couple lines and do it again. This distorts the development process; "process" gets snubbed as a costly distracting annoyance instead of the means of assuring that what gets delivered is correct, because it's just so dang easy to fix and rebuild in seconds ... losing sight of the long-term cost of not doing it right the first time.
Can we get a "-1 Wrong" moderation option?
Processes are defined in the manufacturing industries to prevent slippage of 'achievable/defined' quality. Unfortunately the extension of processes from these industries (six sigma?) to software development doesnt reap the intended benefits.
Blame it on the guy who thought the role of a programmer and the line technician are the same!
i've seen supposedly passionate coding in practice. good people but it's almost impossible to work with them since they social outcasts.
a software release turns into a 4 hour nightmare because everything worked on their dev laptop but in the real world it doesn't work and they have to figure it out. but they don't give you all the information and you have to wait on the phone at night while they tinker and fix it in production. meanwhile employees can't take customer trouble tickets.
or the billing system can't make customer bills because it's now multi-threaded but there is no system to control which bills are processed when and the different threads lock each other out in the database because some selects lock down most of the table. yet the code is good and can't be changed
A wise elder at a defense contractor once told me that process was like cholesterol. You can't have none. But too much will kill you.
Except for ending slavery, the Nazis, communism, & securing American independence, war has never solved anything.
While all you process-laden geeks with your SCRUM teams and unit tests are getting the life sucked out of you in the Valley, we here in Automation Alley live by the seat of our pants, Montgomery-Scott-style, delivering barely-passable code on time, with the enhancements and 80/20 fixes to be pushed ahead of next year's model refresh, and a keen eye on the Bugzilla board, waiting for our user community to serve up the bug list. Thrilling, I tell ya.
Didn't yo mama ever tell you not to buy a first-year model?
Makin' money, makin' friends, makin' whoopee and wearin' Depends
Of course doing everything to an extreme isn't a cost effective way of working. If he has his way the other developers on his team would leave or kill themselves: "But, for example, maybe junior (or specialized) developers should be writing the unit tests, leaving the more seasoned developers free to concentrate on the actual implementation of the application.". Sounds a little arrogant to me.
Are you finding the majority of your code is actually made up of unit tests?
How can you be confident that your tested code is safe when delivered into the clients hands?
Introducing Meta-Test(tm) - with this breakthrough in software engineering methodology your drones can increase their coverage numbers without writing a single extra line of application code!!!!
Hurry! Don't miss your spot at our upcoming seminar where you will receive details on how to send your drones to our new training sessions that you can bill back to your clients and put your project even further behind schedule!!!
Andy Warhol got it right / Everybody gets the limelight
Andy Warhol got it wrong / Fifteen minutes is too long.
I've always been passionate about my code and attempt to test as much of it as possible, but I've found what saves on testing / process is discipline in coding style, commenting, consistent use of language idioms, good function / variable names, checking all function returns, lots of debug logging... Lots of little things that a programmer can do to help them read and diagnose their code during development and testing. It also helps to work with a "testing" partner (an element of Extreme Programming). I don't formally follow Extreme, but I do know from experience working in pairs or on occasion threes works really well: let the passionate go nuts with the support of a tester who should be equally passionate about that aspect of code (it is possible to find), and maybe the third is simply a mentor to overview and act as a sounding board for design ideas and problem solving. My partner and I will often discuss and compare ideas again and again; I'll code something, test it, then pass it to him to test it in depth. In many ways it becomes a game to write the code clean and for him to fault it. http://www.dailywav.com/0600/kaboom.wav
And i love programmers how manage to encapsulate good ideas in a way that they are not harmful.
If you want to see what happens when you keep layering more process on to try and fix perceived problems, just take a look at how any bureaucracy makes decisions. Government is well known for doing things that don't make any sense in the real world, and the reason why is that our (I work for a government) decision making isn't based on reality. Or even decision making, for that matter. It's all based on following a process and doing whatever comes out at the end. With enough process and a process-focused group of managers, the results don't even matter. Literally, this is the way people think: "Whatever happens has to be right because we followed the process, and if it goes wrong it's not our fault because we followed the process!"
There's always going to be some level of organization and control that is needed when several people are working on a common project, but you have to balance that with the need for people to actually think. When you pile up process on process on process you remove that and instead get a bunch of people who can't see what's actually going on because they're too busy complying with 14 different processes.
This particularly applies to software development. It's really important for a team to pick out what they specifically need for their project and what works for the team. Throwing in something like (for example) Test Driven Development just because it's currently a buzzword-compliant process won't get you anything except a lot of wasted time. Sadly, bad managers love to do exactly that because adding more process is itself a good CYA (Cover Your Ass) process.
-- "So they told me that using the download page to download something was not something they anticipated." - Bill Gates
The real problem is that methodologies are followed, taught and practiced like religion instead of science. A new buzzword or buzzphrase and a new way of doing things will never substitute for thinking through whether what you're doing is actually working to attain the goal you've set out. Unit tests for example are brilliant when the developer gets control and is honest about using them. This almost never happens in practice. In practice unit test coverage becomes some bureaucratic check box to tick. What's worse is that there are dozens of industry expert consultancies wanting to sell you their own particular brand of excrement which may have some merit but the way it's sold - as a fix all for everything - will never be anything but a pile of poo.
These posts express my own personal views, not those of my employer
Depends on what the software is doing. If it's controlling my car or my mom's pacemaker I want the developers having a passion for making sure the code is 100% correct.
Too often "process" and tools are used as a substitute for competence. It's VERY easy to follow process and design patterns and use all the latest tools and end up with a brittle design & implementation. It's also easy to create a very similar design/implementation that's is robust and extensible and easy to maintain. And 90% of the people I've worked with over the last 10-12 years wouldn't be able to look at them and determine which is better (they'd most likely say the first is better if they were told the name of the methodology and design patterns used). After a year where the first fails repeatedly (crashes, can't meet new feature deadlines, etc) and the 2nd has been a huge success, they couldn't tell you why.
The creativity should come from Designers now. Developers just implement the design. It is the Designers that need the passion, Developers don't have that role anymore.
My problem with process has always been budget. Folks higher up budget on the basis of minimal process and expect full process. If you want 70% unit-test coverage, that is twice the time the code would have taken if you did not write unit test. Add 3 times the time if you want good integration tests to go with it.
Unfortunately, this makes a project costly. The problem occurs if the PM then demands full process when the time is not accordingly budgeted for it.
Release cycles also become long.
That's fine, but what will you do with all your spare time without an income?
I know that one particular development group at Apple found considerable gains in productivity from using unit tests consistently, where every time they fixed a bug, they wrote a test to confirm the fix. The upshot was that they spent far less time chasing down regressions than they did before they adopted the policy.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
If you hire only Rock Star level developers then you need very little process. Most process is about mediocre managers looking to minimize the impact from mediocre developers.
Seriously, there's a place for creativity in the development process but there has to be some level of validation. There have been many attempts at coming up with the best process including Agile however they all endeavor to separate the artistic part of coding from the brass tacks of getting the work done in an accountable fashion. More businesses today look at developers as "resources" rather than folks who have to literally create something out of thin air. With "Design Patterns" we had a set of templates now that architects could throw on a UML diagram and behold "that's what we use, don't divert from the path." With TDD we now had "code coverage" so we could think about what the testers should be doing rather than actually making the algorithms and business logic work. I remember, many years ago, sitting in a room with our VP of Software Development. He had just bought a new tool that analyzed code. It wasn't Coverty, it was something else. Anyway, we used to do peer reviews within the Architecture team and we didn't do it on check-ins either, we did it on random sections of code with developers who we thought could use the help. It was meant to be a learning experience, both ways. Well he plops down this tool which naturally looks at all the wrong shit "you only have 2% comment coverage, our standards say a minimum of 25%." To which I promptly retorted "who picked that number? Our standards are that we comment logic that isn't intuitive." To which the meeting then went on to focus why the developer didn't use exception based handling in the code vs. checking return codes after every system call.
That's the problem with a lot of these tools, you have some dipshit in authority setting the standards. Things like burndown rates are there to give the project managers something to do. Now, while I think that this article is a pile of shit, there is some truth to letting developers use their creative skills. Certainly, prototype. Create. Work till midnight on that new bubble sort algorithm and test. Of course you can write a better bubble sort, you know you can, and if you just did it there would be a 50% savings in CPU cycles for this splash screen in the first 1/2 second of elapsed time. Do all of this but also realize that there's deadlines, standards and testing that has to be done. Also realize that you won't be the only person who has to read that code and while you may think that it's perfect, in a year or so you'll think it's ugly because it hasn't been written in the latest language or you just learned that neat new template class mechanism and could eliminate 50% of what you wrote and just use templates! Sometimes you just have to leave it alone and call it done, which is the biggest problem in software development.
Have the bean counters gotten in the way? Yes, but remember they're the ones who have to show management that you're tracking on schedule and delivering something that will work; keeping you employed.
Harrison's Postulate - "For every action there is an equal and opposite criticism"
You can use mediocre programmers if you have (and enforce) good development process and train them in best practices. Being able to build code that is easy for the programmer to read (and others to read), separation of sql/html,css,js/ etc into their respective parts of the MVC/ORM pattern, consistent inline documentation, consistent comments on code checkins, etc., following the same rules for writing code (development docs)
A good development process can alleviate many of the problems with having to do all that testing as you test because you have a bad development process wherein you are unable to easily have the developer look at his comments, his documentation and his clearly written code and go 'oh thats the issue'
Not saying this will ELIMINATE the need for testing but this reduces the need for at least 30-50% of it if everyone is properly trained in a good development process and it is enforced.
This is my sig. There are many like it but this one is mine.
Software professionals aren't deterred by software processes; some may B&M that writing test cases for a UI is a PITA and a waste of time, but a professional software engineer doesn't mind this extra work, because it's just part of the job. Architects, Doctors, and structural engineers have processes that they need to follow, and so should software engineers. Software engineering has only really been coming into its own in the last 30 years, so it's still a young engineering discipline, and the entire field is still struggling to come up with a guide-book. From the stakeholder's perspective: software is crushingly expensive. It takes many man-hours to develop quality software. Project management processes used by "metal-benders" who actually produce a tangible product didn't always map well to software development practices; but 30 years ago that's all anybody had. The last 15 years has seen a huge improvement in software design processes. Much of what was thought to be the last word on the subject (SEI/CMMI, and ISO-9000) turned out to be impractical, inappropriate and/or counterproductive in the real world. Newer mentalities like Agile, and XP are much better suited, but are usually snubbed by middle management tiers because the control gates require qualitative decisions not quantitative. Any idiot can sign off on a status report if X-many bugs per Y-lines of code is met. ---But when decisions need to be made solely on subjective opinion and experience, then suddenly nobody wants to sign off on anything; requests are denied, decisions are postponed, and the project suffers. That's not a problem with processes, that's a problem of ineffective leadership, and it's endemic in the software industry. --But that's the subject of an entire other essay...
Process is killing much more than the software industry. It is hacking its way through creativity everywhere. And personal initiative. And responsibility. When the process gets the responsibility, then you need corrective processes to cater for process failure. And "dynamic processes" to improve process improvement. Etc.
Although I am involved in several ITIL implementation projects, I have stopped believing in the CSI (Continual Service Improvement) and a few other processes along the way. Instead one should foster a culture that aims to improve.
It is unfortunate that Toyota's success has made processes the Universal Truth in business. It is not. There are a whole list of items much more important than processes in any company, such as
Is the business operating in the right market
Does the company deliver the right products or services?
Do they have the right personnel?'
Does the company have the right management?
I recently came home from Tanzania where I delivered a talk on ITIL to some 60 people that had never seen a PC or a white man before, and interestingly enough; Processes was not among their chief concerns in life. And I betcha that if we tried to enforce processes on that village, their spirit of play would not get nourishment.
Some food for thought:
http://isene.com/processability.pdf
http://isene.com/liquid.pdf
http://www.twitter.com/isene
an agreed upon way to communicate and it should be chosen by the team rather than imposed on them. People who think otherwise, especially people who think they can reduce software development to a process are really claiming that they can implement artificial intelligence using people pushing paper as their computing model. Any computer scientist will laugh at the idea, but it does not stop pure managers trying to do exactly that.
As the island of our knowledge grows, so does the shore of our ignorance.
So, in the article he does suggest some process is probably good. That's good. But then he suggests that "better" coders might need less. In practice, that is probably true, but his implication goes farther than "let's hold the hand of the junior guy a bit more."
So... how to architects, civil engineers, electrical engineers, graphic designers, technical writers, project managers, and, I dunno... just about every white (and blue, for that matter) collar employee stay "passionate" in the face of some level of process and bureaucracy? How would you like to go on a bridge (or a plane, as others have mentioned) built by folks who are so smart they don't need any process to validate their genius?
This sounds more like "I'm so good I don't need to do these dumb things that slow me down" and less "perhaps we should keep the process just at the point it is beneficial".
I just spent two years with a team of 6 refactoring a critical legacy application built and maintained by people who were "smarter" and "better" than code reviews, TDD, planning, documenting, or hell, breaking that 8K header file into header/class and maybe even into a couple of objects. And truth be told: they were ALL really, really smart.... and really, really willing to cut corners just to "get something done", resulting in an unmaintainable mess that cost us somewhere in the neighborhood of 1.8MM to clean up.
To all you guys who are WAAAAAY too smart to have processes: that's awesome. Please just go work somewhere else, preferably someplace I'll never work.
a lot of software is still developed in the same a way a master blacksmith might craft a piece of work
many companies think they can treat software development as a factory mass-producing generic products with ISO9000-alike paperwork
So, your code is a pile of s**t? It doesn't matter, you followed the company approved guidelines, created the necessary documentation and so on... Oh, yes... and you'll fix it in the QA phase ... well, may be.
Programming, motherfucker.
If you reply, do so only to what I explicitly wrote. If I didn't write it, don't assume or infer it.
Please, come work for me!
I always love it when the developers working in my group tell me to shove my directives up my ass!
Why are you letting these clowns ruin our country?
Bad processes imposed by incompetent non-developers, who do not understand what they are doing and why do.
The most productive teams I've worked with didn't take the entire process, they took what they needed to stay coordinated and discarded the rest. Actually several teams evolved a process that looked very much like agile long before the whole thing was defined. Short release cycles, short meetings to stay coordinated and small, focused teams. Most teams that adopt any form of testing at any point don't ever stick to it (Even though it'd really help.)
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
I've seen both sides of this coin, and I can sympathize with both viewpoints. The "Agile" nonsense is the absolute most buzzword-tastic pile of crap I've ever had to mess with. It's a bunch of people more focused on playing a word game than actually getting work done.
On the other hand, I was recently given the task of doing some housework on a PHP application that a former colleague of mine had written on his own (it was a system designed to track purchases at local pawn shops for review by law enforcement for stolen merchandise).
Lets just say I wasn't impressed. Single character variable names everywhere. Virtually no comments. Code that should have been put into a function was just cut and pasted each time an operation was done. Tons of stuff (like the actual list of organizations we were receiving data from) was HARD CODED into the code. The passwords for the users were stored in plain text in a database.
What's sad is that I wasn't allowed to actually correct most of this. Management explicitly dictated that I was only to correct a few outstanding issues - NOT really delve into the code. The reasoning was "how much work" that program is because based on the workload of that previous guy (who was maintaining this nearly full-time) put into it. They figured we'd need another full-time developer. In reality the function of the program was relatively simple - it's just that it was so fucking poorly written that any small change took a mountain of work.
Just IMHO, what I think companies need more than feel-good processes is a small set of very thoroughly enforced coding standards. Developers who don't follow them need to seek employment elsewhere. No amount of process is going to make a bad programmer good.
"People who think they know everything are very annoying to those of us who do."-Mark Twain
Why is that, that good code quality somehow is opposite of passion and creativity? I agree that pointless process is killing that, but good practice can be good.
I for myself like writing tests, like having easy code that have low complexity. That is why I can be creative in the first place. With my tests in place I can write my code and be sure I won't break anything and with low complexity I always have the overview over my code. Both are making sure that I can be creative.
The real question is why developers are not writing testable and low complexity code in the first place. Why is nobody teaching them how to write good code? Nobody is arguing that in the architecture or machine design, because if you not following good practice there the building will collapse or your machine will blow up.
Please define "passionate programmers" and "great code". If by that you mean people that just code away and leaving behind a mess of a code that only them can understand and maintain, then nobody wants that kind of programmers anyway.
True, there was a lot of stupid things in the past, like the Waterfall Model. But this is why the software industry is still a very young industry. Other industries have over 500 years of experience, like architecture or machine building. But the software industry is only about 50 or 60 years old.
http://www.mueller-public.de - My site http://www.anr-institute.com/ - Advanced Natural Research Institute
If you've got a small team of extremely competent programmers, is excessive process likely to do much more harm than good?
Sure.
If you've got a humungous team of barely-competent cut-and-paste code monkeys that their managers don't know how to evaluate, do you need astonishing amounts of process to get any work out of them?
Yeup.
Can you stop all business activity while you try to change from an organization of the second type to an organization of the first type?
Nope.
As someone with over 15 years of professional soft dev experience, my experiences have proven that unnecessary creativity destroys the reliability of software. Technical inaccuracies, misunderstood and misappropriated patterns and strategies, "tricks" and undisciplined programming are all the best ways to kill a piece of software before it even hits production. Engineering has plenty of room for creativity. Solving complex problems requires such creativity that it often translates to pure talent. But this work is based on a foundation of science and mathematics. Too many times have I seen developers do something tricky solely because they thought it was a nifty technique. These people scare the shit out of me and they permeate the industry. As web development has matured, I have seen the wheat separated from chaff. But for every 2-3 serious sw engineers, there's the 1-2 people that are obtuse, asinine and out of their depth. Most often these people have lingered for some reason or another, the Peter Principle usually. One thing that has proven itself to me: Only the fool suffers a fool. These fools are often the demise of well-intentioned projects. If you want to be "creative" in software development and ignore 40 years of research and science, go to fucking art school and please quit trying to convince the rest of the world to take you seriously.
I've been programming since the 80's and getting paid to do it since the mid 90's. It was the mid to late 90's when I got introduced to life cycle methodologies and at first I applauded them. I was even selected for a committee to help firm up our "best practices". I thought I would improving things by stopping bad practices by bad programmers. After a while it turned into a nightmare as those bad programmers started using the "best practice" rules as cover for the crap they produced. "But it passed unit testing and UAT, it must be awesome". Our project budgets went up and implementation time increased while our customers were visibly pissed at the final product.
The problem with SDLC process management has been sufficiently skewered by Joel Spolsky in a blog post several years ago. By putting a bureaucratic process in place you replace rock stars with compliance monkeys. Actually delivering a solid product is far less important than meeting checkpoints. And when your a programmer who's dedicated to a polished final product it's like murdering your soul to watch mid level managers (who know nothing of development) work hard at micro-managing you to ensure those check points are met on time. The actual outcome is irrelevant, the surgery was a success even though the patient died.
I have worked in both environments, the loosy goosy no rules and the highly rigid SDLC bureaucratic world. I understand the need for review and verification and the problems of wild west development. But development process methodologies are dangerous enablers of bad middle managers and "consultants" that sell you management processes that don't really help any body.
I'm an experienced developer, I don't need any of these new-fangled practices to make my code good.
I'm glad I don't have to maintain this guys crap.
Developers in general won't accept processes that amount to busy work. You can tell when you have this kind of process because your manager is constantly harping on it but eventually gives up. Good developers define the processes.
Every passionate developer I have ever know hates "process". At the same time, they all understand that at least some process is necessary. It all depends on two things: what kind of work you are doing, and what kind of management you have.
- What you are doing: (A) If you have a small team working on an internal application, you need a lot less process. (B) If you are a huge team working on safety critical code, you need a lot more process.
- Your management: do you have managers smart enough to realize that A != B, or do you have PHBs who want to fill in boxes on some checklist?
Essentially the "agile" manifesto: as much process as necessary, as little as possible. That said, speaking as a passionate type, I would never want to work on a huge project within a bureaucratic company, precisely because I want to do technical work, not paperwork. I imagine many other technically passionate people feel the same way...
Enjoy life! This is not a dress rehearsal.
Yep.. excess process is nothing compared to the licensing problem.. copyright and patents will bury us... They already are
For justice, we must go to Don Corleone
Let's explain the typical history of process.
A group of relatively skilled people come up with an idea oh how to improve software. Things like unit-testing, agile... They try it out with other skilled people and notice that the process does create an improvement.
This process becomes the latest and greatest craze and everyone in the software industry thinks it is going to result in better software... yet it doesn't.
The reason... you need skilled people to begin with.
I never turn against process. I just firmly think you need good people first before you start on this process binge.
For example, unit-testing is a great idea. I use it all the time. Yet, when half the people don't know what a 'unit' is, unit testing just flops. Unit-testing works great when you have your code well abstracted in clean units.
So for unit-testing to work... you need, abstracted, clean code. How many 'bad' developers write abstracted and clean code? You also need developers who can write proper tests and think of the cases to test for unit testing. Again, if you have a 'bad' developer who isn't checking for errors in actual code... why on earth do you think they're going to write useful unit-tests?
The same is true for every other process. Agile needs good managers, product people, developers, testers...
It's not even about time. Believe me, if all the code I worked on was clean, abstracted... written by good people... I'd have no problem writing unit tests for everything possible and following process 100%.
But typically, you have poorly written code with many mediocre/understaffed people and then some mandate to implement process which doesn't work well given the poor code and people... and just eats up time... and you get frustrated at the process.
In reality... the process isn't the problem perse. It is just exposing the poor code and mediocre/understaffed people.
N/T
Software Programming should be handled like all engineering disciplines. Imagine if all engineering firms started building bridges, apartment blocks or cars the way software developers write code. To put it simply, we'd all be dead. The next time you're restarting your computer, upgrading your drivers, installing a new firmware, just think to yourself, when was the last time something purely mechanical stopped working for no apparent reason.
I wish all software was written with the same engineering philosophy which NASA employs. They Write the Right Stuff. Sure we wouldn't have as much software as we do today and it wouldn't be able to do as much, but what it did do would work flawlessly and I wouldn't feel like throwing my keyboard through my monitor at least once a day while at work, only to arrive home to have to restart my Sky HD box because it's crashed or has incredible menu lag.
is not knowing when to use process and when to throw it away.
... if you read his article (the one linked in the story) you see he does not know anything about "agil processes" or Scrum (e.g. tracking hours for burn down charts, lol)
Read the comments on his web site to his "article" ... most are "insightfull".
angel'o'sphere
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
http://programming-motherfucker.com/
I have seen many passionate developers right crappy code. Code that cost money at the end of the day.
Code is engineering, use engineer practices.
The Kruger Dunning explains most post on
I've been managing a testing team for the last couple of years and we've been doing Agile. We had a core team of people attend an Agile Boot Camp for a week, and it was one of the best things I've done in the last 18 years in the industry. For the first year Agiles was great, then the "real world" of doing software in a very large company started to creep in. It is still functioning much better than Waterfall, but here are my thoughts:
1. The first rule of process improvement is that in order for a process to work, it has to be useful. Because we were trained on Agile, we made it useful. The trainers were able to quickly shut up those few project managers who thought they were already experts in Agile and wanted to "improve" it.
2. As a career tester, it was nice to hear testing portrayed as a positive thing instead of what always happens - people blame the existence of bugs on the testing team. It was really great to see developers, project managers, and product development people to think like testers. It was also great for me and my team to see into those worlds as well.
3. Communication! It was really great for the first year. We really collaborated with Product Development, Testing, and Development teams. We worked really well together. Everyone was focused on this project. Then people's attention started to get diverted and shared between the many things that come up outside our project. The general quality of things deteriorated.
4. We had to tweak things. Simply because of the environment we are in, and the project particulars where we aren't a stand-alone application and had to interface with other apps/groups who follow Waterfall, we had to modify how we do things. It hurt us, but was unavoidable. I think Agile would be awesome if you could do it in a bubble.
5. Transparency. This goes with communication, but initially everyone was open. If something didn't get done, people would just say that. There was no blame, let's just address why it didn't get done and move on. But I honestly think that developers have that "god complex" where at the same time they want to be told what is wanted (removing any creative control) and not letting anyone else know what is really going on (controlling the reins of things). I really liked not having to play any politics or that other BS that always happens - finger pointing. We're still doing OK, but it's crept in from time to time.
Agile as a process works - provided that it's applied to projects that can effectively use it. Agile isn't the right process for every project. And I think that is ultimately what "process" needs to be seen as, an effective means to an end. The process is just there in order to get things done, if it doesn't work then it needs to change. Too often, people don't want that (or they want it too much). People like to blame the process - and rightly so. For a process to work, it needs to be usable, and there is no panacea when it comes to process. You just have to find the right one for what you're trying to do.
My beliefs do not require that you agree with them.
Software development is both an art and science. It is creative but exacting. The processes that are put in place around development are there to make sure the developers generate a bug free artifact that delivers on the requirements.
It is not process that removes creativity or productivity from developers. Metrics and processes can be used to level up developers from mediocre to good to great. Developers need to be able to see in the metrics and review what is “wrong” with their code and what they can do to improve it. This post is really about Management and Leadership not software development processes. Any process from just go do it to Agile Extreme Programming can be used to generate good code or bad.
The real culprit is a lack of understanding on both sides of the aisle. A certain type of developer think they are above the process. Their “creativity” is so important that they lose sight of the fact that they are being paid to deliver a product that meets a set of requirements and quality specs. On the other side of the coin are project managers, business analysts and corporate managers that don’t understand how software development works or even what a good set of requirements are. Their ignorance leads them to over process the development cycle. The development becomes about process instead of the process being about development.
When diva developers and poor management come together you can bet that the project will fail.
No sigs in BETA. Beta SUCKS.
Notice how I used hyperbole there, in my subject line? That's because the title of this article is ridiculous. Nothing is going to kill the software industry. Why play Fox News here? The real issue is efficiency, not existence.
I do not respond to cowards. Especially anonymous ones.
Process is fine, as long as it's always aimed at producing better software. When the goal becomes the process itself, that's when you have a problem.
If you are having lots of trouble with changes introducing bugs, it's time to extend test coverage, because that will help the goal of producing reliable software on time. If the goal is just "90% test coverage" without any relationship to how that improves the software product, you've got a process problem.
I've been in situations where everything is going fine, we are producing good code sprint to sprint, but the scrum master gets focused on getting a smooth burn down chart. The burn down chart is NOT the product. If the product is being produced successfully & on time, focusing on the burn down chart is a distraction that is hurting, not helping.
Here here. Spot on.
No sigs in BETA. Beta SUCKS.
Do you think Mark Russinovich used development processes when he created the SysInternal suite of tools for Windows (perhaps the best set of developer tools ever made)? For great developers, process just gets in the way. For the other 95%, process is necessary.
"What creativity is needed to code a crystal clear requirement or specification? Sorry I don't get it."
I sure as hell wouldn't hire you then - you sound like a standard issue glue coder doing lego brick style programming. Algorithms and solutions to tricky problems don't just invent themselves, someone with creative flair and intelligence needs to dream them up. Thats obviously not you.
sure you can over do lot of these practices, but I find that I spend less time fixing bugs when I do them. There is certainly a balance and diminishing returns though.
Too much software is written without any thought as to how it fits within a process. Management tends to just throw technology at a problem, vs. first analyzing what they are trying to achieve and molding the software to that process to increase efficiency. Too often, software is chosen, and the business then molds their process around it, making things a pain in the ass for everybody except your "passionate" developers, who likely don't know a whole lot about the existing (or lack thereof) process. Retarded.
Stifle creativity?? Give me a break. Yes thats right, programmers creativity should be stifled. What programmers don't understand is that no one is interested in their dumb ideas. Don't be creative, code jockeys, just do what you're told. But of course thats not enough for the massive egos of most programmers. They need to have something more important to do than just writing code they've been handsomely paid for. The fact that you think programmers need to be "creative" says a lot about your misunderstanding of software development. I would like to spend more time on this but I actually have real work to do, developing software like a professional, following a process. Grow up.
Rock Star programmers are a myth.
The Kruger Dunning explains most post on
No it's not. Have a series of test you automatically run before check in is a good way to catch the more gross bugs.
When you are in an environment where the code is too big to be in your head, then a test can catch bugs you may have created due to other changes in the code.
But yeah, the developer should not write tests.
The Kruger Dunning explains most post on
Management wants shippable code, predictable results, and the ability to swap developers in and out of programming roles as needed. As the life force gets drained from drone A, they want to be able to replace it with drone B without downtime or a learning curve.
A strict process tends to help this.
"But don't expect to write code that keeps a 777 safely in the air."
I'm sorry, but thinking up code that keeps a 777 flying safely requires someone with creative thinking as well as good process. You won't always find the answers in he Dummies Guide to Writing Avionics Software.
A lot of so-called standard software development processes treat its workers like the machines they use. This sentiment has permeated not just programming, but all industry for the last two hundred years.
Yet attempting to automate programming misses the whole point of what it is; it's akin to trying to reduce second-order logic to first-order logic.
All these process-related failures we see in software development are misguided attempts to recreate a traditional computer with people.
Agile for the win!
Not to throw stones, but I think a major point that is missing here is that software developers are not the same as software engineers. Software developers do not need extensive process and procedures to function, software engineers do. Someone spends 80% of their day writing code is a software developer, while someone who spends 80% of their day writing requirements, verifying against requirements, capturing design, etc is a software engineer.
I'm neither, but have been labeled as both.
To the question about killing the software industry: No way. Seriously, do you see software companies becoming any less prolific today than ever? I don't. It's incredible to me how much (quality) software is churned out on a daily basis, processes in place.
That said, the question about whether heavy process can kill ones creativity - yeah, absolutely. Some programmers become frustrated more quickly when there are barriers between their ideas and their code hitting the download sites. That's normal, and there isn't anything wrong with that. I'm one of those programmers, and that's why I always pursue my own side projects. That's our outlet, and once in a blue moon one of us makes something phenomenal, without the processes. Once in a while.
But to imply that such programmers are so great in number that it would kill the software industry is just not realistic. There are simply a huge number of creative developers who can work within the constraints given to them.
You are wrong. H1Bs are not low quality developers. However the ability of management to obtain software development at cheaper rates either because of the H1B system enlarging the market of domestic software developers, or throught outright outsourcing, has enabled the higher ups to get a short term boost in 'productivity' at the expense of good software development practice.
Being expensive gives software developers SOME small bit of ability to say no, I don't want to do it this way just because it's quicker now, because it will take me hours and hours and hours in the future to maintain it, fix it, and eventually do it over later, and make future development more time intensive.
Being able to get hours of software developer's time for cheap, means working smart is less of a priority for the higher ups. ( Note this is not the foreign software developers who don't value working smart, it's the higher ups ).
Of course, even with cheap software development available, not working smart will soon lead to software development costs equalling and yes even exceeding previous levels, in much the same way that moore's law has failed to keep computers from being resource strapped. Cheaper resources means they will be used with less regard - see http://en.wikipedia.org/wiki/Jevons_paradox
The computer, instead of being a tool that allows few people to perform tasks that would have required millions, each software developer will become able to maintain a smaller and smaller bit of code because the codebase a developer can comprehend is proportional to it's quality until low paid software developers are developing code that does less than ever before!
We'll have ( offshored or whatever ) coders working for less than 'minimum wage' performing tasks using coding and computers that could have been done by hand in the 1940s for less!
Ok, maybe a bit of an exageration but you get the idea.
...
I don't mean that as an insult to Cowboys or Butchers. I'm a Cowboy and I'm not ashamed of it. I can bang stuff out. I can get things done. I welcome and recognize the other guys--the Butchers. They're the maintenance coders. They're the guys who don't mind writing design documents post-facto, knowing that nobody will read them. They don't mind meating with managers. Of course, if you want to disparage the Butchers you could say that Butchers, well... butcher. You didn't hear that from me though. In order to put meat on the table, you need Cowboys and you need Butchers.
For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
They don't mind meating with managers.
Freudian slip: I think you are jonesing for a nice juicy burger, dude.
Have gnu, will travel.
We all know by now that Test Driven Development is a best practice.
I certainly don't know that, although I do know that some people think it is.
It's kind of the stereotypical mistake of process: a technique that makes a lot of sense in some cases and produces great results in those cases is generalized to a lot of situations in which it's either useless or counterproductive.
My team is agile. We have a burn down chart. We have a weekly iteration planning session. We pair program, we test first, we write our cucumber tests, javascript tests, junit tests, and we code 35 or more hours a week. We're also in one of the strictest change management environments I've ever worked in, and we're still churning out high quality, highly tested code in high volume. In our stand up every morning we talk about the stories that were completed the day before and we mark them on our burn down chart at that time. Our Kanban board helps drive us through the process and it keeps everything visible to all the team members. Documentation for our semi-monthly releases is a chore - it takes us about 8 man hours a month, but were working to automate a lot of it.
Agile means adapting, and it sounds like you're not.
Your sig(k) has been stolen. There is a puff of smoke!
Been there, done that.
The reason you can do what you do is that when the project approaches impending doom, management is willing to toss out all the crap and let the workers get on with the job.
The problem is that, they only pull the bean counters and PHBs off of you until things are up and running. Instead of taking them out behind the office and shooting them in the head.
Have gnu, will travel.
Comment removed based on user account deletion
You are suffering the same confusion I'm trying to point out.
Software engineers (and their management) confuse the blueprint with the finished product. Your source code is not the final product, it is the complete detailed blueprint of how to build the final product - from which your compiler chain then builds the final executable (in a manner nigh unto instant and free).
This confusion leads to misapplication of processes, which in turn lead to silly assertions such as TFA. As build time approaches zero, so does the imperative to do correct design.
Can we get a "-1 Wrong" moderation option?
I'm an old school developer (1975, anyone?) who still views code as an art rather than a bean-countable process and has no interest whatever in management (job security through non-productivity.) The endless processes I have to deal with nowadays do suck most of the joy out, and despite all the typos I've seen caught by code reviews, I'm not convinced they make better software. What they do is:
- Make managers, who have never known what we do anyway, happy by giving them numbers to look at. Their ultimate (and hopefully futile) goal is to systematize development to the point that monkeys can do it. Then programmers will be screwed just like teachers and firefighters are now.
- Make old programmers who saw the way things were going and (unlike me) converted into process inventors while their colleagues were being outsourced, secure and/or tenured.
I'm behind the power curve (none of my startups made me rich) but I still enjoy writing code; my hope is that, by the time I get to stop pumping out crap for corporations (e.g., my dogwalking business takes off), that I still like writing code.
It's been my experience, at least in a bank, when you shove excessive process down everyone's throats, the developers are the least of your worries. We'll happily spend half the day doing the necessary paperwork to update an address on the web site, chasing down people for approvals, etc etc.
The real issue is once it takes 2 weeks to change a phone number on a fucking web site, because of excessive process, change control meetings, qa sign off etc etc etc. your business customers (the departments you write your software for) fire your IT organization out of frustration and go outside the company to a contractor that's not hampered by such processes, procedures, and bullshit. When you ask them to change a phone number, it gets done before the phone is hung up, just like we used to do it.
Then your entire IT development unit gets fired, largely because of some busybody manager that had some great ideas about shoving their stupidity up everyone's ass.
True story...
When I worked at this bank, there was one change control meeting a week. You had to first get the idea approved at a CC meeting. Then you had to go code it, get it signed off by QA, who had to schedule you at least a week out, because they were busy too, and present the qa results at a second meeting. So it quite literally took a minimum of 2 full weeks to change a fucking phone number on a web site. They tried to move me to a different state. I found another job and quit because I didn't want to move. 6 months later the entire team got laid off because the business units went to an outside contractor that could get stuff done in minutes instead of weeks.
Process is GREAT!
Don't kid yourself. It's the size of the regexp AND how you use it that counts.
... of succeeding as a QA functionary (With bonus metrics for more quality!):
1. Come up with a metric which can be tenuously tied to quality. Ten bonus points for metric being ill-defined.
2. Make developers (and your QA team) jump through hoops to measure the metric and make it go up/down (as appropriate). One bonus point for each percent in increased time used to calculate/track the metric.
3. Point to increase/decrease (as appropriate) in metric to show your "effectiveness". Five bonus points for the delta being statistically insignificant.
3.5 (optional) If metric does not change, speak out forcefully about how developers are "resistant to change" or "don't care about quality". Twenty-five bonus points for each employee sacked during this time.
4. Never measure customer satisfaction. Minus 200 bonus points for doing this.
Repeat as needed and celebrate your success in improving quality!
"Look at how much I'm improving things"(LAHMIIT) metrics are the bane of my existence.
That is all.
The problem IMHO is when processes get out of hand - exceeding the complexity of the original project. True, there are projects that require near-perfect code as e.g. people's lives might depend on the quality. But just as programs suffer from excessive feature-growth (of stuff hardly needed, see M$ Office products e.g.), the same way process definitions tend to grow over time. Plus the compexity of a program if also often not easy to judge. For experienced (or "genius") programmers, some problem might be trivial, and quickly coded, while management (not understanding the problem) might see it as a difficult problem, endangering the company, which then require complex planning and QC. All the while the programmer could have finished the project less than the time required to even get the plans in order.
This reminds me of a Dilbert comic, where the PHB would come up and require some plan on how to impllement something. Dilbert would reply, he'd already solved the problem. To which the PHB replied, he'd still have to make the plan ...
Personally, having programmed for something like the last 30 years (starting with ZX Spectrum and C64, via Amiga through Unix/Linux), I can pretty much code pretty decent code up to a certain complexity without doing much of planning ahead of time. Anyway, I do "fall back" to doing some more or less intricate planning at times, when I "feel" like the problem might have some tough points that could mess the whole thing up. Do date, I barely ever had major problems with this way of working. But then, I'm also just about the only person in the company doing any serious programming in that area ... so no team to keep in line ...
"fleshed out", please.
flushed out is what happens to the project just before it is completed.
Intron: the portion of DNA which expresses nothing useful.
It's impossible to cover every possible scenario in unit tests. Also, unit tests don't cover the system as a whole.
I have a mostly academic perspective of this debate.
Basically, the goal of process is to achieve high quality code at a low cost, or to put it another way the goal is to make development efficient. How this objective is achieved isn't really that important. Anyway, due to the massive complexity of a development team (member personality and interpersonal chemistry are complex affairs) and the plethora of different software objectives/metrics (nuclear plant safety software is measured mostly by lack of failures while social networking software is mostly measured in adoption rates), there's not really one right process.
However, just leaving it at that isn't very informative. It turns out there is one key element to process that everything good about process flows from...which is collecting data on what the developers are doing and taking the time to analyze that data to find areas where the process can be improved, leading to constant improvement in the efficiency of the process. Collect (Quantitative) Data -> Analyze Data -> Adjust Process -> Goto Collect Data.
Keep in mind that the data collection and improvement analysis are also part of the process. Collecting too much data (or the wrong kind of data) can be very detrimental as it takes time away from the developers doing real work to handle paperwork and constant navel gazing sucks up otherwise useful time. On the flip side of the coin, too little data collection will not allow you to construct an accurate picture of what's going on and good analysis of that data requires real time and effort...but this effort will pay off in the long run by making the real work more efficient for many years.
This process also takes some experimentation. "Let's try adding/dropping/modifying this practice and see what happens." "Oh, the data looks good after we implemented this, so let's continue to do it." "Hmm, this caused a slight decrease in performance due to time usage, I don't think it's worth it so lets drop it." It also takes some deeper thought. "Well, there was a slight negative impact in the short run, but this should have a positive long term impact, so lets hold out on judging it just yet." "This software is needed for a one-shot event, so we could drop all our long-term processes this one time to save effort." etc.
Existing processes and best practices are great places to look for ways to improve your process. "Code reviews have well known positive benefits across a wide range of situations, so we should incorporate that into our process." This really cuts down on the amount of experimentation needed to find a good process. However, following these suggestions blindly will lead to all sorts of trouble because as several other posters have mentioned it's a form of "cargo-cult engineering". One might adopt a practice that's good for high-quality high-cost systems when your goal is to make an acceptable-quality low-cost system quickly. One might adopt a practice that has a subtle negative effect, like driving away a good programmer or wasting small amounts of developer time for no benefit. If the boss is blind enough, they might even adopt a practice that completely destroys the team and project.
Constant analysis and review also helps reduce problems like valuable people leaving due to process. If they know the new practice they hate is only experimental and they'll be able to make a case against it at review time it makes it easier for them to tough it out for a while.
Once the process of continual improvement gets started, the team will constantly get better and better. Realistically there will be ups and downs, but the team will recover from the downs (such as a valuable person leaving), putting them at a nearly constant state of high efficiency...and the extra work put into maintaining and improving the process will be worth it.
Now of course there's more to good process than just striving to be in a state of constant improvement, but that would take far too long to talk about in depth. It includes things lik
From my experience the optimum process just depends from company culture and team culture and how clear the requirements are.
The _only_ constant observation I made is that every project that did not test on every level, passionately, very early and continuously was doomed. If you don't define and prove quality you will not deliver quality. If you test you will define what you build. The more complete your tests are, and the higher levels they reach, the more you and your customer know where you are heading to.
"Just build your idea" may feel good at first, but your team will suffer and burn at the most inconvenient point in time.
DO TEST. A LOT. AND THEN MORE. AUTOMATE.
EMBRACE YOUR TESTERS. OR ELSE.
It's way easier to be creative if when can be sure that your project will not die a horrible death.
The code is really the nuts and bolts, concrete and other raw material that the people use to assemble the product; just like in a bridge building project. If I have already poured half the concrete and the piers are already standing, it's a little difficult to turn what was a suspension bridge into a truss style or move one of the ends
It doesn't end there. Where I see a lot of confusion, is assuming that an executable is the end product. It's an intermediate component in a much larger system. Example: Why am I building the bridge? To join two roads togother? To join two cities? To link two countries? It's always as part of something else. It all depends on scope, but it's never because I saw a river and said..."Hey I think I'll build a bridge". The same with most complex systems. The 777 code modules fit into some part of the final system. You can point at the avionics software in isolation and then plug it into the entertainment system.
Developers can create solutions without process.
Process only creates problems, like someone auditing your code when not needed. Or noone auditing your code when you do need it. Same goes for testing, unimportant (old) parts get rigorously tested, but the latest development may be ignored entirely.
Process is something you need in a kindergarden, not when dealing with grown ups who are supposed to be trustworthy.
How can you tell the difference between a good, experienced developer and a mediocre, inexperienced developer? The good developer already has "processes" (habits and self-discipline) that she has learned and honed through hard experience, knows they work, and resents when someone tries to force her to change for the sake of change or waste time on things that she has already tried and found wanting. Processes will only hamper good developers. The bad developer also resents "processes", but that's because they don't have any self-discipline. Processes probably won't help bad developers either. The trick is to hire good developers that get along; the only way to tell a good developer from a bad is to look at their code, which also requires . . . good developers. A good place to start, though, is to make sure they can actually program. Another good sign, though, is a good developer will occasionally approach you and suggest possibly trying a new "process" to see if it will make your shop more productive or reduce bugs.
Nathan's blog
Selling software != Selling consulting
IT Consulting companies business is to sell process to their clients.
Slashdot = Sarcasm
... that the floggings will continue until morale improves.
Ok, there's now a few hundred comments here and no one has linked to http://www.processimpact.com/articles/qualreqs.html or similar. Try the PDF version - http://www.processimpact.com/articles/qualreqs.pdf
Have a google around. There's a full document of which is the summary.
Read the Book of 5 Rings.
Read the Art of War (alternatively, listen to it..) ...
and start applying this to your job.
Requirements management is something everyone tries to avoid because it is 'too hard'.
---
On the darker side, I work with people to whom writing a short (2 to 3 pages) 'technical specification' is a 'waste of time' as the 'code documents itself' and 'it is obvious what the code does from reading it'.
Funny part about this comes when 'simple utilities' need to be updated.. and only the original coder knows how they are meant to function.
Yes, it reads from that file.
Yes, it writes to that file..
Yes, it does that processing..
But, what is the actually business requirement?
No idea, because that coder is gone. The system has changed.. and now we don't know if it should be doing x, y or z. What do we do now? No technical documentation, no business spec, and over 400 people use this (currently broken) utility on a daily basis.
Wait! I know! Let's do some requirements work and determine what it *should* be doing now.
No, we can't do that.
Too much work.
Let's just 'fix' the code.
Hang on. You have just made a code change.. slapped the code back into Prod... how do you know that your change 1) is what users need and 2) actually works?
So, they brought the code down again, and made another change. This went on for several weeks, annoyed users to no end to the point of end users not using the utility... and our reputation goes further down the drain.
All because no one wants to do requirements analysis, change impact analysis, business specifications, technical specifications or actually properly document their code.
That rage you feel when someone says "the code documents itself!". It means it is time to fix the processes, or leave.
Meanwhile, yes, we have a review process. Test plans are required. Testing is 'required'. Why don't these processes work? Well, it's called "rubber stamping".
If you can't beat them, join them or leave.
You have a sick, twisted mind. Please subscribe me to your newsletter.
Guru as team lead probably is NOT a good idea. Again, team lead is at least partially a social skill. I've known several guru class coders, and I wouldn't like to have any of them as bosses.
I can see merit in having a master/apprentice system too.
An experienced coder has a young apprentice. The apprentice does the scut work: Making the code pretty to whatever the flavour of the week is, reading the inline documentation, and adding to it as needed. (Or writing it from scratch...) Writing test suites. Assisting in the debug process.
Apprentices should be moved from journeyman to journeyman, say every 6 months. In this way they become familiar with various parts of the code base. They see a bunch of different work styles. They get practice at coming up to speed with other people's code. In addition they act as pollenators. "Mike showed me a neat trick with...."
After several years of this, they become journeymen. But now journeymen are paired to journeymen. The PAIR has to sign off on a milestone. For each segment, one codes, one documents/tests, both debug.
After a few years of these, if there is merit, they become masters, and are paired with an apprentice.
Some journeymen may not be master quality. At this point they are diverted into sales, and HR, and support....
Third Career: Tree Farmer Second Career: Computer Geek First Career: Teacher, Outdoor Instructor, Photographer.
Ha, and you thought this was new: Theory of alienation
I found it very difficult, as a permanent team member, to not throw my whole shoulder at whatever we were doing. I resented the people that got in the way of our success; I wanted to do nothing more than make the best fucking in the world.
When I watched the 2000-2001 tech meltdown, and saw lots of colleagues who were equally passionate and dedicated ejected like horses in a still sea, I got pretty jaded about it all. These people were wildly committed to their teams and projects, and the company they worked for (at the time three letters starts with S) had zero reciprocal commitment. The horses were drowning at sea; and the survivors were ordering $300 bottles of port at pointless team dinners.
The best lesson from that company was that reciprocal commitment is fair game - I have something a company wants, and they have something I want ($$$). The relationship ends there; they get what they pay for.
No lessor quality - often in fact better, because repeat business is sweet - but complete emotional detachment. That is the way it should be; its not a marriage, it is a hook-up. If businesses moved back to giving a rats ass about the people that make them a success; well that would be different. Try and find two.
The problem is not Process (either the lack of or too much of), the problem is People.
No Process + Bad People = bad results (see GIGO)
No Process + Good People = good results
Processes + Bad People = bad results
Processes + Good People = good results
See the pattern? Now, in theory, good Process + Good People should > No Process + Good People
I've tried implementing various processes and the problem is always the people. Some people get it, some don't. Some refuse to use it, some dont understand it. Some people's internal workings just arent compatible with the process. Experience is important.. more experience usually means more acceptance of process.
You have to match the process to the people or vice versa.
-- Senior Software Engineer, Attorney appearance services, locallawyerapp.com.