Finding focus and balance in software engineering
Software development is an engineering task. Mostly however, it is a balancing act. Careless choices can prove expensive in their effects.
Choices for now and the future
For virtually every single project, scores of choices are made. Elements affecting both short-term and long-term are weighed up and measured. Some aspects are more difficult to predict and I prefer to err on the cautious side and not underestimate.
Even in a simplified world a weighing scale appears: the required functionality, amount of data, level and number of users, performance, security and availability requirements and financial limitations on one side, with existing ecosystem, strategic constraints, technologies and their lifespans and availability of skills in a given organisation and locality, and vendor preference on the other side.
Both sides require knowledge of the current state and requirements and realistic estimates of the future. Each project has its own priorities.
One thing often affects another one, making trade-offs necessary and sometimes quite challenging.
A constrained environment can provide a good guidance, but when constrained excessively, it can bring a host of negative outcomes from hindered progress to unhappy morale.
Long-term strategy vs tactical choices
When the software engineering world moves as fast as it has done in the last five years, it is not easy to get the long-term right. What was a bleeding-edge technology or technique six months ago, is main-stream today, and could be lifeless and obsoleted in one year’s time.
Focus is on the business
What’s clear is that focus must be given to understanding and satisfaction of business needs that themselves can change rapidly.
Architecture should be as technology-agnostic as possible.
Technical solutions need to be engineered with flexibility and simplicity as their primary goals. Quality follows naturally.
Keeping learning is key for software people. We follow the pendulums that swing widely from side to side while searching for the best ways. Sometimes, we lose sight of true goals and focus overmuch on technicalities, or involve too much our egos and personal taste.
Evolving along the same path
It appears to me that things are on a convergence path, currently. Whether it’s No-SQL abilities of traditionally relational database engines, async programming that requires no manual dealing with threads, aspects of functional programming making their ways to programming languages across the board, or containerisation. It’s a good thing – it shows that consensuses between disparate communities are being made.
It’s exciting to see the software engineering world developing, and it’s even more exciting to see its ability to meet the needs of the business in clever, adaptable and, I’d argue, more accessible ways.
Let’s have a good 2017!