Our philosophy is to hire stellar programmer-scientists and to take on scientific software development projects that can be accomplished by a small team working closely together. Software engineering is a dynamic and rapidly-growing field, but two observations have been confirmed to be relatively constant in studies going back as far as Harold Sackman's first such study in 1968:
- The more people you have on a software development project, the more time they spend interacting with each other and trying to stay out of each other's way, and the less time they spend actually developing software.
- On most software projects, the difference in productivity between the best programmer and the worst programmer is typically a factor of 10 to 20.
The combined implications of these observations should not be ignored. For example, while most operating system development projects employ hundreds or thousands of developers, the entire original and ground-breaking Macintosh operating system was written by only eight programmers! You couldn't build something like that with eight typical programmers — Apple gathered only the best of the best and gave them the freedom to work with minimal disturbances.
Now there are certainly limits to what even eight of the best programmers can do — you couldn't write something as huge as Windows 8 or the latest Linux operating system with eighty gifted programmers, let alone eight. But the point is that a lot of medium-sized software development projects are being treated and organized in the same way as large projects, putting twenty mediocre programmers together, organizing them into teams with managers and semi-weekly meetings and progress reports, to do a job that could be completed sooner, cheaper, and better by five or six sharp programmers.
Scientific software development projects sometimes make even graver mistakes by dividing their teams into 'scientists' and 'programmers': the scientists write prototype code or develop algorithms on paper, then hand the implementation task off to programmers who only vaguely understand the scientific problem itself. Both groups spend half their time trying to communicate concepts that the other group doesn't understand and isn't really interested in. That's not our philosophy.
We strive to be more than simply 'not evil'. Our goal is to develop scientific software using the best software approaches and scientific methods. Our geographically distributed developers work simultaneously on the same code base using modern tools and lightweight processes. Unit testing, software and algorithm reviews, and full team engagement are essential to providing the best solutions. Borrowing from many current open source development concepts, each team member may have an area of primary responsibility, but all of the source code is available to any team member to modify and improve as necessary.
Providing our customers the highest quality software requires hiring and retaining the best talent possible and providing them with interesting problems to work on, in areas such as numerical simulation, computer vision, 3d graphics, and novel algorithm development. We have found providing the flexibility to work in a low-overhead organization with occasional telecommuting boosts productivity, helps Stellar Science retain a top-notch development team, and results in quality software.