Four Principles of Software Development
How Software Ought to be Done and What it Means to be a Senior Developer
Today, software development is more ubiquitous than ever and the field is changing at break-neck speeds. It seems that there are constantly new frameworks, standards, and technologies. Much of the technical advice on how to build a software application today will be different in just a few short years (or maybe even months). With all this fast-paced change in the industry, how can we recognize good software development when we see it? Are there software development principles that withstand the test of time? Are there development principles that will still be relevant ten years from now?
Also, what does it mean to be a senior software developer? I have worked with a wide variety of developers, from people straight out of college in their first job, to people that have been doing software development since before I was born. The term senior software developer can be very ambiguous and means different things to different people. Somehow, almost every developer I know has the term “senior” in their title, even if they only have a few years of experience. But have you ever stopped to think about what it means to be a senior developer? When I ask developers I almost always get different answers and I find that many developers struggle to define this.
In my opinion, what sets a senior developer apart, is the knowledge, insights, and experience of software development best practices that will withstand the test of time. These are ideas and philosophies that transcend the current framework or library of the month, or even the current technology or programming language that is hot right now. These are the principles and philosophies in enterprise software development that will make a project succeed or fail. Because in the end, that’s really all that matters. As a developer, we are trying to deliver products that solve real-world problems. And at the end of the day, if your code doesn’t solve that problem, isn’t accepted by the users, or fails to deliver to the stakeholders, then that project will fail. No amount of refactoring, optimization, or test coverage will help you if you’ve built the wrong thing, something that does not solve the right problem.
Staying up to date on the latest versions of technologies, using the best frameworks, ensuring high code coverage, and writing highly optimized and performant code are all great things in a software project, but, in my experience, those aren’t the things that will make or break a project. Knowing what’s really important in software development is hard to understand, and perhaps even harder to teach. These ideas are difficult to learn without years of diverse experience and without seeing projects succeed and fail for yourself.
As of the time of this writing, I have more than a dozen years of software development experience in various aspects of web development. I have been on projects that have had tremendous successes and others that have had disastrous failures. I propose the P.E.E.R. acronym to describe four principles that set a senior developer apart, four principles that define how software ought to be done. I believe these are the most important principles in software and they are (in order of importance): People, Effectiveness, Efficiency, and Relevancy. Over the next four articles, I will describe each of these in detail pulling from sources that have been most influential to my career such as Patrick Lencioni, Eric Evans, Udi Dahan, Robert Martin, and Vladimir Khorikov.