If you want to achieve your highest aspirations and overcome your greatest challenges, identify and apply the principle or natural law that governs the results you seek. How we apply a principle will vary greatly and will be determined by our unique strengths, talents, and creativity, but, ultimately, success in any endeavor is always derived from acting in harmony with principles to which the success is tied.
This advice comes from Steven Covey in his best-selling book, The 7 Habits of Highly Effective People. If you haven't read this book yet, you must. It's about effecting change from the inside out for success in both your personal and professional life by aligning your values with principles through practicing seven habits.
Before reading this book, I felt like a passenger on a career freight-train. like something put in motion that I was powerless to control. What I was practicing in my career, my habits, was misaligned with my values, and my values were misaligned with unmovable principles. Although I was powerless over the career train, I came to realize I had the power to choose which train I was on. So here I am at a company that allows me to follow my passion: developing software.
The 7 Habits book is broadly focused, and it made me think about habits specific to my profession. What do those software developers that I consider effective (if not brilliant) have in common? What values drive their decisions and what habits do they practice that make them successful? Here are the seven habits that I think effective developers practice:
The most brilliant people I've worked with are passionate about what they do. They aren't driven by money and fame and, I say this with tongue in cheek, if they didn't have families to feed, would develop software without compensation. If I had two candidates for a development position, I'd rather hire a less-experienced person with passion than a more experienced person without. If you aren't passionate about software development, find what you are passionate about and follow that path.
[Able to Learn, Unlearn and Re-learn]
I believe that learning is an extension of passion, and effective developers operate in a continuum of improvement and innovation. They learn from their and others' mistakes and don't apply old solutions to new problems just because they worked before. Effective developers follow technology, but are careful to not let new approaches become solutions looking for a problem.
[Balance Principle and Practice]
Principle and practice are the Yin and Yang of software development. Effective developers don't design impractical solutions for the sake of principle and don't implement solutions without overarching values. They are willing to compromise based on time, cost, scope and quality constraints, but can also obtain compromise from others based on sound principles.
[Keep It Simple Software (KISS)]
Effective developers implement the simplest possible thing that will work while not painting themselves into a corner. They don't implement anything more than is needed right now, remaining mindful about what might be needed in the future. Effective developers know that the less moving parts there are, the less likely it will break and favor elegance and simplicity over convoluted cleverness.
[If You Don't Know the Answer, Know Someone Who Does]
Software developers aren't renown for their social prowess, but some of the most effective developers I know are excellent at networking. If you give a random 100 question test to a group of people, no one individual will score 100%, but collectively, with few exceptions, the group can answer all the questions correctly. There is so much technology, so many areas of speciality, you can only be an expert on one, maybe two subject areas. Effective developers know the limit of their knowledge, aren't afraid to admit when they don't know something and have many friends and colleagues in their network they can reach out to for help.
[Focus on Value]
Effective developers understand the forces driving the project, its stakeholders and their goals. Using this knowledge to guide their decision making, they focus on delivering tangible value to their customers over anything else. Effective developers prioritize work based on its value--the so called "bang for the buck," and avoid projects and features they don't believe in.
[Puts the Needs of the Many Before the Needs of the One]
I've seen small teams accomplish extraordinary things; it's amazing what "two guys and a laptop" can accomplish. Call it teamwork or synergy or whatever you like, when a group of people put common goals before their own, they converge like light into a laser beam. Contrast this with the arrogant, rogue and cowboy developers who go against team standards or design intents because "that's how I do it" or "that's how you should do it." The message they are really sending is "I am smarter than the team."
These seven habits give me something to work towards and keep me focused. I only had room for seven habits in this article, and I'm sure you can think of many more or define effective in your own way. The important thing is to take a value-driven approach to your software development career and do intentional things that move you towards your definition of success.