Five Software Development Best Practices

Five Software Development Best Practices

"You're simply the best, better than all the rest" ... Tina Turner.

I once had a very interesting conversation with a friend on "best practices" - what we decided is - the phrase is misleading, and to be specific we didn't like the word "best". You see best is a misnomer - best implies done - how can something be better than best ... I also came across this too;

"By definition, a best practice is the result of experimenting with change to make things better"

I like that - it's more dynamic, it allows us to grow.

So - I start with what we want to be, practices we want to adhere to, tenets we hold close, a vision of what we want - in that way I prefer good practices" or perhaps "good guidelines". Inherently we all know (or can perhaps suggest) what good looks like, and good allows us to set goals that are attainable, deliverable and ultimately can be refine and extended upon.

So, and this is perhaps all you really wanted to read, what are my top 5 good software practices :-) I'll start with this simple statement,

"The goal is always to find the best way to delight our customers and deliver as quickly and efficiently as possible."

Test

I see that quality is key, and testing is, IMO simply the way of ensuring quality (or lack of it). There are many ways and levels here - but we must do this, and we must get better and better at it, and improve upon.

We've unit testing, the testing pyramid, the diamond (new one on me), TDD, BDD, mocking, et. al.

Collaborate

Delivery is a team effort - I've blogged before, but code reviews/peer review/pair programming/mobbing is so important to what we do. We should take a positive approach to this, https://medium.engineering/the-code-review-mindset-3280a4af0a89

Add to this open shared codebases, great documentation, user guides, open standards, guilds, forums, hamilton, workshops, symphony, hackathons ... you know the score!

Simplicity

Coding standards, blueprints, patterns, anti-patterns, linting, KISS, YAGNI, DRY, SOLID, 12 Factors, Evils of Premature Optimization, etc (google them!) .... ... all there to help minimise noise and allows us to focus on delivering simple, clean code that delivers on value ....

Put simply, don't over complicate, leverage what you can, code less, deliver more, get feedback, iterate, refactor .... but above all deliver.

I've said before there is no point in code that never gets to prod.

Control

Now, this isn't the same as approvals or processes - this is about control. It may contain approvals etc - but really it's about making sure that what we have is checked, released, stored and looked after in a controlled and understood manner.

Here think - Source Control, CI/CD, Automation, feedback, monitors, devsecops, documentation, security, secrets management, information radiators et al

Innovate

The world doesn't stand still; we must (should/want to?) look for new ways to solve problems, exciting ways to look at the world, plot a new path. I personally think that the first 4 are enablers of this one; the less time we need to spend on fixing undocumented , untested verbose code that brought down production - the more we have for investigating Ethereum, or Cypress.io, or reading that blog on digitisation, or whatever your cool is.


So there are you TCSCI .... Should have chosen something more catchy! :-)

I said at the start - we already know what "good" looks like ... so perhaps you have your own 5 top ... what does good look like to you?

Will you share yours?

Links

https://martinfowler.com/articles/practical-test-pyramid.html https://sahandsaba.com/nine-anti-patterns-every-programmer-should-be-aware-of-with-examples.html https://stackify.com/premature-optimization-evil/ https://howtodoinjava.com/gang-of-four-java-design-patterns/ https://en.wikipedia.org/wiki/Software_blueprint https://en.wikipedia.org/wiki/KISS_principle https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it https://en.wikipedia.org/wiki/Don%27t_repeat_yourself https://en.wikipedia.org/wiki/Extreme_programming https://en.wikipedia.org/wiki/Pair_programming https://en.wikipedia.org/wiki/Mob_programming https://en.wikipedia.org/wiki/Peer_review https://en.wikipedia.org/wiki/Code_review https://aws.amazon.com/devops/source-control/