Our job as developers is to solve problems. It's the programmer's axiom.
Thus everything we do that contributes to the realization of this goal is good (productive). Everything that contradicts and interferes with it - is bad (unproductive). At the end of the day we must ship solutions.
A fair question that arises is: How do we do this?
By observing objective truths from the reality in regards of your specific case and then implementing as much of the productive things (for that specific case) in your process as possible.
And how do we know if something is productive or not? Based on reasoning. In order to reason about something, one should have a solid foundation on top of which to build up and take logical decisions.
Here are some of the solid foundations that I use as a guiding light in my practice as a developer (and some of those to some extend as a human being in my life).
- Simplicity over complexity. Always.
- Automation over manual work - if machine can do it, it must do it.
- If writing code can be avoided, avoid it. Remember the programmer's axiom - solve problems. It's not "write code".
- Single point of failure is always preferable.
- Remove what's not needed. It rots.
- Duplicating code IS OK. Duplicating knowledge in separate modules IS NOT.
- If it can be reused, reuse it. (Note: keep in mind simplicity)
- Name things properly.
- Do not succumb to the falacy that "there's no right or wrong approach". NO! There is! There always is. This fallacy is just an excuse. You should be aware of this and not allow it to influence your decisions.
- No one knows better than you. Do not accept authorities telling you what's right and what's wrong. Figure it out yourself. Do not make the mistake to hand over your responsibility to some vague, anonymized authority. Make sure that the decisions you make (in your code and in life in general) are closed for the opportunity to blame others. You are the responsible one and you should be proud of it. That's what makes you a rational being.
Share some of the truths that guide YOU in your day-to-day problem-solving career.