TDD at big technology companies - any evidence? - tdd

Does anyone have any evidence of TDD being used at any big technology companies - e.g. Apple, Microsoft, Facebook?
Perhaps there's someone that's worked in one of these big companies that can shed some light on how TDD is used there.

Plenty of evidence is here, I started a site just about that. WeDoTDD.com, hope you enjoy!
It's not only evidence, it's recent evidence and includes stories behind the teams doing it at those companies. The list will just keep growing so revist it often.
There has always been quite a few companies that TDD, you just didn't know about them. Well now everyone can discover this a little bit easier on our site.

Check out this paper
"Realizing quality improvement through test driven development: results and experiences of four industrial Teams"
http://www.msr-waypoint.net/en-us/groups/ese/nagappan_tdd.pdf

Related

Is there a good place to discuss Test Driven Development?

I've just signed up for the Google group entitled Test Driven Development but it's only had 3 posts in 2010 and seems to be littered with spam.
Does anyone know of a good TDD focussed place to ask those general perhaps 'subjective' questions which might not be welcomed on SO?
http://tech.groups.yahoo.com/group/testdrivendevelopment/ - they are very active and always open to discussion.
http://tech.groups.yahoo.com/group/extremeprogramming/ is another good one. Obviously TDD is only one of the practices of extreme programming so topics won't be limited to strictly TDD.
http://groups.google.com/group/software_craftsmanship - Another good one. Again not strictly limited to TDD.
If you're looking for discussions about a particular testing framework most have their own user forums. Here's a list of frameworks for various languages.
There's an Agile Developer Skills Group that is fairly active. Obviously it has a larger focus than just TDD, but it might help:
http://groups.google.com/group/agile-developer-skills?pli=1
Before/On/After somo Dojo/Kata sessions
So you can both discuss it subjectively and do some practice
This might help : https://stackoverflow.com/

Should a developer be a designer?

I have been developing websites for quite some time and I am not so good in designing websites? My Boss is refering me to take some lessons on it.
But I really want to stick to development rather than designing?
You don't need to be a designer. But I would highly recommend you understand the process and some of the techniques used. Having that knowledge will assist in both working with designers and providing better back ends.
I'd do the course, but make it clear to my boss that it's not what I want to do as a main job.
Answer yourself these questions:
What is your objective, the dream? developer or designer?
What are you best with?
Will I be able to justify with my design requirements?
It this common that a developer should be a designer too?
Will you be able to to concentrate on both, the ever changing trends and techs.
Having said that, I have seen such people having both skills but still they don't weigh equal in both parts.
Developer as well as designer:
Chris Coyier of css-tricks.com
Pekka
It depends on what you want to be in the future. Actually, designing and programming are two different skills. Obviously, for websites two things are both required. As a developer, if you have some basic knowledge about design, it would help you and also the designer to make the website much easier to maintain. But personally, I do not thinking you have to dive into design.
a good developer knows a lot about design, but dont have to be good at designing something.
i've seen to many developers building up a given design and making so much mistakes, because they don't see the little intricacies that are enormously important for a well designed website.
One particular design aspect I find many developers (good ones) are not necessarily extremely strong at is understanding of colors harmony. Even though it seems like easy thing to do, find the right combination of colors on a page, it is not always that easy. That course may be helpful in that regard.
I started of as a developer and then progressed into being a Developer/Designer.
You start to understand design aspects, UX aspects and the likes.
So i believe a good developer should also have a good understanding of design aspects as well
The bottom line is your boss thinks you'd benefit from a bit of immersion in design, and you probably will.
It doesn't sound like he wants you to become a designer, just get a feel for it. He's not asking for a career change.
There's always benefits in learning something new. And if your boss is backing you taking some time to do it got for it.
As a developer you should know something about usability and software ergonomics. You should know the basic structure of a website. And you should be able to implement a given design.
I think it is not the job of a developer to create a design.
Try to answer: "Why does your boss want you to improve skills in design? "
Your team is too expensive and boss is going to fire designer. He is wondering is it possible.
Your designer complains to boss that developers constantly ask him to refactor insignificant details interrupting from common tasks. So your boss wants to delegate small design decision to developers.
If it's so, I think nothing is a bad to improve design skills if your boss doesn't want you to convert to designer.
I also agree with all those people, who state: Developer and designer are two different roles.
Well, if developing is the field you are comfortable with, stick with it.
But learning is never bad. Try to gain knowledge first, after taking the classes, you can answer this question yourself
Wow, I'm actually in the exact opposite of your situation. I'm a designer just crossing the line of web development. But in my case, it was my own decision and it wasn't imposed by anyone.
It's always a plus if you have web development skills on top of design skills. I guess it holds true if you're a web developer and have design skills as well.
It never hurts to learn the basic, like others have mentioned, but keep in mind to stick on what you're good at and master it. Its better to be a master of something rather than being a jack of all trades. With so much competition out there, you really have to excel at your craft.
Learn both, but master one, I'd say. I personally see myself as a developer foremost, but I do know a thing or two about design - and, more specifically, implementing it (think CSS and the like).
However, I gratuitously admit that I am not good at making a design that looks good. A functional one, maybe, but not good. You could say something like that to your boss - that yes, you are capable of learning to design, however that you will never be as good as a real designer. Likewise, a designer learning to program will never be as good as a dedicated developer.

Good articles on usability?

I'm looking to find any articles/books on usability. I'd like to get a handle on best practices when designing a UI, this can be anything from which user controls are more intuitive to a new user, to how to phrase text that is displayed to the user to avoid confusing dialogs. I mainly do Windows desktop applications, but most usability standards, I assume, would stand true regardless of the platform.
As an example, here's an MSDN article about the Windows User Experience Guidelines:
http://msdn.microsoft.com/en-us/library/aa511258.aspx
Try reading this book: Don't Make Me Think. While it's focused on web usability it is applicable to all facets of UI design.
The Design of Everyday Things by Donald A. Norman is a standard book on general usability considerations that can be applied to just about everything in day-to-day life. It's not specifically about software, but it's worth it to read it.
Universal Principles of Design is a recommended textbook for my university's Engineering Methods of Software Usability course. Myself, and others who have taken this course, have found this book to be more useful than the required textbook. There appears to be an updated version, called Universal Principles of Design, Revised and Updated: 125 Ways to Enhance Usability, Influence Perception, Increase Appeal, Make Better Design Decisions, and Teach through Design, but I can't speak about that one.
Designing for People Who Have Better Things To Do With Their Lives
by Joel Spolsky (one of the guys behind this site)
when designing UI, please do consider accessibility as well. it's mostly relevant for web sites, but could also be applicable for rich client (desktop apps).
so, these links has a lot of info on the subject, though it's not pure usability info.
a good resource on usability and accessibility:
Design Guidelines for Electronic Publications, Multimedia and the Web
you might find this check list useful:
Checklist of Checkpoints for Web Content Accessibility Guidelines 1.0
and also this tool that will check your web site accessibility:
web aim
Designing Interfaces by Jenifer Tidwell is pretty good.
Well, a long-standing favorite specifically for user interface design is Alan Cooper's About Face. It should touch most important topics when designing Windows desktop applications.
Then there are also various UX patterns which are well-presented in Quince (needs Silverlight).
Jef Raskin's The Humane Interface is also rather good, but very radical in his ideas. Still, this book points out many fallacies in modern UI design. If you need to stick to the WIMP world, then following his suggestions might be a little hard as he tends to suggest to overthrow everything we're used to. But well-written and good for provoking thoughts, even if you don't follow all his advice.
As for books/articles on usability in general or on slightly different topics:
Jakob Nielsen's website useit.com. While not particularly fancy-designed it is a trove of thoughts and advice on usability in general.
Steve Krug's Don't Make Me Think. Web usability, but also a very good read.
Donald Norman's The Design of Everyday Things. Usability in general and has many pointers on how to think about usability without going into specific technologies. It's applicable to desktop application usability anyway, though.
Regarding articles, try Boxes and Arrows
Designing Visual Interfaces by Mullet and Sano provides a great foundation for different layout-related issues. Not a book on usability per se but still relevant, I'd say.
As for web resources, try:
useit.com: Jakob Nielsen's Website
Usable Web
A List Apart on usability
For book inspiration, see Suggested Readings in Human-Computer Interaction (HCI), User Interface (UI) Development, & Human Factors (HF) (and all the great answers in this thread).
My favorite usability blog contains very well-constructed, insightful and thoughtful posts, by David Hamill.
You can find his blog at goodusability.co.uk
Enjoy.
I read articles from http://ui-patterns.com/ and http://www.uxbooth.com/. Those have been helpful for me.
I would like to second uxbooth.com - we recently had an article published there which might be what you are looking for - check it out at http://www.uxbooth.com/blog/usability-testing-dont-guess-test/
usefulusability.com
is another good site, they regularly have good articles up there.
Oh, and another article we had published recently:
www.1stwebdesigner.com/development/usability-ux-pitfalls-howto-avoid/
I think this one provides some pretty good examples of issues that frequently pop up, and how to avoid them.
And if you are looking to run a simple usability test, what not check us out at IntuitionHQ.com
Good luck!

A Social Software reading digest: What goes in?

Although I'm a programmer looking to explore social software patterns, I'm also interested in their psychological and sociological origins.
My proposed format is to limit each reply to ONE reading with a short summary of why it's important.
The idea is that we will then be able to see which particular readings are most important. Since community wiki posts don't count towards one's reputation, hopefully there won't be too many complaints.
I've read a few papers and a few books myself, so I'll get the conversation started...
Shirky: Community, Audiences, and Scale
A 2002 essay arguing that communities don't scale, since humans have a finite capacity for connections with other people, and that those connections are what make communities useful. I agree.
designing for the social web
Author Joshua Porter is a web designer so the writing has advice in how to design social web applications; however, there is plenty of psychological and sociological analysis here that leads up to the advice. You may also be interested in this NY Times article on ambient intimacy.
The Delicious Lesson
The Del.icio.us Lesson, from Bokardo, is that personal value precedes network value in social applications. In other words, you shouldn't expect your users to contribute meaningfully to the health of a group function. What you can and should do, is to assume that users will act in their own self-interest, and then try to learn from what they do. That derived information is what's useful to the group.
Anyway, that's what I take from it. There's also a bunch of talk about the merits of tagging in general, but the reason this reading is important is for the lesson outlined above.
The Lessons of Lucasfilm's Habitat
The principle developers of Habitat, a "multi-user online environment" write about their experiences and lessons learned. Habitat was a virtual community that can be thought of as a very early precursor to Second Life. In the paper, the authors declare some guidelines for social software, some of which are widely accepted today. Some of the guidelines, such as the assumption that bandwidth will always be a scarce resource, were prescient. The authors spend a lot of time trying to say, I think, that complexity in social software should come from the users, not the programmers.
In another feat of foresight, the authors warn administrators of social software to try to "work within the system". I've seen a good number of social apps get a lot of negative attention when they censored a user's action for reasons that seemed unjust. Flickr and Digg come immediately to mind. The authors might have recommended that the moderators of flickr and digg attempt to discourage unwanted behavior without pulling the adminstrator card and wiping out user content.
Like the LambdaMOO paper, there's an implicit warning against assuming any sort of higher-mindedness from the users of your software. Assume that online identities will display every baser behavior that offline humans do. The authors remind us that real people are behind those avatars.
There's also an extensive bibliography at the end of this paper, although the listed material is by now quite dated.
Shirky: A Group is Its Own Worst Enemy
In 2003, Clay Shirky (shirky.com) gave a speech at The O'Reilly Emerging Technology Conference about social software, and this article is essentially a transcript. Borrowing from Experiences in Groups by W.R. Bion, he begins by talking about ways groups, online and offline tend to self-destruct.
This is a wide-ranging article in which Shirky explains many of the typical problems in social software design, lists assumptions that designers of such software should make, and outlines solutions to common pitfalls.
Overall, it's a fantastic read. If you're thinking about writing some new social software offering, I suggest you read it periodically to stay on track.

Software project manager: what is the best amount and quality of purely technical background? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
We are looking at hiring a software development project manager. His job is going to be concerned with running multiple dedicated project teams focused on delivery of software for external customers. He will also need to provide support to our business development unit and oversee post-implementations support of the aforementioned software. What level of hands on development experience should we expect from the applicants? Successful candidate is not expected to do any coding.
Not important. We should be focused on proven project management experience in software area.
None.
Some experience, exact technology does not matter.
Heavy experience, exact technology does not matter.
Some experience involving same acronyms as we use daily over here.
Heavy experience involving same acronyms as we use daily over here.
Some experience, mostly with technologies we do not use.
Heavy experience, mostly with technologies we do not use.
This question is regarding the best level and quality of required technical experience and is not concerned with any other skills and qualifications of a software project manager. Many thanks.
As with any position, you need to assess first and foremost what skills and experience you need on the team for you to be successful. Then hire to fill the gap for the skills that you do not already have on your team.
If you already have a team with strong technical and technical leadership skills then you don't need to hire someone who is likely to compete with the people you already have. If you are missing this, you probably want to hire a technical manager with some project planning and tracking skills.
Great project managers are those that are multidisciplinary - they are most successful where they can bridge the divide between the various stakeholders and team. The primary role of the project manager is to manage risk and facilitate communication and collaboration. As a minimum, you should look for someone that has proven experience in either your industry or with the technology space that you are playing in, otherwise they will be unable to gain the respect of the rest of the team and perform their primary role.
Which brings me to something else you should consider carefully - what is your culture? For example in a previous job, we had development leads that were very strong technically and wilful. Project managers were always relegated to second chair, and pretty much ended up as glorified MS Project admin. assistants. Anyone good did not stay long. What do you need to do to allow the type of skills you want to acquire for the team to flourish?
Most of our project managers have zero technical experience, so I'm guessing the skill sets are different enough that it's not necessary. However, they have to be bright enough to grasp/learn the concepts involved in development -- just not the implementation.
That's not to say that a technical background would be a bad thing -- it could be a "nice to have". Then again, it could possibly get in the way and they could try to control the implementation.
In my experience the very best technical managers I've had had very strong technical backgrounds (and usually were a little reluctant to trade herding code for herding coders). The worst were the the ones that were merely average programmers at best and had more of a management background.
The tentative conclusion I've drawn from this is that while not all programmers are management material, all good technical managers started out as good programmers.
Note that this answer is coming more from the perspective of hiring an engineering lead. For a project manager - someone whose job is to interface between the technical people and the customer - technical acuity is probably less of a requirement.
Some technical skill would be nice, but far more important is that they understand the functional area your company exists in. So if you sell an OS, then you probably want stronger technical skills than if you're writing banking software, for example.
Go with point 1. "Not important. We should be focused on proven project management experience in software area."
Edit: (after re-reading your intro-para) Seems what you want is a product-manager, and in support you need team-leaders on the diverse teams to handle and report on the technical issues. (Also since customer-contact is involved: a little marketing experience won't hurt!)
As an aside:
You are focusing on the wrong skill-set. You want proven administrative skill; proven organizational skill; and above all: proven people skills - (s)he must be able to communicate without antagonizing or patronizing the audience. The technical staff and programming staff will have all the necessary experience in development. (S)He must be able to manage and control these staff members effectitively.
The manager has to be able to communicate with developers. This either requires a decent technical background, although not necessarily with the same technology, or enough humility to know when the developers know more about something than the manager. I've seen both work well.
I think what I'm saying is that having respect for the developers is important, and there's two paths to it: understanding what they do, or understanding that you don't understand what they do.
Answer is "4".
Heavy experience with some technology is critical. I know the mindset is "project manager does not have to understand technology, he just manages people".
Well no, PM does not manage people: he manages project that is supposed to produce some deliverable that is acceptable at least across some desired aspects (capability, performance, reliability, security, maintainability, etc). If he can't understand technology, he's lost. Of course, he does not have to be an expert in peculiar technologies used in a project: but he has to be able to filter BS away, to question programmer's estimates (we know how those go), to feel at least technical risk here or there, to be able to formulate business ramifications of particular technologies.
In some ways I think that PM's challenges re technology are even bigger than those of programmer: he has to be genuinely interested in technology, yet he can't / should not have any technology bigotry, to be actually fair towards them (what they are actually good for and what they are actually not good for).
Read "In search of stupidity" for evidence how non-technical managers drove many tech companies into the ground.
This is excellent summary by Spolsky: http://www.joelonsoftware.com/articles/Stupidity.html
Now, the small print #1: not every programmer will make a good PM, of course. In short, control freaks, toxic personalities, egomaniacs, people who are good at coding but not at negotiating, people who are good at coding but yield to pressure too easily -- will FUBR their projects.
Small print #2: It might be possible that people with very good analytical skills might make up for lack of experience with technology. I've worked with people who were excellent business process and procedure designers, who instinctively understood how UI should be organized and what the software should be doing in this particular place and why and who could detect BS quickly even when served by domain experts but who could not program if their life depended on it.
Most has been answered already, but I'll add this:
Keep the same mindset that you would have when hiring an office manager. While the technology knowledge is important, you'll find that ambition, a will to learn, coupled with a team leader attitude will get you a better manager than looking at mostly technology knowledge. Most projects have some company/industry-specific skills that are involved and a quick learner / great leader will bridge that gap quickly.

Resources