I have compiled this list in an effort to organise my knowledge, my lessons and experiences, and also provide a preliminary list of topics I will write about.
I hope the list will also be valuable by itself, maybe as a guide for others wanting to embark on the same journey.
- Simplify things down to first principles.
- Do coding challenges.
- Learn about algorithms and data structures.
- Understand the throughput of your system.
- Have a hobby project.
- Done means released.
- Keep everything in version control.
- Every software developer is a software tester.
- Create unit tests for majority of your code.
- Use the DORA metrics.
- Continuous delivery is the only way to produce quality software.
- If you’re unsure iterate quicker.
- Learn DevOps techniques and motivation.
- Trust the operating system with the basics.
- Use actor model when in need of asynchrony.
- Use test driven development.
- Do not get distracted by hype, focus on the basics and principles.
- Test driven development and REPL driven development are flavours of the same thing.
- Embrace REPL driven development.
- Learn Linux.
- Use GIT.
- Learn what types of databases there are.
- Learn the value proposition of cloud services.
- Use configuration management and deploy with containers.
- Automate everything.
- Comments are a code smell.
- Learn and understand the motivation for the actor model. Reading more about Erlang is a huge help.
- Understand map, reduce, zip and filter.
- Implement vertical automation from scratch at least once.
- Learn functional programming, with a special focus on data flow and pure functions.
- Learn 7 languages. Then choose 2. My choices are Clojure and Python.
- Learn and use sequence diagrams, entity diagrams and dependency diagrams.
- Avoid by-reference object oriented idioms.
- Organise your work around the value stream and strive to remove constraints on throughput.
- Managing a project only works if you organise around the value stream. Implement communication channels that increase efficiency of creating and delivering the value stream.
- Constraints and simplicity inspire creativity.
- Limit work in progress. Time spent waiting is the biggest killer of productive work, with the second being redoing the same things multiple times.
- Increase readability, and always leave the code / project in better state.
- 20% of features bring 80% of value. Do you need the rest?
- Follow a process until it stops making sense i.e. moving you forward, towards the goal.
- Study the old masters, learn from their mistakes, and understand the limitations they were working with.
- Work in small steps and iterate. Embrace the true meaning of agility.
- Work smart, not hard.
- Focus on the goal of each sprint, each feature, and each project.
- Communicate your expectations clearly.
- Keep your designs simple.
- Do not accept artificial complexity.
- Understand lean principles and practices.
- Minimise documentation and focus on purpose of your solution.
- Learn by teaching.
- Use fear as a motivator to improve.
- Understand Pareto principle.
- Evaluate importance and urgency separately. Learn about Eisenhower matrix.
- Never develop software you don’t understand.
- Create simplifications and tools for yourself. They will frequently be a great help for others.
- Learn to let go - don’t get married to your ideas and designs.
- Understand the value stream.
- Do not overcomplicate or overdeliver. Gold plating is rarely the goal, and frequently attempt at gold plating turns into rot plating.
- Always integrate early and vertically. Every time you do not integrate vertically, you introduce risk in your design.
- Learn the meaning of YAGNI, DRY, and KISS.
- Do not lose focus of the purpose of the software. It is supposed to be soft.
- Get over public speaking.
- Readability is more important than correctness or optimisation.
- You never deliver anything meaningful alone.
- Develop anything you are unsure about in pairs, especially at the start of your journey.
- Say no to word salads!
- Figure out your mission in life and follow it. Don’t let yourself get distracted for too long.
- Be the change you want to see in others.
- Assume noble intent.
- Study philosophy.
- Embrace empiricism and scientific method.
- If your tests fail, your idea is wrong. That's it.
- Not all pain is bad.
- If you’re stuck on a problem, sleep on it.
- Maintain work life balance and a healthy lifestyle.
- Read regularly and develop yourself on the weekend.
- Cut out waste wherever you see it.
- Don’t wait to be told what to do.
- If doing the right thing is difficult, that just means it's even more important to do the right thing.
- Knowing when to stop is important. Flow is not tunnel-vision, and tunnel-vision is not flow.
- Knowing what not to do is more important than knowing what to do.
- Think outside the box. Do not let existing processes, practices, culture limit your imagination.
- Bring the pain forward.
- Don’t try to prove yourself correct. Try to prove yourself wrong.
- Do not expect the journey will be easy.
- Use criticism as an improvement input. Handle toxic people and their criticism separately.
- Never lose patience with those you are helping.
- Be responsible.
- Improve continuously.
- Strive to have as many true beliefs and as few false beliefs as possible.
- Ask others to criticise and judge your work.
- Don’t be too hard on yourself.
- Get a creative hobby, which is completely disconnected from your work e.g. painting, music, sport etc.
- As software engineer you spend 80% of your time programming not machines, but people.
- In digital age less is more, and simplicity and focus on value are the difference between success and failure.
- If it's not released into production, it is waste. Some waste is required, most is not.
If you enjoyed the list please stick around, read my other articles, leave a comment, share and like. Also remember to come back in some time. The items on the list will become links to my articles.
Live long and prosper, Piotr Kruczkowski
Many good points my friend. It's strange, I never had the feeling we were so aligned while working for the same company. Possibly our journey outside NI taught us some important lessons.