I invited some of my friends to discuss the nebulous concepts of coupling and cohesion in software design. How do we think about these topics? How do we understand the terms? How do we use that in our work as programmers? How do we teach it to others? How much does any of it even matter? Our invited guests: Corey Haines, Curtis Cooley, Dale Emery, J. B. Rainsberger, Jim Weirich, Kent Beck, Nat Pryce, Ron Jeffries.
Understanding Coupling and Cohesion
Carry You
It’s hard to breathe sometimes
These nights are long
You’ve lost the will to fight
Can you lead me to the light?
Is anybody out there?
Tell me it’ll all be alright
I’ve been here the whole time singing you a song
I will carry you
I will carry you
Your heart’s a bird without the wings to fly
Can you take this weight of mine?
Is anybody out there?
Can you lead me to the light?
I’ve been here the whole time singing you a song
I will carry you
I will carry you
What was the inspiration behind the song? => https://youtu.be/SJURFa1jlwo
Engineering Playbook
CSE Code-With Customer/Partner Engineering Playbook
An engineer working for a CSE project…
- Has responsibilities to their team – mentor, coach, and lead.
- Knows their playbook. Follows their playbook. Fixes their playbook if it is broken. If they find a better playbook, they copy it. If somebody could use your playbook, give them yours.
- Leads by example. Models the behaviors we desire both interpersonally and technically.
- Strives to understand how their work fits into a broader context and ensures the outcome.
This is our playbook. All contributions welcome! Please feel free to submit a pull request to get involved.
Note: If you are reading this on github – head over to https://microsoft.github.io/code-with-engineering-playbook/ for a better reading experience
Why Have A Playbook
- To increase overall efficiency for team members and the whole team in general.
- Reduce the number of mistakes and avoid common pitfalls.
- Strive to be a better engineer and learn from other people’s shared experience.
“The” Checklist
If you do nothing else follow the Engineering Fundamentals Checklist! It’s here to help follow the Engineering Fundamentals.
Structure of a Sprint
A breakdown of sections according to the structure of an Agile sprint.
General Guidance
- Keep the code quality bar high.
- Value quality and precision over ‘getting things done’.
- Work diligently on the one important thing.
- As a distributed team take time to share context via wiki, teams and backlog items.
- Make the simple thing work now. Build fewer features today, but ensure they work amazingly. Then add more features tomorrow.
- Avoid adding scope to a backlog item, instead add a new backlog item.
- Our goal is to ship incremental customer value.
- Keep backlog item details up to date to communicate the state of things with the rest of your team.
- Report product issues found and provide clear and repeatable engineering feedback!
- We all own our code and each one of us has an obligation to make all parts of the solution great.
QuickLinks
Engineering Fundamentals
- Agile Development
- Automated Testing
- Code Reviews
- Continuous Delivery (CD)
- Continuous Integration (CI)
- Design Decision Logs
- Design Reviews
- Developer Experience
- Engineering Feedback
- Observability
- Security
- Source Control
- Reliability
Fundamentals for Specific Technology Areas
Contributing
See CONTRIBUTING.md for contribution guidelines.
Awesome Agile
Awesome Agile
Awesome List of resources on Agile Software Development.
Contents
- The Fundamentals
- Key Concepts
- Agile Adoption
- Team and Roles
- Engineering
- Product Development
- User Stories and Estimation
- Ceremonies
- Metrics
- Agile Leadership
- Blogs and Podcasts
The Fundamentals
- Agile Manifesto
- Agile Principles
- Agile Glossary
- Agile Mindset
- Periodic Table of Agile Principles and Practices – by Jerome Kehrli
Key Concepts
Agile Adoption
Team and Roles
- Team (includes resources on Team Building, Teamwork, Great Teams and Team Dysfunctions)
- Product Owner
- Scrum Master
- Agile Coach
Engineering
- Acceptance Testing
- Agile Architecture
- Agile Engineering Self Assessment
- Behaviour Driven Development (BDD)
- Code Reviews
- Continuous Delivery
- Continuous Integration
- Domain Driven Design (DDD)
- Feature Flag Driven Development
- InnerSource
- Pair Programming
- Refactoring
- Test Driven Development (TDD)
- Technical Debt
Product Development
- A/B Testing
- Design Sprint
- Design Thinking
- Objectives and Key Results (OKRs) and Radical Focus
- Product Backlog
- Product Management
- Product Roadmap and Prioritisation
- Minimum Viable Product (MVP)
User Stories and Estimation
- Epics
- User Stories
- User Story Splitting
- User Story Mapping
- Estimation
- Definition of Done
- Definition of Ready
Ceremonies
Metrics
Agile Leadership
- 7 Lessons Agile Can Teach Us about Leadership – by Ryan Ripley
- Decisions
- Management 3.0
Blogs and Podcasts
- The Agile Revolution Podcast – The Podcast That Is Everything Agile, Lean and Kanban
- J.D. Meier’s Blog – Agile Results, Digital Business Transformation, and Program Management
- Agile Archives – Atlassian Blog
- DZone Agile
- Blog – Agile Alliance
- Mike Cohn’s Blog at Mountain Goat Software
- Resources Archive – SolutionsIQ
- Blog – Gamestorming
Six Conditions of High Performance in the Workplace
Research suggests these six psychological conditions help employees and teams to perform at their best.
Connect to Perform empowers managers and employees to have conversations throughout the year to help foster these conditions.
Purpose
There are different kinds of purpose:
- Task Purpose: Knowing our work counts so our efforts aren’t wasted or excessive.
- Collective Purpose: Seeing how our work combines with others to create something none of us could achieve alone.
- Social Purpose: Recognizing that our work makes a worthwhile contribution beyond the success of our organization.
Challenge
The greatest challenges are:
- Just out of Reach: If your goal is just out of reach and you’re not sure how you are going to achieve it, then you probably have an appropriate stretch goal.
- Aligned: Consider how your individual goals are aligned to your personal strengths and motivations, as well as the organizational strategy and the goals of your team, department and Faculty/Unit.
- Always up for Review: The world around us is constantly changing which means that our goals should be reviewed and possibly updated throughout the year.
Growth
TWe grow faster when we have:
- A Growth Mindset: We believe that we can get better and believe the same of our colleagues.
- A Role Plays to our Strengths: We are doing work that aligns to our aptitudes and uses our skills.
- Slight of Better Prospects: We can see that by getting better now, we’re more likely to attain something that matters to us in the future.
Choice
We keep our performance high when we choose to:
- Create social support: Build a strong network of technical, emotional and practical support.
- Adopt an optimistic outlook; Interpret challenges as short-term, and a source of insight.
- Focus on what’s in our control: Draw on inner strength and grit to maintain effort and interest over time to sustain performance in spite of setbacks.
Recognition
We feel most appreciated when recognition is:
- Fair: Above all, recognition is based on clear criteria and applied consistently across my peers.
- About me: Recognition is about me and what I did to contribute, not about the person giving it, the mood they happen to be in, or the kind of people they like.
- Differentiated: The difference between recognizing above-and-beyond performance and day-to-day work is proportional.
Attention
Feedback, positive or constructive, that makes the biggest difference includes the following:
- Situation: Context is provided and includes specific details such as when and where the event occurred.
- Behaviour: Describe the behaviour objectively. Say what was observed.
- Impact: Relate how the behaviour impacted you or others. Why does it matter? Who did it affect?
software developers and deep learning
There are two kinds of software developers: those who already use deep learning, and those who will use deep learning next.
François Chollet

