In software development, as with many other parts of life, finding balance is an important step towards fulfilment.
In previous articles, we’ve explored the need to balance the often competing intentions of usability, viability and feasibility when designing products and services. We’ve also discussed the inevitable trade-offs between capability and sustainability when making technology choices.
At Smudge, we sit at the intersection of design, business consultancy and software engineering, so we’re often thinking about the relationship between these areas and the need to strike a balance between them.
To get the best results, we try to assemble well-balanced project teams with a blend of hunger and experience, made up of people from diverse backgrounds who can bring a breadth of knowledge and perspectives to the design and development process.
Ultimately, designing a product boils down to making a series of decisions in order to overcome a litany of constraints. The size and shape of those constraints will depend on what you’re designing, who you’re designing it for, and the expectations of your users. There are thousands of blind alleys and no perfect answers.
One of the eternal struggles in the world of software development is the tension between “make it great” and “make it quickly”. Even for the most successful, well-heeled businesses, time is a precious resource. As billionaire investor Warren Buffett has pointed out: “I can buy anything I want, but I can’t buy time”.
Take the example of the original iPhone, arguably the most anticipated consumer technology product in history. When the iPhone first launched, it was missing some important software features. Most notably, customers were clamouring for copy and paste for two years before Apple added it to iPhone OS 3.0 (the same release that introduced push notifications).
A lack of copy and paste functionality didn’t stop Apple selling millions of iPhones but it did demonstrate that - even when you have access to thousands of the best and brightest engineers - some technology problems take time to solve properly. It’s a comforting thought: even the world’s most valuable company (at the time of writing) needs to balance goals and priorities based on constraints.
The fact is, software development is a fragile, delicate process that can easily be derailed by imbalance. The natural tension between product capability and speed to market is one of many trade-offs to be navigated; others include the need to balance business requirements with cost, choosing a structured or agile methodology, and deciding how and when to create new elements (vs re-using existing components).
What's more, most organisations face a myriad of people-related conundrums, such as determining an appropriate level of individual / team autonomy, managing talent pipeline, and so on. None of these areas are black or white: they all involve a spectrum of choice.
To add to the complexity, this balancing act is playing out against a socio-economic backdrop of accelerated globalisation and the so-called fourth industrial revolution. As mobile technology has become ubiquitous, questions are being asked about how much time people should be spending on devices, and a debate continues to rage around the extent to which technology is having a detrimental impact on human attitudes, behaviours and relationships. Meanwhile, for many software developers caught in this unruly whirlwind, work / life balance is an ongoing struggle.
Given these stressful and sometimes confusing conditions, the primary role of a leader is to design and nurture a culture where project teams can thrive; this means ensuring that goals are clear, limitations and expectations are realistic, and balance is (at least theoretically) achievable.
For an individual contributor, the key goal is to navigate the constraints. To find happiness in a world of constantly shifting forces, it’s important to look for joy in the trade-offs and treat each restriction as a challenge.
The reality is that designing and building software is more art than science. And, as with all art, there is a structure to the craft. Constraints are omnipresent, and even welcome. A painter is limited by their tools and the size of their canvas. A musician is limited by the notes, scales and theories of music. A novelist is limited by words and the constructs of language.
Fortunately, constraints promote resourcefulness. In fact, creativity and constraint go hand in hand. When designing a new product or service, our relative level of success is often governed by how we manage, embrace or work around the restrictions of our medium.
Creativity in software design could even be described as the ongoing need to generate solutions to these limitations. As craftsmen and artisans looking to make our dent in the universe, we are defined by the choices we make each day in order to overcome them, and the breakthroughs we make in service of altering them.
The trick is finding beauty in the balance. Like a tightrope walker, the goal isn’t just to get from one side of the chasm to another, the most important task is to master the act of balancing.
When the process itself is a source of gratification, the journey is the reward.