7 Habits of Effective Software Architects and Developers Independence (Self) . Delivering technology solutions requires more than choices about just a programming language, SDK library, or infrastructure provider. What is the ? It means asking and answering good questions. It means having a comprehensive vision aligned with organizational capability (present and future) and thinking about security, performance, databases, operating systems, infrastructure (cloud vs. on-premise), availability, resiliency, networking, user interfaces, device access, monitoring, reporting, testing, product/project management, testing, support, customer requirements, change management, and much more. The system consists of the individual components and their relationships to each other; this includes Man and Machine. The whole matters beyond the sum of the parts. Understand Technology Holistically Big Picture 2. . Balancing principle and practice is an art, not a science. This balance is situation dependent; focusing on delivering value to customers (doing the right thing at the right time) whilst giving attention to the system’s evolving architectural quality (doing things the right way). Use advanced CASE and IDE tools. Automate repetitive tasks such as regression tests, builds, and deployments. Be proactive — not reactive. Communicate effectively by email, telephone, IM, and also in person by facilitating and presenting information in groups. Use wikis to share information; use online backlogs to manage projects and tasks across the team. Get Things Done 3. . Prioritize what is important and weight tasks by “bang for the buck”; some call this being Agile or common sense. Do not get distracted. Some sprints may be user and customer focused; other milestones may center around building technology foundations or paying off technical debt. For frequently urgent or distracting matters, resolve the root cause so primary focus can return to what is truly important. First Things First Interdependence (Others) 4. . Customers and the organizations we serve give us a purpose and are the reason we are compensated for what we do. We must listen to users, show empathy, understand their requirements, especially those expressed and obvious, but also surface those in which intent is uncertain and less well known. Once we understand, then we also need to be understood through careful communication about our designs and projects in language and symbols that are precise, mostly visual, and jargon free. Care about Customers 5. . The concept of the lone coder as a hero is mostly a myth. Big, important problems in most organizations require collaboration amongst different stakeholders and a win-win mentality rooted in the common values and practices of respect, humility, integrity, change, articulated decision rights and incentives. Collaborate with Others 6. . Systems and People (and Life) can be complicated, but it does not have to be. By emphasizing core values over rigid rules, we can allow important systems and relationships to remain strong, flexible, and still aligned around what is important. Keep Things as Simple as Possible Continuous Improvement 7. . Great developers and architects love what they do. You cannot teach it, fake it, or hide it. They enjoy sharpening their saw, sharing their excitement about making things better, and improving themselves and others around them. Passion Enjoy the article? Follow me on Medium and Twitter for more updates. References https://blogs.msdn.microsoft.com/johnwpowell/2008/05/22/the-7-habits-of-highly-effective-developers/ https://www.stephencovey.com/7habits/7habits.php http://www.goodprofitbook.com