I work at Thirdi Software, and one of the initiatives I started was a Quality Software @ Thirdi email newsletter and series of blog posts highlighting quality solutions to software problems. It’s mostly targeted at developers but there’s also some insights to be had for the quality assurance team and for project managers.
The posts were originally posted on the company blog and reproduced here for archival purposes. They touch on a lot of basic information for software developers including software design, upcoming technologies and useful tips to make your life easier.
Check the Quality Software page for links to each article.
Have you ever worked on a software project where you had no idea what would happen to other parts of the system if you made a code change? I have, but I have been able to ask developers on my team that know the system better than I do.
If it’s a larger software project and nobody on the team knows what a change would do, then it would be fair to say the software is overly complex and making forward progress is like wading through a swamp. Software projects, especially larger software projects absolutely must have code that is understandable. When designing software applications, a key component to the architecture is managing complexity to a workable level.
Managing complexity is the most important technical topic in software development. In my view, it’s so important that Software’s Primary Technical Imperative has to be managing complexity.
– Steve McConnell in Code Complete
Unless its a small project, no software developer can contain the design, constraints, and all the technical details in their head at the same time. Software must be made modular so that a developer can work on one section of code without worrying about the rest of the project.
How do you deal with complexity?
- Break up the problem into sub-problems and sub-tasks so you don’t have to solve everything at the same time.
- Contain the complexity to one part of the code.
- Before you solve the complex issue take a step back and make sure you have to solve it that way. There might be a vastly simpler problem that you can solve that will still fulfill your requirements.
Tackle software complexity before it defeats your software project.