It's been a long hard road to learning these and so I figure I might as well pass it on . . .
10) Automate Everything
As a developer with looming deadlines there's a tendency to accept repetitious tasks (who has time to automate?) but these actions can suck up so much time and effort that it's almost always worth the effort especially if the tasks are repetitive across a team.
So automate EVERYTHING! Your build, your deployment, your smoke test, your unit tests, your regression tests, your monitoring etc. Learn great tools like Ant and Perl which will form the basis of many automation scripts.
9) Remember Microsoft vs. Apple - can you get rich and be right?
Do you want to be rich or right? The application with the least bugs, best usability and most features usually isn't the one that wins. It should - but this isn't about "should" it's about hard-learned lessons in the real world.
Sales and marketing have much more to do with success than how cool your technology is. Apple has the great design, great usability and lots of the "right stuff" but Microsoft has made more millionaires than Apple (although Apple's stock has risen a lot lately and MSFT has flatlined see here).
8) Your user's world is much bigger than your application
Your application or piece of software means all the world to you - but to your users it's just a tool. Let your user do what they need to and other than that stay out of the way. They don't care if you use Ajax and JSON or DWR, they don't mind that SOAP sucks/rules and REST rules/sucks - they just need to update some data and get back to the other million things they do every day.
7) Don't make your users think!
In the same vein as #8 - go easy on your users in terms of usability. Some web sites are so easy and intuitive to use you don't really realize it. When you notice the usability of a site it's more often than not bad news (unless it's in comparison to something worse). Learn about usability - use paradigms that users are likely to know already e.g. Windows explorer (for hierarchies of data), Microsoft Excel (for grids) etc.
Check out this great snippet from David Platt or this link! Your tool is a means to an end not the end itself!
6) Skill in Communication is the key to career advancement
The most successful developers are the one's who can communicate well - in the written form as well as in the meeting room. How can management know what is happening if you can't communicate it to them? And if you can communicate and do it really well, would you like a secretary with that corner office?
5) Developers are the worst testers
We think super-rationally and in a very linear fashion - that's the way we need to be to help write code for our dumb computers - users are just everyday people - irrational, forgetful and they think in different "nonlinear" ways - in other words, they are the normal ones - we're the weirdos! :-)
The best testers of all are those people who know NOTHING about your application or what it is supposed to do - you'll be amazed at what they'll try to do, where they'll click and what they ignore!
4) User involvement is the biggest single factor in product success
What do your users want? It's not what *you* want! Watch, listen and learn from them.
3) In the end it's ALL about Sales and Marketing
MBAs study sales and marketing for a good reason - these two activities drive revenue almost without regard to the quality of your product. Crazy eh? Why do people still buy BMWs when Toyota's are a much cheaper and more reliable? The BMW brand, the appeal to the ego, keeping up with the Jones's etc.
Why must your application be Ajax, Web 2.0 and SOA compliant? Because that's what CIOs want - perhaps not what they need, but they want it because ComputerWorld says they should or their CEO heard about it on CNN! It promises to be the next silver bullet (like EJB was, like .Net was, like the Web was etc.) so we need it now!
Can you do it? Doesn't matter, most of the time they can't tell. That's how most Consulting firms make their money - they sell the deal and the peons have to figure out how to make it work. By the time they realize, you've got their money and are on to the next job. This isn't something to be proud of but it's the way the world works. But the point - it's all about Sales and Marketing.
And for you the developer, you need to be able to sell and market yourself - What do you know? What can you do? What problems did you help solve? How flexible can you be to new demands? Get the word out on that and you'll be in good shape - you don't need to be a shameless self-promoter but you can't expect people to be psychic. Offer help, ask for help, learn from others - in the interaction alone people will learn what you're about.
2) Business operates fine on the 80/20 rule (a.k.a. the Pareto Principle)
So many developers are Type-A personalities who must get an "A+" at all times, but business doesn't operate like school - you don't need to get 90% of your application correct. There's no one single exam - it's an every day thing. You can't cram at the end either. You can get the majority of the benefit of effort from focusing on a select few of the most commonly used parts of your application.
Another instance of this is that the majority of users will be affected by a minority of bugs you find in QA etc.
The hard part is identifying the right 20% to address.
Also if you shoot for being 100% bug free your competition will eat you alive as they'll be first to market - yes with bugs and perhaps poor usability but with regular releases they can release patches/fixes and upgrades. People's expectations are sadly still pretty low for software! You don't have to be the one to change it - just be receptive to feedback, accommodate reasonable requests and they'll love you for that alone.
1) Perception is reality
This probably subsumes points #2, #3 and #4 above - again your "grade" isn't driven by some rational multiple-choice, right or wrong solution. You can deliver a not-so-great application but if you have strong relationships with your users and those controlling the purse strings you'll be in a better position than a "perfect" application but no relationship.
5 comments:
I agree with almost everything. Nice blog! What I have an issue with is "developers aren't testers". This is a myth!
I, too, believed this until I went to Uncle Bob boot camp and got TDD religion. The result is that I learned. I have learned to be a better code tester. I have found that my 15+ years of experience is now fully leveraged, because a disciplined software developer does know how things have failed in the past and can reason out how the code might fail in the future. A good developer has learned to think like their users. (NOTE: Good usability testing is still important, and listening to customer feedback.)
TDD combined with good DbC and good object models can really make you a great tester as well. This does not eliminate QA or investigative or usaiblity testing, it simply means that you have learned to write quality code and your QA testers are not finding as many bugs and very few bugs are making it to production.
Developers can and should be great testers. If not, you're not writing quality code and you are relying on QA and customers to find bugs you should find yourself.
For fun, check out:
http://www.suckbusters.com/
(Why Software Sucks)
Hi Anonymous,
Oh I certainly agree with you that developer's need to learn to test much better but again my experience is we developers tend to be a little too optimistic and have too much tunnel vision.
The best I can hope for, in terms of developer testing, for the moment is 70%+ code coverage with a suite of unit tests.
-Frank
#9 is basically the same as "Worse is Better"
Anonymous,
No "Worse is better" is not what I meant - I meant the correlation between what most developers would call "good" and success is not very high. Things like sales, marketing, branding create revenue and drive eyes to your application.
Think of "Google" - their Email app, their Docs/Spreadsheets although functional, are pretty rough and have a number of bugs - but because of the Google name . . . .
-Frank
Good thoughts Frank. I agree with your comment that developers tend to be "too optimistic" to be effective at testing, but that doesn't get us off the hook. We instantiated a practice many years ago whereby a fully symbiotic relationship was established between the developers and QA. For a highlight, see "One Team - Developers and QA".
Essentially, QA helps overcome the optimism fault by helping development flesh out the responsibilities of the automated tests written by the developers (we do unit, system, user, and stress tests). This makes the test coverage much more thorough. The benefit to QA is an accurate understanding of the scope of the automated tests (and daily awareness of the test results), which factors into risk assessment and test planning.
I think this goes right along with your #10 point - "Automate Everything".
Brian
http://blog.softwarearchitecture.com
Post a Comment