1. Place developers working on the same feature in different buildings. Preferably – in different time zones.
  2. Promote e-mail traffic in the organization. Send out a bunch of mandatory readings every day, in which introduce as many rules and limitations as possible, and revise them frequently. Punish those who don’t catch up with latest updates; they must have been too busy writing code.
  3. Assign at least three program managers to each developer, all with different ideas and non-intersecting interests. Make program managers knock developer’s door every couple of hours, changing turns.
  4. Don’t let developers write any code before they produce a detailed implementation plan, testing proposals; and make a PowerPoint presentation for every other developer in subdivision. Promote smart developers who did best presentations. They are management material; never let them write any code.
  5. Make code check-in process as long and complicated as possible. For example, two loops of code reviews and approvals from test and program management are minimum check-in requirements for any serious software company.
  6. Promote innovations and adopt every novelty whoever proposes it.  But never track the results! Statistics say 9 out of 10 ideas suck, so if we track the results, people will be discouraged and stop coming up with new ideas.
  7. Promote a smart developer who is, according to them, 90% complete on their extremely complex component and made a successful presentation of it. Never mind crashes during the presentation, this is normal for 90% ready product. Give that developer their own team. Ignore evil-sayers who insist that remaining 10% happen to be 90% of actual work. Assign interns and entry level developers to finish the component over the course of next 5 years.
  8. Swap and toss developers between teams and features. Developers are like cows – the more they stay on the same spot, the less food they collect.
  9. Make testers manually test as little as possible. Instead, make them write complex automation test infrastructure which will run tests every night and automatically assign tasks to developers. Think how cool it is – developers will figure out necessary crash steps by themselves, and will fix infrastructure bugs while they’re on it.
  10. Developers, unlike pregnant women, can achieve things faster when there are more of them.  The only reason why humanity didn’t create Artificial Intelligence yet is because we never managed to gather enough developers in one place.
  11. Make Friday the party day. Ignore grim looks on developers’ faces when they are drinking their beers and thinking they will have to work on weekend again to actually get something done. After all, they’re just a bunch of whiners with poor time management skills.

{ 0 comments }

Great audio convergence

by Andrei on November 3, 2008

Remember the good old days when CD was the one and only digital audio format around? All you had to do is pop CD out of one player and load it into another. And it always worked. These days are gone, music is no longer associated with a physical media, which by itself is a fantastic advantage and possibly even greater paradigm shift than moving from analog to digital audio in early 1980s.

I admit that while not exactly an audiophile, I don’t listen to compressed music at home. There are many reasons I voice against compressed music – some are valid reasons, some are probably just my imagination. Lack of built-in integrity control in MP3 format makes it susceptible to errors. On the other hand, formats that have built-in integrity control are either proprietary or not widely used. And it’s pain to listen to any MP3 recording with no pauses between tracks – classical, progressive, or live concert. You have to have some kind of crossfeed feature in your player to avoid annoying clicks between songs. Crossfeed is not a perfect solution either as it changes timing of recording – and you are no longer listening to the original recording either way. Purists may add that they hear significant difference between 320kbps MP3 and lossless, I almost never do – at least, not in A/B testing. But the size of 320kbps MP3 file is only half of that of a lossless file, so what the heck, I could just use lossless instead.

The net result is, whenever I put on the headphones (connected to a decent audio card and properly amplified), or turn on the audio system in my living room, it is always lossless. It may not sound better, but it feels better. There are no compromises with lossless music, it sounds exactly as the CD from which it was ripped. That’s the rule of the game, but it all changes when I leave home.

Mobile listening is a different issue. Noisy outdoor environments make small aberrations like clicks,  timing and digital distortion completely irrelevant. When you are driving 65mph on a freeway or sweating in a gym, 128kbps sounds exactly like a CD. These are not good places to listen to nuances.

All in all, there is still a considerable gap between needs for home and mobile music listening, and there is seemingly no sweet spot that would be acceptable in all scenarios. Quality of modestly sized music files does not satisfy me indoors, and living room-worthy music files are just plain too big to carry in the iPod. Today, there is no audio format or music technology equally suited for home and mobile listening. Situation is quite similar to pre-digital era when there was LP for a living room and a walkman for a street.

There are two possible ways out of this dilemma: duplication or transcoding. Duplication means, essentially, maintaining two copies of your entire music library, separately for home and mobile listening. Whenever you have two copies of anything, synchronization problems usually come up.  Today, I added new album to the lossless library stored on home media server, and only on my way to office realised that I don’t have it on my iPhone because iTunes didn’t import FLAC. Yuck.

Transcoding approach eliminates synchronization issues. There is only one master library. When you need to listen to music on the go, you stream it from the server. The streaming software can even dynamically adjust bitrate to your current bandwidth and provide best possible sound quality at any moment. This would probably be the most promising and attractive solution, except it does not work yet. 3G coverage in Seattle is still spotty, signal strength varies wildly when I drive around the city, and streaming protocols and software are not good enough to guarantee quality and uninterrupted playback when moving from zone to zone. Every time I switch from Wi-Fi to 3G, I lose connection.

All these problems are solvable but I have not yet seen the solution that would really work on the iPhone today. Still it is pretty clear that one day, great audio convergence will arrive and the music albums will be placed once in the library (whatever it will mean then), and be accessible from anywhere on a variety of gadgets, always in best quality achievable on current connection. We are just not there yet.

{ 0 comments }