The Confessions of a Necromancer is a professional road trip, written by Pieter Hintjens for his fellow programmers. He shares all the lessons that he learned in his life.
Some of them are :
- Most of the time, most large software projects fail, and this is still true in 2016.
- The very notion of individual intelligence is a dangerously simplified myth.
- Technology is a slave to personality.
- You need to follow the money, and understand how it flows.
- The more your clients pay you, the more they appreciate you and listen to what you say.
- To get consistent and fast response in a real time system, you have to work asynchronously.
- If you have the trust of your client, and s/he has real power, you have done half the work already.
- Identify the riskiest parts of your architecture and bring them under your full control.
- Making systems more complex, to try to make them “reliable” will usually make them less reliable.
- Fail-over automatically and recover manually.
- Don’t expect random work from random vendors to magically work together.
- Do not develop and test in your production environment.
- When things go wrong that even marginally involve you, assume responsibility until you know where the real problem lies
- When you use hardware and software that bends to your will, you can work significantly faster.
- When you are a technology company, use your own technology in your projects. Don’t accept client requirements that sabotage your own vision and future. It isn’t worth the short term gains.
- You can do a lot with little, if you are creative.
- Don’t take “impossible” as an answer
- Everyone lies, not always deliberately. We just have our assumptions and ignorance and we believe we’re telling the truth.
- Build up trust with the client and sometimes they will reward you for it.
- When you’ve paid for all the mistakes, you should know how to do it right the next time.
- A good specification lets diverse people work together without confusion or conflict.
- Don’t be afraid to charge the real cost.
- It is ironic that a “successful” project can be a “failure”, while catastrophically bad projects can push you through to better things.
- Breaking into markets you don’t know is probaby impossible.
- Mobile phone operators are crooks who steal billions
- Be aware of your expenditure and manage your losses. You can survive a long time with less income if you are in tight control of what you spend.
- It is no favor to pay people to do idle work.
- When you hire someone, tell yourself, and them, one day this will be over.
- Prefer working with self-employed partners because that doesn’t need to be stated, it’s explicit.
- Don’t try to fix existing organizations. Start new ones.
- I recommend the Mozilla Public License v2 in general. It allows forks and prohibits dark forks, and is not tainted by Microsoft’s long “viral” campaign against the GPLv3.
- Good software is used by people to solve real problems. Good software saves people money, or makes them a profit. It can be buggy, incomplete, undocumented, slow. Yet it can also be good. You can always make good software better yet it’s only worth doing when it’s already good.
- Be patient, don’t give up, and always be learning.
- You can turn even the most crappy situation into valuable lessons.
- Don’t let people flatter you into playing their games.
- When things get weird, keep a log.
- Love and respect good people.
- Learn to keep the assholes at a distance.
- Don’t get hung-up on the past.
- Be nice to people, even those trying to hurt you.
- Speak up when things are bad, and tell the truth.
- Trust your emotions yet check where they come from.
- Don’t be afraid of taking risks, and learn to identify and manage risks.
- Solve one problem at a time.
- Be generous.
- Teach others whenever you can.
- Remember Sturgeon’s Law.