SlideShare a Scribd company logo
1 of 2
Download to read offline
LESSONS LEARNED ABOUT SOFTWARE DEVELOPMENT

Hello, my name is Jeff Thalhammer. I've been a software developer for a few years. I still have
a lot to learn about my profession, but I would like to think I have acquired a few bits of wisdom
over the years. So in the next five minutes, I'm going to share with you the most important
lessons that I have learned about software development...

                          Lesson 1: The best code is no code at all.

The moment you begin writing code, you start creating bugs. Every line of code is a future
liability. So the less code you have, the less risk you take on. This may sound counter-intuitive,
but good software development is all about avoiding writing code.

Code-avoidance happens in a lot of ways. For example, you might be tasked with writing code
to add up the sales figures on the quarterly TPS reports. But if you do a bit of digging, you'll find
that you can just get the total by calling Mary over in the accounting department. Bam! Problem
solved with no code.

Open source and commercial products are another good way to avoid code. Despite what you
might like to think, you are not special. A lot of problems have already been solved by people a
lot smarter than you or I. And if their solutions don't seem to fit, then you really need to think
hard and justify why your needs are so different.

Software itself is actually full of code-avoidance mechanisms: subroutines, libraries, object
orientation, web services, virtualization, cloud computing. These all exist for the purpose of not
writing code. Use them.

As developers, it is hard to resist the temptation to write code. That's what we are here for after
all. But that isn't really your job. Your job is to help solve problems in the most effective and
prudent way that you know how. Code is just *one* of the weapons in your problem-solving
arsenal. So think about that before you write your next line of code.

                Lesson 2: Code is for humans first, and computers second.

Once you've concluded that you actually must write some code, you need to remember who you
are writing it for. And no, you are not writing code for the computer.

Like all languages, programming languages are just a way for us humans to communicate with
each other and ourselves. We typically think that code is the "solution". But it's not. Code is
actually how we express the *problem*. Once you've fully expressed the problem, then a
computer will dutifully execute the solution. But -- this is key -- the problem is ours, not the
computer's.

Unfortunately, computers aren't very smart. So we have to invent these awkward little
languages they can understand. But we get so caught up in those little languages that we let
them constrain our own ability to express ourselves clearly, often to the point that we don't even
understand it.

So when you write code, remember that you are actually trying to express a real human problem
in an artificial language. So the more your code resembles a human language, the more likely it
is to be an accurate definition of the problem. And if the problem is defined well, then the
computer will probably give you the right solution.

                   Lesson 3: You Are Not As Smart As You Think You Are.

In many professions, you can at least identify the entire body of knowledge that you'll ever need
in that career. But the software industry is constantly evolving. Most of the things you learned
five years ago are no longer relevant, or may be down right incorrect. True, some changes are
just fads and some learning is inevitably wasted on dead-end ideas. But how will you know
which are which?

The only way for a person or an organization to succeed in this business is to constantly keep
learning. More importantly, you must learn how to learn effectively. You must question your old
habits, seek alternative perspectives, and acquire knew knowledge. And just as important, you
must act on that knowledge. Otherwise, it is just trivia.

So the challenge is to cultivate an organization that promotes effective learning. The good news
is that learning opportunities are everywhere. Every line of code, every presentation, every
meeting is an opportunity. But first, you must instill people (or yourself) with traditions and values
that enable them to recognize and exploit those opportunities.

             Lesson 4: Software development is 80% social and 20% technical.

Writing code is the easy part. Anyone can do it. There are millions of developers in China and
India who are willing and able to write code for you. And when technical questions arise, most of
the answers are freely available. Just ask Google. The really hard part is figuring out *what*
code to write.

Figuring out what to write requires asking a lot of questions: What is the real problem we are
trying to solve? Which parts of the problem are constant? Which parts are subject to change?
How likely is it to change? Which are the critical features? Which features are fluff? What kind
of resources to we have available? The answers to these questions require conversations with
actual human beings.

So the message here is that to succeed in this industry, your social skills need be just as good
(or even better) than your technical skills. You need to be able to communicate with people and
find out what they really need, how they feel, what their history is, what their goals are, what they
are doing.

When working on a team, we all have different roles to play -- we each have our own areas of
strength -- and that's fine. But as a whole, the team must balance their technical and social
skills. The unfortunate thing is that most organizations don't (or can't) really operate as teams.
Developers end up playing lots of roles, some of which they haven't really mastered. So for
them to succeed as individuals in that kind of environment, developers also need to be mindful of
the balance between their own social and technical skills.

Final thoughts: Quality is not an act, it is a habit. --Aristotle

Thanks for your time.

More Related Content

Similar to Lessons Learned About Software Development

Why learn how to code
Why learn how to codeWhy learn how to code
Why learn how to codeJoey Rigor
 
The passionate programmer
The passionate programmerThe passionate programmer
The passionate programmerMahmoud Tolba
 
Trends In Technical Communication
Trends In Technical CommunicationTrends In Technical Communication
Trends In Technical CommunicationBogo Vatovec
 
Choose Boring Technology
Choose Boring TechnologyChoose Boring Technology
Choose Boring TechnologyDan McKinley
 
Marketing Your Open Source Project - OSCON 2019_v04.pdf
Marketing Your Open Source Project - OSCON 2019_v04.pdfMarketing Your Open Source Project - OSCON 2019_v04.pdf
Marketing Your Open Source Project - OSCON 2019_v04.pdfAmazon Web Services
 
A Cup of Tea With Michael Larsen
A Cup of Tea With Michael LarsenA Cup of Tea With Michael Larsen
A Cup of Tea With Michael LarsenMichael Larsen
 
22 practical skills that everyone should learn in 2021
22 practical skills that everyone should learn in 202122 practical skills that everyone should learn in 2021
22 practical skills that everyone should learn in 2021Mirza Rihad Ali Sunny
 
How to tell a better story (in code)(final)
How to tell a better story (in code)(final)How to tell a better story (in code)(final)
How to tell a better story (in code)(final)Bonnie Pan
 
Clean Code Software Engineering
Clean Code Software Engineering Clean Code Software Engineering
Clean Code Software Engineering Inocentshuja Ahmad
 
How to become a great developer
How to become a great developerHow to become a great developer
How to become a great developerNetcetera
 
ERE Job Descriptions Presentation - John Greer
ERE Job Descriptions Presentation - John GreerERE Job Descriptions Presentation - John Greer
ERE Job Descriptions Presentation - John GreerJohn Greer
 
C Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh Share
C Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh ShareC Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh Share
C Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh ShareNho Vĩnh
 
Future of IT preso
Future of IT presoFuture of IT preso
Future of IT presoLorna Garey
 
Community engagement
Community engagementCommunity engagement
Community engagementRoss Turk
 
UCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction designUCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction designsdavis6b
 
How to Become a Conference Speaker
How to Become a Conference SpeakerHow to Become a Conference Speaker
How to Become a Conference SpeakerSven Peters
 
Computer Science fundamentals by Jordan Ryan Molina
Computer Science fundamentals by Jordan Ryan MolinaComputer Science fundamentals by Jordan Ryan Molina
Computer Science fundamentals by Jordan Ryan MolinaJordan Ryan Molina
 

Similar to Lessons Learned About Software Development (20)

Why learn how to code
Why learn how to codeWhy learn how to code
Why learn how to code
 
The passionate programmer
The passionate programmerThe passionate programmer
The passionate programmer
 
Trends In Technical Communication
Trends In Technical CommunicationTrends In Technical Communication
Trends In Technical Communication
 
Choose Boring Technology
Choose Boring TechnologyChoose Boring Technology
Choose Boring Technology
 
Marketing Your Open Source Project - OSCON 2019_v04.pdf
Marketing Your Open Source Project - OSCON 2019_v04.pdfMarketing Your Open Source Project - OSCON 2019_v04.pdf
Marketing Your Open Source Project - OSCON 2019_v04.pdf
 
How to learn coding
How to learn codingHow to learn coding
How to learn coding
 
A Cup of Tea With Michael Larsen
A Cup of Tea With Michael LarsenA Cup of Tea With Michael Larsen
A Cup of Tea With Michael Larsen
 
22 practical skills that everyone should learn in 2021
22 practical skills that everyone should learn in 202122 practical skills that everyone should learn in 2021
22 practical skills that everyone should learn in 2021
 
How to tell a better story (in code)(final)
How to tell a better story (in code)(final)How to tell a better story (in code)(final)
How to tell a better story (in code)(final)
 
Clean Code Software Engineering
Clean Code Software Engineering Clean Code Software Engineering
Clean Code Software Engineering
 
How to become a great developer
How to become a great developerHow to become a great developer
How to become a great developer
 
ERE Job Descriptions Presentation - John Greer
ERE Job Descriptions Presentation - John GreerERE Job Descriptions Presentation - John Greer
ERE Job Descriptions Presentation - John Greer
 
C Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh Share
C Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh ShareC Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh Share
C Programming_ Step By Step Beginner's To Experts _ Nho Vĩnh Share
 
Future of IT preso
Future of IT presoFuture of IT preso
Future of IT preso
 
Software piracy
Software piracySoftware piracy
Software piracy
 
Community engagement
Community engagementCommunity engagement
Community engagement
 
Coding lessons.pdf
Coding lessons.pdfCoding lessons.pdf
Coding lessons.pdf
 
UCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction designUCD / IxD Introduction - User centric design, interaction design
UCD / IxD Introduction - User centric design, interaction design
 
How to Become a Conference Speaker
How to Become a Conference SpeakerHow to Become a Conference Speaker
How to Become a Conference Speaker
 
Computer Science fundamentals by Jordan Ryan Molina
Computer Science fundamentals by Jordan Ryan MolinaComputer Science fundamentals by Jordan Ryan Molina
Computer Science fundamentals by Jordan Ryan Molina
 

More from Jeffrey Ryan Thalhammer

More from Jeffrey Ryan Thalhammer (6)

I Got 99 Problems But CPAN Ain't One
I Got 99 Problems But CPAN Ain't OneI Got 99 Problems But CPAN Ain't One
I Got 99 Problems But CPAN Ain't One
 
Pinto+Stratopan+Love
Pinto+Stratopan+LovePinto+Stratopan+Love
Pinto+Stratopan+Love
 
Dependency Management With Pinto
Dependency Management With PintoDependency Management With Pinto
Dependency Management With Pinto
 
Perl Critic In Depth
Perl Critic In DepthPerl Critic In Depth
Perl Critic In Depth
 
CPAN For Private Code
CPAN For Private CodeCPAN For Private Code
CPAN For Private Code
 
Evolving Tests
Evolving TestsEvolving Tests
Evolving Tests
 

Recently uploaded

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdfChristopherTHyatt
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 

Recently uploaded (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 

Lessons Learned About Software Development

  • 1. LESSONS LEARNED ABOUT SOFTWARE DEVELOPMENT Hello, my name is Jeff Thalhammer. I've been a software developer for a few years. I still have a lot to learn about my profession, but I would like to think I have acquired a few bits of wisdom over the years. So in the next five minutes, I'm going to share with you the most important lessons that I have learned about software development... Lesson 1: The best code is no code at all. The moment you begin writing code, you start creating bugs. Every line of code is a future liability. So the less code you have, the less risk you take on. This may sound counter-intuitive, but good software development is all about avoiding writing code. Code-avoidance happens in a lot of ways. For example, you might be tasked with writing code to add up the sales figures on the quarterly TPS reports. But if you do a bit of digging, you'll find that you can just get the total by calling Mary over in the accounting department. Bam! Problem solved with no code. Open source and commercial products are another good way to avoid code. Despite what you might like to think, you are not special. A lot of problems have already been solved by people a lot smarter than you or I. And if their solutions don't seem to fit, then you really need to think hard and justify why your needs are so different. Software itself is actually full of code-avoidance mechanisms: subroutines, libraries, object orientation, web services, virtualization, cloud computing. These all exist for the purpose of not writing code. Use them. As developers, it is hard to resist the temptation to write code. That's what we are here for after all. But that isn't really your job. Your job is to help solve problems in the most effective and prudent way that you know how. Code is just *one* of the weapons in your problem-solving arsenal. So think about that before you write your next line of code. Lesson 2: Code is for humans first, and computers second. Once you've concluded that you actually must write some code, you need to remember who you are writing it for. And no, you are not writing code for the computer. Like all languages, programming languages are just a way for us humans to communicate with each other and ourselves. We typically think that code is the "solution". But it's not. Code is actually how we express the *problem*. Once you've fully expressed the problem, then a computer will dutifully execute the solution. But -- this is key -- the problem is ours, not the computer's. Unfortunately, computers aren't very smart. So we have to invent these awkward little languages they can understand. But we get so caught up in those little languages that we let them constrain our own ability to express ourselves clearly, often to the point that we don't even understand it. So when you write code, remember that you are actually trying to express a real human problem in an artificial language. So the more your code resembles a human language, the more likely it
  • 2. is to be an accurate definition of the problem. And if the problem is defined well, then the computer will probably give you the right solution. Lesson 3: You Are Not As Smart As You Think You Are. In many professions, you can at least identify the entire body of knowledge that you'll ever need in that career. But the software industry is constantly evolving. Most of the things you learned five years ago are no longer relevant, or may be down right incorrect. True, some changes are just fads and some learning is inevitably wasted on dead-end ideas. But how will you know which are which? The only way for a person or an organization to succeed in this business is to constantly keep learning. More importantly, you must learn how to learn effectively. You must question your old habits, seek alternative perspectives, and acquire knew knowledge. And just as important, you must act on that knowledge. Otherwise, it is just trivia. So the challenge is to cultivate an organization that promotes effective learning. The good news is that learning opportunities are everywhere. Every line of code, every presentation, every meeting is an opportunity. But first, you must instill people (or yourself) with traditions and values that enable them to recognize and exploit those opportunities. Lesson 4: Software development is 80% social and 20% technical. Writing code is the easy part. Anyone can do it. There are millions of developers in China and India who are willing and able to write code for you. And when technical questions arise, most of the answers are freely available. Just ask Google. The really hard part is figuring out *what* code to write. Figuring out what to write requires asking a lot of questions: What is the real problem we are trying to solve? Which parts of the problem are constant? Which parts are subject to change? How likely is it to change? Which are the critical features? Which features are fluff? What kind of resources to we have available? The answers to these questions require conversations with actual human beings. So the message here is that to succeed in this industry, your social skills need be just as good (or even better) than your technical skills. You need to be able to communicate with people and find out what they really need, how they feel, what their history is, what their goals are, what they are doing. When working on a team, we all have different roles to play -- we each have our own areas of strength -- and that's fine. But as a whole, the team must balance their technical and social skills. The unfortunate thing is that most organizations don't (or can't) really operate as teams. Developers end up playing lots of roles, some of which they haven't really mastered. So for them to succeed as individuals in that kind of environment, developers also need to be mindful of the balance between their own social and technical skills. Final thoughts: Quality is not an act, it is a habit. --Aristotle Thanks for your time.