Software development is hard. It’s an adventurous discipline. There is always more than one way to do anything, including evaluating which way to do something.
Someone leading software efforts, whether it’s a talented developer or a fearless but non-technical manager, is a brave soul. There is so much quirkiness. Software is art and science mixed together, and ego is liberally applied on top.
The two worlds of software development.
I believe there are two worlds. Two distinct poles, perhaps. On one hand, you have the closed-off, gated world. Software is hidden from view, exposed through things like contracts and protected APIs.
Then you have the hippies. You have the long-haired beard-wearing types. Software should be free. Software should never not be free. Ever.
Outside of eccentrics, nobody lives in either of those two worlds. However, people near one side think the other is always extreme. Both sides are usually pretty moderate in their views. Most Open Source contributors work daily on closed source systems.
Two Worlds are a shade of gray.
In reality, there are various degrees of openness. Some developers are quite open but used a closed source toolchain. Other developers use open source toolchains and hide their software through layers of obfuscation.
Very few people have precisely the same view on software being open. Some people are very possessive and secretive of their software. This is a damaging trait. Any developer who is unwilling to listen or justify their decisions is a danger to any project.
It’s easy to excuse the secrecy and protectionism. To say it is due to shyness or some other endearing trait. It’s easy to say a lot of things that aren’t true.
Us vs. Them
I believe that most developers do not share their code with outsiders because they like the Us vs. Them mentality in most companies. They like teams. They like the idea of making a stand against the world. Of not accepting outsiders or their code.
If they were so good, they would work for my company because we’re good.
(Obviously this is only true for companies that have good developers.)
I hear so often that nobody would understand some problem set. I’ve even had someone tell me that processing millions of records a day is hard. So hard they have to developer their own stack.
Open Source shatters the notion of Us vs. Them. In a true Open Source world, we’re all us.
Breaking down the barriers
When the wall between us and them falls, what is left is a feeling of shock. There is a lot of opinion with open source software. That is what makes it both amazing and tragic.
If a developer at any company is unwilling to publish software they’ve written, it’s most likely terrible code. Deep down they know this. It’s not that they can’t write good code. They don’t need to write good code. The world at large won’t see it. It’s private.
Elitism is harmful
Developers who don’t share code are elitists. They’re convinced they have the best solutions. They don’t talk about the details because they already believe it’s the best.
It’s not the best. It’s mediocre at best.
Ego is a difficult thing. Developers get attached to their productions. In each system developed a developer matures and grows. Ideally they have a cycle at the end to be introspective. To study what they’ve learned and to acknowledge what mistakes they’ve made.
Then, having a peer review is even more helpful. Being thrown into the fire and having to answer for each decision made.
Open Source is an environment where the entire world are coworkers. I learn more from people I don’t work with than those I do. People I would not have the opportunity to learn from if I didn’t work in Open Source friendly businesses.
It’s taught me to be humble. More importantly, it’s taught me what I’m good at and what I’m not good at. Then, I even know who to talk to to shore up my weaknesses and produce better software.
Graciously Adopting a New World
Many business owners are well intentioned but wrong. They believe that if they have some problem, others do. Then they take it a step further and think one of two things:
- If we develop this software and release it, our competitors will have an unfair advantage.
- If we develop this software, we can sell it and make even more money.
Neither is (usually) true. On the first point, if the software is something core to the business it should not be released. It’s a trade secret or a business methodology. It should be protected as such. If it’s not core to the business methodology itself, release it. Competitors have already crossed that bridge or are making the same decisions.
The second is foolish for many reasons. It can build up hope that a developer will create a new business. It distracts from the core problems. The usual outcome is code half-way to beautiful but just barely functional. Nobody wins.
With Open Source, developers can learn from the ecosystem. There are bug fixes from similar developers. Feedback and fame. There is credibility. It makes it easier to hire great developers.
I’ve heard many bad reasons to not join the Open Source communities and to contribute. I’m still waiting to hear one good one.