About Object Oriented Design

There comes a time in every programmers life when you gotta let go of good design and just do what you gotta do to deliver.

It’s not easy accepting the fact that good design is not feasable all the time due to constaints (time, risk) and you just gotta work with what you’ve got, no matter how much it hurts and violates good programming principles such as DRY (Don’t Repeat Yourself), KISS (Keep it simple, stupid), Convention over Configuration, Pipeline-as-code, and — encompassing them all — S.O.L.I.D. and its mean cousin S.T.U.P.I.D. (i.e. what not to do).

If you love clean code, I encourage you to read the linked articles - they’re quite the show. If you’re in a hurry, the mnemonics stand for:

  • S - Single-responsiblity principle
  • O - Open-closed principle
  • L - Liskov substitution principle
  • I - Interface segregation principle
  • D - Dependency Inversion Principle

  • S - Singleton
  • T - Tight Coupling
  • U - Untestability
  • P - Premature Optimization
  • I - Indescriptive Naming
  • D - Duplication

The way I feel about bad software design is akin to an artist wanting to paint the image of beautiful, intricate flower. Wanting to capture all its fine details and colour schemes. Except, right before they can eternalise their vision on canvas, someone hands them a toilet brush and a bucket full of that shitty color you get when you mix all the other colours.

That’s where the dream of clean code collapses. I get it, and I am 100% on board with any all decisions made, it’s just such a shame that good principles cannot be applied all the time, especially when knowledge of them clearly exist and the consequences mean shockingly duplicated, unversioned, UI and mouse-click-based pipeline configuraton.

Jenkins should’ve gone text-based before the UI configuration part of it ever took off. :( As someone who has seen the light started their CI journey on BitBucket’s pipeline implementation “BitBucket Pipelines””, I find Jenkins rather unintuitive.

#BlueOcean #Pipeline-as-code #CI/CD