Friday, March 18, 2016

Failures, Mistakes, Errors.... Moving On

All my life, I have crossed so many mistakes, errors, and failures -- in one word: failures.

Most of these failures, I have observed, are unlikely to happen early on. Best intentions get the best of me, that these failures will not likely to happen. It is like going for a walk, a simple walk from one point to another, and out of nowhere, you are robbed or even worse.

Failure is evident when we don't have a plan, not all of us are like Indiana Jones whose adventure is mostly of luck. Failure is also while we're doing it -- say cooking, you wanted to put some salt so to blend the taste, but the lid of the shaker is loose letting all the contents out as you turn it over. Failure is also at the consequence -- the wrong spice/ingredients mixed up.

Coincidence, fate, destiny, or other words that they are called, I am blaming them. However, as I grew up and hurdled more and more of these failures, I had come face to face, in many instances, their nature. It is like facing a transparent glass that is so transparent, you cannot see the glare. You will not know that it exists until you bumped onto it. It is not like you are traveling in darkness, in fact, the light encourages you to walk or head on faster than you intend, you do it step by step.

The shimmering light, or simply a lamp or fire on a stick, is much needed in our travels through the dark -- to the most unlikely nature of life. We need confidence, encouragement, motivation, satisfaction, and all the nice words in the world of words, to keep moving. These words I refer to as light. Like the brightest natural light on earth -- the sun -- brings forth a lot of these words into concrete application. I'd like to jog when there is sunlight, but I hate the heat that it accords me -- the early sunrise or the late sunset is the better time to do it.

Going back to failures as transparent glasses ahead of our path, I had observed, that with the right angle of light -- seeing through or bouncing from the back -- provides a clearer view and begs caution as we approach it.

We need a change in perspective.

Perspective is how we see one thing from one location while trying to be on another. Normally, if you are looking at the same aspect and from another point of view -- perspective -- you will see differently. So, to change or influence someone, you have to change yourself -- change your own perspective.

With so many failures, I neglected to count them, I had tried many changes in perspective -- many of which made sense initially -- like out of a book or an author. But just like trading in the ForEx market, not all strategies will work over time, you have to adjust. Continually changing and proving one from the other, could already be a failure in itself -- none accomplished.

Perspective, or a change of it, should be done way before we head on, and not only at the moment of failure. Planning -- anticipating that failures will or may happen -- is now a requirement.

Planning is the best weapon in playing chess, after knowing the game of course. Before you do your next move, your mind will go through drills, situations, consequences, alternatives, and counter-attacks. The more moves you can muster in mind, that will likely happen in the future, will provide you with the better advantage.

Quick reaction -- efficient decision in an instant -- can be an output of effective planning. With the anticipated move, and the right conditions, you adjust your plan with the scenarios ahead of you.

If we stop, I have convinced myself, through the failures -- failure of planning, failure at scenario, failure on effect -- we will remain as a FAILURE. BUT, if we keep moving forward, planning ahead, deciding fast enough -- we may not avoid failure, but at least, by then, we should have accomplished something.

The failures are there to remind us that we are human. That we should learn by them, avoid them, plan for and against them. They will surely come, by fate or by other means. But by then, you are stronger, and you will know how to deal with them to better yourself.

Let's keep moving forward.

Tuesday, January 5, 2016

X and Y of Software Development

Software Development is one of the many things that never stay put. It gets to evolve and continue. Once it stops, it is the end of its life.

As software develops over time, there are distinct two directions that is tracing its progress:

  • X - this is the horizontal aspect of development. This is characterized by the number of features, functions, scope and reach of the output. As you add more to the growing number of functions and features, the X axis is drawn further from the origin. The further it goes denotes a number of modules or usage it contains.
  • Y - this is the vertical aspect of development. This is characterized by the quality, performance, speed, usability, friendliness, and security of the system. This aspect is also gearing to the non-visible part of the system. These developments may sometimes delay the deployment or may break the system all together.
A good balance of the X and Y axis is desired in any development. Any system that has many features but would require a great deal of power to operate is the same with a very secure system that is very hard to use.

At some point, prioritizing one axis over the other is inevitable specially for system developed by less than 3 people. Some features are held off in favor of performance or security. Some usability issues are sacrificed at some point for speed considerations. 

Many of the chances that I have gone through as a developer, is to take the Y axis more priority than the X's. That is, make sure that the system performs better than having to add more features. More features, at many instances, would mean more work for Ys. Say you need to upgrade to a new version of the programming language -- this is a Y -- this would mean that development for the Xs had to be postponed until all areas of the system, in Y, are checked.

Stress and penetration tests are very rarely done during development, not until there is some prototype or feature to specifically test. Imagine a huge system, after so many years of development, it may have covered all business operations and had them automated/integrated into the system, that may have not been tested for security? Chances are, this huge system may just be like trash after proving that it can easily break.

As you improve both axis, you may need to trace back to many of the basic functions for upgrade. At some point, many have to be re-written from a blank file. This is a hold off to the X axis, but making sure that the Y is stretched up to a quality you can be assured of.

To speed up development, one thing to keep in mind is, how much effort you put into the Ys, will lead you to a further stretch on the Xs. That is, with enough thought and consideration on the performance, quality, and security of the system, the easier you can expand the functionality and usage of the system.