Over the past few days, I'm observing a pattern. Most people talk about
code, but the real objective is a tad hidden. The talk is mostly about
the design that is used to achieve the desired objective.
Whenever I see some good developers, I now tend to think about their
level of Software Design expertise. You post a task, they convert that
into a problem and design according to the problem. The faster it
converts into a problem, the more accurate design it can get, more time
being dedicated to design's drawbacks. Moreover, re-iterating over the
problem is all about tweaking the implemented design.
You can judge if your manager or your associate is good technically with
a simple hack. Give them a task and see to how they design it to the
problem.
Designs need to be scalable, for that, you need proper thinking. A
haphazardly designed solution always leads to re-work. The framework
into which you convert the task can be quickly inspected when it gets
into the testing phase. Never try to deviate how the problem is handled
with some dirty hacks. Also, always, try to design the solution keeping
infinite parameters into consideration. It is a poor design if it starts
getting additional parameters after being implemented.
A good way to judge a design is by throwing at it, a lot of test-cases.
Writing them requires time and effort, hence mind you about the delivery
schedule. Python and it's frameworks are integrated with a test-suite so
that assertions and limitations can be trapped in externally (without
disturbing the actual code). Java has test frameworks to begin with, or
you can write your own code to test. JavaScript is easy, you can see the
flaws right in front of you via the front-end. SQL is easy too. The
retrieved data is a fair way to show how you design data-fetch.
Everything is a problem and everything needs a design. Architects are
paid for their level of design exposure. They mend and bend around
problems and turn it into a holistic solution, capable of bearing all
pressures. And the structure falls when it crosses a limit. And it can
be viewed via the design. Poor design leads to quicker falls. Re-work is
an additional burden, if you have time constraints.
Also, design cannot be a single person's idea. It is collaborative
effort. Teaming across and asking for problems with the design is a sure
way to get better design. Ask for flaws, question the design, make sure
you try to break the fundamental principle of the design. Design, design
and design. Good design, is shorter time to code and test.