@@ -19,7 +19,8 @@ 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- - [ Day-to-Day Work of a Software Engineer] ( #day-to-day-work-of-a-software-engineer )
22+
23+ - [ Day-to-Day Work] ( #day-to-day-work )
2324 - [ Leave Work Better: Improving Today for a Simpler Tomorrow] ( #leave-work-better-improving-today-for-a-simpler-tomorrow )
2425 - [ Fast Feedback] ( #fast-feedback )
2526 - [ Start Simple] ( #start-simple )
@@ -29,19 +30,26 @@ arbitrarily. Please don't expect it to be polished.
2930 - [ Choose Where to Innovate (Carefully)] ( #choose-where-to-innovate-carefully )
3031 - [ Automate everything] ( #automate-everything )
3132 - [ Quick exploration] ( #quick-exploration )
33+ - [ Stay Curious and Explore] ( #stay-curious-and-explore )
3234 - [ Task Sequencing: Group Related Activities for Efficiency] ( #task-sequencing-group-related-activities-for-efficiency )
3335 - [ Strive for Clarity] ( #strive-for-clarity )
3436 - [ Everything Explicit. No Magic.] ( #everything-explicit-no-magic )
35- - [ Close the loops, acknowledge communication ] ( #close-the-loops-acknowledge-communication )
37+ - [ Disown Your Work by Sharing It with the Team ] ( #disown-your-work-by-sharing-it-with-the-team )
3638 - [ Learn from Lessons] ( #learn-from-lessons )
3739 - [ Use Diagrams] ( #use-diagrams )
38- - [ Communication and Teamwork ] ( #communication -and-teamwork )
40+ - [ Teamwork and Communication ] ( #teamwork -and-communication )
3941 - [ Agile Software Development Requires Strong Social Network] ( #agile-software-development-requires-strong-social-network )
4042 - [ Sending Status Updates to the Team] ( #sending-status-updates-to-the-team )
43+ - [ Close the loops, acknowledge communication] ( #close-the-loops-acknowledge-communication )
4144 - [ Keep Everyone in the Loop] ( #keep-everyone-in-the-loop )
45+ - [ Talk in Person When You Can] ( #talk-in-person-when-you-can )
4246 - [ Recognize the ideas and achievements of your colleagues] ( #recognize-the-ideas-and-achievements-of-your-colleagues )
47+ - [ Praise Good Work] ( #praise-good-work )
4348 - [ Professional content] ( #professional-content )
4449 - [ Loop in Experts for Important Actions] ( #loop-in-experts-for-important-actions )
50+ - [ Share What Works] ( #share-what-works )
51+ - [ Share and Improve Team Workflows] ( #share-and-improve-team-workflows )
52+ - [ Keep Team Knowledge Alive] ( #keep-team-knowledge-alive )
4553- [ Complexity and Cognitive Load] ( #complexity-and-cognitive-load )
4654 - [ Solving Right Problems] ( #solving-right-problems )
4755 - [ Solutions are Context-Driven] ( #solutions-are-context-driven )
@@ -126,6 +134,7 @@ arbitrarily. Please don't expect it to be polished.
126134 - [ Provide Simulators Alongside Your Hardware] ( #provide-simulators-alongside-your-hardware )
127135- [ Documentation] ( #documentation )
128136 - [ The Illusion of Easy Documentation] ( #the-illusion-of-easy-documentation )
137+ - [ Software Design Document] ( #software-design-document )
129138 - [ Less prose, more structure] ( #less-prose-more-structure )
130139 - [ Too Much Structure Overload] ( #too-much-structure-overload )
131140 - [ Encyclopedic Document] ( #encyclopedic-document )
@@ -167,7 +176,7 @@ arbitrarily. Please don't expect it to be polished.
167176
168177<!-- END doctoc generated TOC please keep comment here to allow auto update -->
169178
170- ## Day-to-Day Work of a Software Engineer
179+ ## Day-to-Day Work
171180
172181### Leave Work Better: Improving Today for a Simpler Tomorrow
173182
@@ -303,6 +312,12 @@ an idea because it's complex and time-consuming, try implementing a very basic
303312version first because it might provide useful insights or even a functional
304313solution right away.
305314
315+ ### Stay Curious and Explore
316+
317+ Look around and see what is new in your field. If you find a cool project, check
318+ who made it and what else they have done. Go to conferences and events. Being
319+ curious helps you learn new things, meet new people, and get fresh ideas.
320+
306321### Task Sequencing: Group Related Activities for Efficiency
307322
308323When sequencing tasks (especially repetitive ones), group related tasks together
@@ -345,46 +360,17 @@ others can understand your work without extra effort. A good test for
345360explicitness is whether understanding is immediate, with no mental effort or
346361blockers when going through the material.
347362
348- ### Close the loops, acknowledge communication
349-
350- A "loop" refers to any situation where one action is followed by another that
351- resolves the first action in some way. Often, these loops are explicitly called
352- "feedback loops" because they are closed with feedback that resolves an
353- outstanding action or state, such as marking it Done, OK, ACK, or something
354- similar.
355-
356- Loops can exist in both developed systems and producing organizations.
363+ ### Disown Your Work by Sharing It with the Team
357364
358- Examples of loops:
365+ Don't make yourself a bottleneck. If you know something complex, share it,
366+ explain it to the team, document it, or build it into tools and processes. The
367+ goal is to avoid being the only person who understands or owns a specific area.
368+ When knowledge is shared, the team becomes stronger and more resilient.
359369
360- - Answering an email from an existing email thread closes the loop created by
361- that thread.
362- - Closing a Pull Request finalizes its status, either as Done or Won't do.
363- - Closing a work item ticket to Done.
364-
365- A task manager is an excellent tool for tracking work items that need to be
366- completed and closed. For tracking non-trivial project development topics and
367- trade-offs, a useful practice is to maintain an "Open Questions Log" – a table
368- where each unresolved or unclosed item is tracked by its current status until it
369- is resolved.
370-
371- Sometimes a loop may never be closed, or it may be closed with a significant
372- delay. Both scenarios can lead to potential problems or even hazards, depending
373- on the type of system being developed.
374-
375- Note that 'Won't-do' is also a valid way to close the loop. For example, closing
376- a Jira ticket with "Won't do" or "Won't fix" positively acknowledges that this
377- work will no longer linger in someone's backlog.
378-
379- Not closing loops is often bad practice. Some examples include:
380-
381- - Not answering an email can cause project delays or result in the
382- implementation of a broken or inconsistent system, leading to incidents or
383- accidents in the future.
384- - A missed or forgotten chat message may mean important information is never
385- delivered to a critical person.
386- - A manager neglecting to follow up on an important topic raised by employees,
387- leaving it unresolved in an inbox without due attention.
370+ This doesn't mean giving up ownership. You can still lead and take full
371+ responsibility for a topic. But the results, details, and usage instructions
372+ should be part of the team's shared knowledge. Strong ownership and open
373+ knowledge go hand in hand.
388374
389375### Learn from Lessons
390376
@@ -439,7 +425,7 @@ express your concepts with the fewest visual elements possible. Creating
439425diagrams that are too visually complex hinders understanding and reduces their
440426effectiveness.
441427
442- ## Communication and Teamwork
428+ ## Teamwork and Communication
443429
444430### Agile Software Development Requires Strong Social Network
445431
@@ -483,6 +469,47 @@ tasks and is open to discussion, iteration, and improvement.
483469This activity not only serves an informational purpose (increasing awareness)
484470but also has learning, motivational, and even entertaining aspects.
485471
472+ ### Close the loops, acknowledge communication
473+
474+ A "loop" refers to any situation where one action is followed by another that
475+ resolves the first action in some way. Often, these loops are explicitly called
476+ "feedback loops" because they are closed with feedback that resolves an
477+ outstanding action or state, such as marking it Done, OK, ACK, or something
478+ similar.
479+
480+ Loops can exist in both developed systems and producing organizations.
481+
482+ Examples of loops:
483+
484+ - Answering an email from an existing email thread closes the loop created by
485+ that thread.
486+ - Closing a Pull Request finalizes its status, either as Done or Won't do.
487+ - Closing a work item ticket to Done.
488+
489+ A task manager is an excellent tool for tracking work items that need to be
490+ completed and closed. For tracking non-trivial project development topics and
491+ trade-offs, a useful practice is to maintain an "Open Questions Log" – a table
492+ where each unresolved or unclosed item is tracked by its current status until it
493+ is resolved.
494+
495+ Sometimes a loop may never be closed, or it may be closed with a significant
496+ delay. Both scenarios can lead to potential problems or even hazards, depending
497+ on the type of system being developed.
498+
499+ Note that 'Won't-do' is also a valid way to close the loop. For example, closing
500+ a Jira ticket with "Won't do" or "Won't fix" positively acknowledges that this
501+ work will no longer linger in someone's backlog.
502+
503+ Not closing loops is often bad practice. Some examples include:
504+
505+ - Not answering an email can cause project delays or result in the
506+ implementation of a broken or inconsistent system, leading to incidents or
507+ accidents in the future.
508+ - A missed or forgotten chat message may mean important information is never
509+ delivered to a critical person.
510+ - A manager neglecting to follow up on an important topic raised by employees,
511+ leaving it unresolved in an inbox without due attention.
512+
486513### Keep Everyone in the Loop
487514
488515Share regular updates with the people who rely on your work: your manager,
@@ -512,6 +539,18 @@ appreciated.
512539
513540Stay connected. Stay aligned.
514541
542+ ### Talk in Person When You Can
543+
544+ If something takes a lot to explain, talk in person instead of writing a long
545+ message. It is especially odd when people in the same office email each other
546+ about things they could easily discuss face to face. Quick conversations often
547+ save time and help avoid misunderstandings.
548+
549+ Sometimes, in-person chats mean interrupting someone, and that can be tricky,
550+ especially if they are doing deep work. But often, if the topic involves both
551+ people and can be resolved quickly, a short conversation is worth the
552+ interruption and lets everyone get back to work with better clarity.
553+
515554### Recognize the ideas and achievements of your colleagues
516555
517556Teamwork involves contributions from all team members. Whether you are a leader
@@ -527,6 +566,16 @@ An anti-pattern is when the names of the original authors are omitted, and the
527566work is presented in the first person, either intentionally or unintentionally,
528567as if the content were one's own.
529568
569+ ### Praise Good Work
570+
571+ Don't hold back from saying "this is great" when a teammate does something
572+ impressive or puts in clear effort. This is especially important if you
573+ consistently deliver high-quality work and expect the same from others. You
574+ might give little feedback because excellence feels like the default. But even a
575+ simple "I see what you have done" can make a real difference. It shows their
576+ work is noticed and appreciated, and it helps build trust and connection within
577+ the team.
578+
530579### Professional content
531580
532581When writing an email or chat message, even if addressed to a select group,
@@ -554,6 +603,35 @@ When a message is aligned like this, it:
554603Taking the time to check with others makes your message clearer and more
555604powerful in the long run.
556605
606+ ### Share What Works
607+
608+ When something works well for you, don't keep it to yourself and share it with
609+ your team. Everyone has their own way of doing things, but your helpful habit or
610+ method might also work for others. A small improvement shared across a team can
611+ have a big impact.
612+
613+ It is not always obvious what counts as a best practice. But if your approach
614+ makes things easier or more effective, and it is different from how others work,
615+ that could be a sign it is worth sharing or at least suggesting.
616+
617+ ### Share and Improve Team Workflows
618+
619+ Try to make daily workflows something the whole team can share. Instead of
620+ everyone using their own custom scripts, set up a common, flexible system for
621+ tasking, development, testing, and debugging. Tools that are used and improved
622+ by many people evolve faster, and the whole team becomes more productive.
623+
624+ ### Keep Team Knowledge Alive
625+
626+ Team knowledge and culture can fade over time, just like a person's memory.
627+ Important ways of working and shared values will not last unless they are
628+ repeated and practiced regularly. If not, they slowly disappear from the group's
629+ habits.
630+
631+ To keep them alive, teams need to refresh what matters. Say the important things
632+ often. Practice them together. Repeating is not just a reminder, it is how a
633+ team holds on to what makes it strong.
634+
557635## Complexity and Cognitive Load
558636
559637> "Complexity can be defined as intellectual unmanageability" (Nancy Leveson,
@@ -1480,16 +1558,35 @@ great option, as these languages integrate well with embedded environments.
14801558Good documentation is dry and boring. This can create an illusion that writing
14811559good documentation is easy when in fact it is not.
14821560
1561+ ### Software Design Document
1562+
1563+ No matter the industry, team size, or type of project, every software team
1564+ should maintain a document that describes the design and architecture of the
1565+ developed system. This document may vary in size — from a few pages to a large,
1566+ detailed file — but its purpose is the same: to give any reader a high-level
1567+ understanding of how the software is structured and how its key parts work
1568+ together.
1569+
1570+ A good approach is to organize it by topic or component, for example, one page
1571+ per software component. Each section should clearly map to something real in the
1572+ software, and vice versa. This helps ensure that every major concept or building
1573+ block is documented, discoverable, and easy to reason about.
1574+
1575+ This kind of document might be called a Design Document, Architecture Document,
1576+ Design File, or similar, depending on the team or industry. Whatever the name,
1577+ its role is the same: to serve as the central, navigable entry point into the
1578+ software's structure and design.
1579+
14831580### Less prose, more structure
14841581
14851582Technical documentation is supposed to focus engineer's attention on achieving a
14861583given goal such as to build a specific system. It is easier to focus one's
14871584attention on things that have structure embedded in them compared to things that
14881585are hidden in several paragraphs of prose. Prose has no structure and that is
1489- why a reader has to do an extra exercise of creating an order out of what he is
1490- reading. If the documentation already has an order in it, the reader can spend
1491- less time for a mental reconstruction of the content and focus on the technical
1492- facts more easily.
1586+ why a reader has to do an extra exercise of creating an order out of what they
1587+ are reading. If the documentation already has an order in it, the reader can
1588+ spend less time for a mental reconstruction of the content and focus on the
1589+ technical facts more easily.
14931590
14941591Some of the important tools that communicate order in technical documentation:
14951592
0 commit comments