Someone other than a member of the programming team should specify and enforce the interaction design so it doesn't get compromised by the programmers, whose priorities simply don't match those of the users. Usability testing done after a design is complete may provide some useful tweaks, but once the code is written, fundamental changes in the interaction design are rarely given serious consideration. Great usability can come only from designs that are superior from their outset, not from patched but fundamentally flawed approaches. Unfortunately, both changes are hard to put into practice. There isn't a pool of designers nearly big enough to create interfaces for the number of products in development.
Few people see interaction design as a career path, and precious little training is available.
Industry should work with academia to dramatically increase the number of people going into this area of design, and the industry should value and compensate them highly to make the profession attractive. The prevailing attitude is to get the first product out as quickly as possible and fix it later. By that time, however, needed structural changes may be hard to make, both technically and emotionally, and may be disruptive to those early adopters who have managed to learn the initial product. Bad design is not limited to high-tech products, but the internal complexity of these devices makes good design especially important. We are at risk of creating a new wave of information appliances that give us new capabilities but carry a high price in frustration.