@@ -19,22 +19,29 @@ arbitrarily. Please don't expect it to be polished.
1919<!-- START doctoc generated TOC please keep comment here to allow auto update -->
2020<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
2121
22-
2322- [ Day-to-Day Work of a Software Engineer] ( #day-to-day-work-of-a-software-engineer )
2423 - [ Leave Work Better: Improving Today for a Simpler Tomorrow] ( #leave-work-better-improving-today-for-a-simpler-tomorrow )
2524 - [ Fast Feedback] ( #fast-feedback )
2625 - [ Start Simple] ( #start-simple )
27- - [ Habitability ] ( #habitability )
26+ - [ Look Outside Your Immediate Task, Maintain the Bigger Picture ] ( #look-outside-your-immediate-task-maintain-the-bigger-picture )
2827 - [ Avoid Work That Can Be Avoided] ( #avoid-work-that-can-be-avoided )
28+ - [ Understand and Respect the Customer] ( #understand-and-respect-the-customer )
2929 - [ Choose Where to Innovate (Carefully)] ( #choose-where-to-innovate-carefully )
3030 - [ Automate everything] ( #automate-everything )
3131 - [ Quick exploration] ( #quick-exploration )
3232 - [ Task Sequencing: Group Related Activities for Efficiency] ( #task-sequencing-group-related-activities-for-efficiency )
3333 - [ Strive for Clarity] ( #strive-for-clarity )
3434 - [ Everything Explicit. No Magic.] ( #everything-explicit-no-magic )
35- - [ Close the loops] ( #close-the-loops )
35+ - [ Close the loops, acknowledge communication ] ( #close-the-loops-acknowledge-communication )
3636 - [ Learn from Lessons] ( #learn-from-lessons )
3737 - [ Use Diagrams] ( #use-diagrams )
38+ - [ Communication and Teamwork] ( #communication-and-teamwork )
39+ - [ Agile Software Development Requires Strong Social Network] ( #agile-software-development-requires-strong-social-network )
40+ - [ Sending Status Updates to the Team] ( #sending-status-updates-to-the-team )
41+ - [ Keep Everyone in the Loop] ( #keep-everyone-in-the-loop )
42+ - [ Recognize the ideas and achievements of your colleagues] ( #recognize-the-ideas-and-achievements-of-your-colleagues )
43+ - [ Professional content] ( #professional-content )
44+ - [ Loop in Experts for Important Actions] ( #loop-in-experts-for-important-actions )
3845- [ Complexity and Cognitive Load] ( #complexity-and-cognitive-load )
3946 - [ Solving Right Problems] ( #solving-right-problems )
4047 - [ Solutions are Context-Driven] ( #solutions-are-context-driven )
@@ -50,6 +57,7 @@ arbitrarily. Please don't expect it to be polished.
5057- [ Design] ( #design )
5158 - [ Poor Abstraction] ( #poor-abstraction )
5259 - [ Cost of Abstraction] ( #cost-of-abstraction )
60+ - [ Habitability] ( #habitability )
5361 - [ Hard Feature] ( #hard-feature )
5462 - [ True Name] ( #true-name )
5563 - [ One Pattern per Class] ( #one-pattern-per-class )
@@ -128,12 +136,6 @@ arbitrarily. Please don't expect it to be polished.
128136 - [ Capturing Meeting Results] ( #capturing-meeting-results )
129137 - [ Briefing In] ( #briefing-in )
130138 - [ Sharing Screen & Presenting Material] ( #sharing-screen--presenting-material )
131- - [ Communication and Teamwork] ( #communication-and-teamwork )
132- - [ Agile Software Development Requires Strong Social Network] ( #agile-software-development-requires-strong-social-network )
133- - [ Sending Status Updates to the Team] ( #sending-status-updates-to-the-team )
134- - [ Keep Everyone in the Loop] ( #keep-everyone-in-the-loop )
135- - [ Recognize the ideas and achievements of your colleagues] ( #recognize-the-ideas-and-achievements-of-your-colleagues )
136- - [ Professional content] ( #professional-content )
137139- [ Systems] ( #systems )
138140 - [ Good enough is often best] ( #good-enough-is-often-best )
139141 - [ Designing Systems for Effective Work] ( #designing-systems-for-effective-work )
@@ -199,22 +201,34 @@ See also Kent Beck's
199201[ Test-Driven Development book] ( https://en.wikipedia.org/wiki/Test-Driven_Development_by_Example )
200202where this approach of doing simple things is explained at great depth.
201203
202- ### Habitability
204+ ### Look Outside Your Immediate Task, Maintain the Bigger Picture
203205
204- Habitable software is better than perfect software.
206+ - When starting any task, take time to understand the rationale behind it (the
207+ WHY).
208+ - See how the task connects to broader goals, milestones, or parallel efforts.
209+ It may be part of a chain where upstream or downstream effects matter.
210+ - Maintain awareness of the bigger picture. A task that seems minor may be a
211+ critical blocker for a more visible effort. Conversely, something that appears
212+ simple might turn out to be time-consuming and affect teammates or
213+ dependencies.
214+ - With a deep understanding of the task, you will start seeing how different
215+ strategies (e.g., Strategy X vs. Strategy Y) can lead to different outcomes.
216+ This kind of insight allows you to:
205217
206- [ Richard Gabriel - Patterns of Software, Habitability and Piecemeal Growth] ( https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf ) .
218+ - Escalate risks early.
219+ - Spot opportunities.
220+ - Align better with the system's or team's needs.
207221
208- > Habitability is the characteristic of source code that enables programmers,
209- > coders, bug-fixers, and people coming to the code later in its life to
210- > understand its construction and intentions and to change it comfortably and
211- > confidently. Either there is more to habitability than clarity or the two
212- > characteristics are different...
222+ A practical application of this mindset in documentation writing: start each
223+ technical page with a clear problem statement and a description of its
224+ surrounding context.
213225
214- > ...Habitability makes a place livable, like home. And this is what we want in
215- > software – that developers feel at home, can place their hands on any item
216- > without having to think deeply about where it is. It's something like clarity,
217- > but clarity is too hard to come by.
226+ - Who or what benefits if this task is completed?
227+ - Does it enable a system, a process, or a team?
228+ - What is the strategic value of solving it?
229+
230+ Framing the problem this way helps readers, especially future engineers, orient
231+ themselves and understand the significance of the solution that follows.
218232
219233### Avoid Work That Can Be Avoided
220234
@@ -238,6 +252,22 @@ off-the-shelf system.
238252In software development, there's a well-known saying: "The best code is the code
239253that is never written".
240254
255+ ### Understand and Respect the Customer
256+
257+ Take time to deeply understand and respect the customer, both the people and the
258+ domain they operate in. Immerse yourself in their context. Know what they care
259+ about, what problems they face, and how your work fits into their world.
260+
261+ When things go smoothly, this understanding helps you deliver real value. When
262+ things get challenging, such as when delays or technical setbacks arise, this
263+ relationship matters even more.
264+
265+ In such situations, transparency is better than defensiveness. A clear and
266+ honest update, even when delivering bad news, builds trust. Customers almost
267+ always prefer being informed early over being surprised later. A transparent
268+ explanation of issues, trade-offs, and risks shows respect for their time,
269+ planning, and decision-making.
270+
241271### Choose Where to Innovate (Carefully)
242272
243273Innovate where your business's focus lies and stay conservative with other areas
@@ -270,8 +300,8 @@ locate the most relevant section rather than reading from A to Z.
270300When exploring with code, a combination of quick-and-dirty scripts can sometimes
271301create miracles, giving immediate and valuable insights. Instead of discarding
272302an idea because it's complex and time-consuming, try implementing a very basic
273- version first— it might provide useful insights or even a functional solution
274- right away.
303+ version first because it might provide useful insights or even a functional
304+ solution right away.
275305
276306### Task Sequencing: Group Related Activities for Efficiency
277307
@@ -409,6 +439,121 @@ express your concepts with the fewest visual elements possible. Creating
409439diagrams that are too visually complex hinders understanding and reduces their
410440effectiveness.
411441
442+ ## Communication and Teamwork
443+
444+ ### Agile Software Development Requires Strong Social Network
445+
446+ ** Agile Software Development Requires Strong Social Network** . This statement is
447+ a generalization: This idea has been there from the beginning and since the
448+ inception of the [ Agile Manifesto] ( https://agilemanifesto.org/ ) , but the
449+ following quote from Kent Beck helps to pinpoint it very clearly:
450+
451+ > In The Forest (more specifically on an XP-style team), we handle communication
452+ > of design & implementation multiple ways:
453+ >
454+ > - Communicative code.
455+ > - Readable & predictive tests.
456+ > - A strong social network.
457+ >
458+ > It's only when there is a large audience for stable information (such as the
459+ > JUnit API) that we resort to separate documentation.
460+
461+ See
462+ [ Kent Beck - Anatomy of Oscillation] ( https://tidyfirst.substack.com/p/anatomy-of-oscillation ) .
463+
464+ ### Sending Status Updates to the Team
465+
466+ Software engineering teams often communicate daily via chat. A proven pattern is
467+ for each team member to send updates about their work, allowing the entire team
468+ to see these messages.
469+
470+ Examples of such messages include:
471+
472+ - "Task X is done, here's the PR link. @A and @B , could you take a look?"
473+ - "This week my focus is... Next, I am going to work on..."
474+ - "I see your PR, but I'm working on something else."
475+ - "What does the team think about introducing the coding convention ABC?"
476+
477+ While this may seem obvious for some teams, there are others where daily chats
478+ are completely silent, reflecting a lack of communication between peers
479+ throughout the day. When messages are exchanged, it creates a certain "pulse"
480+ within the team, signaling that the group is actively working on meaningful
481+ tasks and is open to discussion, iteration, and improvement.
482+
483+ This activity not only serves an informational purpose (increasing awareness)
484+ but also has learning, motivational, and even entertaining aspects.
485+
486+ ### Keep Everyone in the Loop
487+
488+ Share regular updates with the people who rely on your work: your manager,
489+ teammates, or anyone following your technical progress. In fast-moving projects,
490+ keeping others informed helps avoid surprises and keeps everyone aligned.
491+
492+ In an office setting, updates often happen naturally. If the team is
493+ well-connected, these updates may happen through casual conversations or small
494+ talk over lunch. This kind of informal communication spreads useful information
495+ without needing formal meetings.
496+
497+ One big advantage: by the time your work reaches a review—like a code review,
498+ documentation review, or a project milestone—people will already know about it
499+ and may have given input earlier. This makes reviews faster, smoother, and less
500+ stressful.
501+
502+ Another reason to talk about your work: visibility and recognition. Others might
503+ not know:
504+
505+ - what challenges you re facing
506+ - how long something might take
507+ - how your work connects to theirs.
508+
509+ Your teammates are often busy with their own tasks. Clear communication helps
510+ them understand what you are doing and helps your work get noticed and
511+ appreciated.
512+
513+ Stay connected. Stay aligned.
514+
515+ ### Recognize the ideas and achievements of your colleagues
516+
517+ Teamwork involves contributions from all team members. Whether you are a leader
518+ or an individual contributor, it is essential to give credit where it's due when
519+ expressing an idea that you know was authored by someone else.
520+
521+ This is a good practice because it fosters trust and respect within the team,
522+ encouraging open collaboration and the free exchange of ideas. Recognizing
523+ others' contributions also boosts morale, motivates continued input, and
524+ strengthens the overall effectiveness of the team.
525+
526+ An anti-pattern is when the names of the original authors are omitted, and the
527+ work is presented in the first person, either intentionally or unintentionally,
528+ as if the content were one's own.
529+
530+ ### Professional content
531+
532+ When writing an email or chat message, even if addressed to a select group,
533+ consider composing it in a way that it would remain professional and consistent
534+ if shared with a larger or unintended audience. Avoid using vague references
535+ like "we" and "they", especially when referring to internal teams or external
536+ parties such as customers. Refrain from using negative sentences or excessive
537+ emotion. Your content should be polished and ready to be forwarded by anyone, at
538+ any time, whether intentionally or unintentionally.
539+
540+ ### Loop in Experts for Important Actions
541+
542+ When making an important decision, involve the right experts. It is better to
543+ include too many people than to miss someone who should have been part of it.
544+
545+ If you are writing an email or message that speaks for your team or group, check
546+ it with others first. Make sure the message reflects what everyone agrees on.
547+
548+ When a message is aligned like this, it:
549+
550+ - Stays strong even if people question it.
551+ - Builds trust inside and outside the team.
552+ - Shows that the team is working together.
553+
554+ Taking the time to check with others makes your message clearer and more
555+ powerful in the long run.
556+
412557## Complexity and Cognitive Load
413558
414559> "Complexity can be defined as intellectual unmanageability" (Nancy Leveson,
@@ -607,6 +752,23 @@ Those responsible for maintaining such systems often find themselves
607752disentangling unnecessary complexity, seeking a new balance that restores
608753manageability by replacing or introducing more adequate abstractions.
609754
755+ ### Habitability
756+
757+ Habitable software is better than perfect software.
758+
759+ [ Richard Gabriel - Patterns of Software, Habitability and Piecemeal Growth] ( https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf ) .
760+
761+ > Habitability is the characteristic of source code that enables programmers,
762+ > coders, bug-fixers, and people coming to the code later in its life to
763+ > understand its construction and intentions and to change it comfortably and
764+ > confidently. Either there is more to habitability than clarity or the two
765+ > characteristics are different...
766+
767+ > ...Habitability makes a place livable, like home. And this is what we want in
768+ > software – that developers feel at home, can place their hands on any item
769+ > without having to think deeply about where it is. It's something like clarity,
770+ > but clarity is too hard to come by.
771+
610772### Hard Feature
611773
612774If a feature is hard to implement it might indicate that it is something wrong
@@ -1447,95 +1609,6 @@ Common pitfalls:
14471609- If your team is presenting to an external party, align on the materials
14481610 beforehand to ensure consistency in messaging.
14491611
1450- ## Communication and Teamwork
1451-
1452- ### Agile Software Development Requires Strong Social Network
1453-
1454- ** Agile Software Development Requires Strong Social Network** . This statement is
1455- a generalization: This idea has been there from the beginning and since the
1456- inception of the [ Agile Manifesto] ( https://agilemanifesto.org/ ) , but the
1457- following quote from Kent Beck helps to pinpoint it very clearly:
1458-
1459- > In The Forest (more specifically on an XP-style team), we handle communication
1460- > of design & implementation multiple ways:
1461- >
1462- > - Communicative code.
1463- > - Readable & predictive tests.
1464- > - A strong social network.
1465- >
1466- > It's only when there is a large audience for stable information (such as the
1467- > JUnit API) that we resort to separate documentation.
1468-
1469- See
1470- [ Kent Beck - Anatomy of Oscillation] ( https://tidyfirst.substack.com/p/anatomy-of-oscillation ) .
1471-
1472- ### Sending Status Updates to the Team
1473-
1474- Software engineering teams often communicate daily via chat. A proven pattern is
1475- for each team member to send updates about their work, allowing the entire team
1476- to see these messages.
1477-
1478- Examples of such messages include:
1479-
1480- - "Task X is done, here's the PR link. @A and @B , could you take a look?"
1481- - "This week my focus is... Next, I am going to work on..."
1482- - "I see your PR, but I'm working on something else."
1483- - "What does the team think about introducing the coding convention ABC?"
1484-
1485- While this may seem obvious for some teams, there are others where daily chats
1486- are completely silent, reflecting a lack of communication between peers
1487- throughout the day. When messages are exchanged, it creates a certain "pulse"
1488- within the team, signaling that the group is actively working on meaningful
1489- tasks and is open to discussion, iteration, and improvement.
1490-
1491- This activity not only serves an informational purpose (increasing awareness)
1492- but also has learning, motivational, and even entertaining aspects.
1493-
1494- ### Keep Everyone in the Loop
1495-
1496- Provide frequent updates to those who rely on your work – your manager,
1497- teammates, or anyone following your technical progress. In fast-paced
1498- development, keeping others informed helps maintain alignment and prevent
1499- surprises.
1500-
1501- In an office setting, updates often happen naturally. If the team is
1502- well-connected, they can happen during casual conversations or even small talk
1503- over lunch. This kind of informal communication spreads information quickly
1504- without the need for formal status meetings.
1505-
1506- A key benefit of this approach is that by the time your work reaches a review
1507- stage – whether a code review, documentation review, or project
1508- milestone—everyone will already be familiar with it and may have contributed
1509- their input. This reduces friction, speeds up approvals, and makes collaboration
1510- smoother.
1511-
1512- Stay aligned with your team.
1513-
1514- ### Recognize the ideas and achievements of your colleagues
1515-
1516- Teamwork involves contributions from all team members. Whether you are a leader
1517- or an individual contributor, it is essential to give credit where it's due when
1518- expressing an idea that you know was authored by someone else.
1519-
1520- This is a good practice because it fosters trust and respect within the team,
1521- encouraging open collaboration and the free exchange of ideas. Recognizing
1522- others' contributions also boosts morale, motivates continued input, and
1523- strengthens the overall effectiveness of the team.
1524-
1525- An anti-pattern is when the names of the original authors are omitted, and the
1526- work is presented in the first person, either intentionally or unintentionally,
1527- as if the content were one's own.
1528-
1529- ### Professional content
1530-
1531- When writing an email or chat message, even if addressed to a select group,
1532- consider composing it in a way that it would remain professional and consistent
1533- if shared with a larger or unintended audience. Avoid using vague references
1534- like "we" and "they", especially when referring to internal teams or external
1535- parties such as customers. Refrain from using negative sentences or excessive
1536- emotion. Your content should be polished and ready to be forwarded by anyone, at
1537- any time, whether intentionally or unintentionally.
1538-
15391612## Systems
15401613
15411614### Good enough is often best
0 commit comments