<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aviv Kotek</title>
    <description>The latest articles on DEV Community by Aviv Kotek (@akotek).</description>
    <link>https://dev.to/akotek</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F94424%2F09dc9233-b2ef-4e7d-bd07-2f98108df23d.jpg</url>
      <title>DEV Community: Aviv Kotek</title>
      <link>https://dev.to/akotek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akotek"/>
    <language>en</language>
    <item>
      <title>Pods: A Lightweight Delivery Approach</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Sun, 23 Mar 2025 18:35:20 +0000</pubDate>
      <link>https://dev.to/akotek/the-pods-model-a-lightweight-agile-approach-3om2</link>
      <guid>https://dev.to/akotek/the-pods-model-a-lightweight-agile-approach-3om2</guid>
      <description>&lt;p&gt;Not sure how to structure your team for delivery? This simple model can help most teams get started and deliver effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt; A cross-functional team (not "just backend") and visibility into quarterly objectives (quarter feature list).&lt;/p&gt;

&lt;p&gt;Over the past six months, we've transitioned from Scrumban to a Pods model and saw great results. Here's how it works:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pods:&lt;/strong&gt; Split team into 2–3 small, autonomous groups per quarter, each solving one business problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Quarterly Focus:&lt;/strong&gt; Think and plan by quarters. Cancel Sprints.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pod Lead:&lt;/strong&gt; Breaks down work, assigns tasks to pod members, decides who does what and is accountable for delivery.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pod Weekly Sync:&lt;/strong&gt; Maintain context and alignment in a 15-30m sync-meeting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dedicated Channel:&lt;/strong&gt; Each pod has its own Teams space where discussions occur.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Micro Interactions:&lt;/strong&gt; 3 people max (4 with TL) - for both pods and meetings. Keep interactions small.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Get Things Done:&lt;/strong&gt; No Sprints, planning or backlog management. Work without interrupts.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp175d33ueimkx9a3txj8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp175d33ueimkx9a3txj8.png" alt="Teams space" width="339" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ideas for future:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Pod to work against defined business goals (and not feature specs).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add an Analyst to each pod.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Big thanks to Jona Harris and Gilad Naor for your advice along the way :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Joining an existing team can be quite challenging</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Thu, 04 Jul 2024 20:57:47 +0000</pubDate>
      <link>https://dev.to/akotek/joining-an-existing-team-can-be-quite-challenging-47cm</link>
      <guid>https://dev.to/akotek/joining-an-existing-team-can-be-quite-challenging-47cm</guid>
      <description>&lt;p&gt;Joining an existing team can be quite challenging.&lt;/p&gt;

&lt;p&gt;Work is already in progress, you lack significant (sometimes basic) knowledge, have no pre-existing relationships and are expected to make an impact in a relatively short period of time.&lt;/p&gt;

&lt;p&gt;A useful strategy for ramping up quickly as an Engineering Manager is running Boz Algorithm (Thanks Gilad!).&lt;/p&gt;

&lt;p&gt;On your second day at work, meet with a team member and:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ask him to tell you everything he thinks you should know. Listen and take notes.&lt;/li&gt;
&lt;li&gt;Ask about the biggest challenges the team has right now.&lt;/li&gt;
&lt;li&gt;Ask who else you should talk to: write down all the names.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Recursively run the algorithm on anyone listed at (3).&lt;/p&gt;

&lt;p&gt;From (1), you can quickly identify issues that bother team right now and require action. It will also get you familiar with current terminology team uses ("That XY Pipeline...."). This can be tricky, as not everyone will answer right away, so try rephrasing your question ("Is there anything technical you think I should know?", "Product/People/Process?")&lt;/p&gt;

&lt;p&gt;From (2), you can identify low-effort items that are important to the team. This will allow you to make a quick impact.("Kanban board is a mess", "So many meetings....", "Daily is so long...", etc).&lt;/p&gt;

&lt;p&gt;From (3), you can quickly create a map of influence within the organization. The frequency and context in which names appear will let you know on who to focus more at the very beginning.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zzejbh18jbgu5un39ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zzejbh18jbgu5un39ed.png" alt="Andrew Boz" width="700" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>software</category>
      <category>leadership</category>
      <category>management</category>
    </item>
    <item>
      <title>Onboarding new devs</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Sat, 29 Jun 2024 09:40:48 +0000</pubDate>
      <link>https://dev.to/akotek/onboarding-new-developers-1kal</link>
      <guid>https://dev.to/akotek/onboarding-new-developers-1kal</guid>
      <description>&lt;h2&gt;
  
  
  Ramping up quickly matters
&lt;/h2&gt;

&lt;p&gt;Assuming an engineer's median tenure is &lt;a href="https://www.zippia.com/software-engineer-jobs/demographics/" rel="noopener noreferrer"&gt;&lt;strong&gt;2-2.5 years&lt;/strong&gt;&lt;/a&gt;, ramping up quickly &lt;strong&gt;matters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I believe a new dev should be delivering value after &lt;strong&gt;4 weeks&lt;/strong&gt; of &lt;strong&gt;intensive, planned&lt;/strong&gt; onboarding.&lt;/p&gt;

&lt;p&gt;Consider an alternative, where value is delivered after six months. A five-month delay accounts for &lt;strong&gt;20% loss&lt;/strong&gt; of an employee's budget. fun  &lt;a href="https://media.licdn.com/dms/image/D4E12AQGxxxY9VeVt2w/article-inline_image-shrink_1000_1488/0/1658695632487?e=1722470400&amp;amp;v=beta&amp;amp;t=wraGVDd8YiFDiGzB8mn9Wvwj9bQwEUvAJ4B-FwrzTJg" rel="noopener noreferrer"&gt;numbers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Following below ideas, you can create your own team-specific onboarding plan:&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Managers responsibility:&lt;/strong&gt; ramping up is 100% &lt;strong&gt;managers job&lt;/strong&gt;. Free up your time and take it seriously. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Task oriented&lt;/strong&gt;: create a Story ticket, with relevant sub-tasks owned by dev, committed to current &lt;strong&gt;Sprint&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hands-on&lt;/strong&gt;: onboarding includes code and &lt;strong&gt;production tasks from the very beginning&lt;/strong&gt; (think &lt;a href="https://engineering.fb.com/2009/11/19/production-engineering/facebook-engineering-bootcamp/" rel="noopener noreferrer"&gt;'bootcamp'&lt;/a&gt;). We'll start with a code-task to align standards and conventions and move quickly to production tasks. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prod tasks&lt;/strong&gt; can be either: &lt;code&gt;{bug, refactor, small-feature, infra imprv}&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt; 4x weeks, 2w for logistics, dev-task and learning. another 2w for prod tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Identify early&lt;/strong&gt; low performers. bad hires happen, don't drag this too long and try to find red flags from the very begining.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Identify early&lt;/strong&gt; technical weakness, areas of improvements and adjust the onboarding plan accordingly ("New hire never queried a DB").&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ceremonies alignment:&lt;/strong&gt; this is the time to align on: time estimations, technical design, code review and Daily. New hire report's progress on &lt;strong&gt;Daily&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conventions alignment:&lt;/strong&gt; pushes code into a sample repository, following existing standards and validated by code review.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;1x Buddy / Context&lt;/strong&gt;: define a Senior developer that will follow new hire. Every question should go to him, we'd like to minimize overall teams context-switch. This is also a chance to let "potential leaders" an option to mentor others.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Self led&lt;/strong&gt;: it is expected from hire to own and run plan independently. Should not &lt;strong&gt;drain&lt;/strong&gt; other peoples time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Brooks%27s_law" rel="noopener noreferrer"&gt;&lt;strong&gt;Brook's law:&lt;/strong&gt;&lt;/a&gt; do not engage &lt;strong&gt;with critical prod&lt;/strong&gt; tasks at the beginning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Get to know your colleagues:&lt;/strong&gt; engage with  existing team members via &lt;strong&gt;learning sessions&lt;/strong&gt;, where team members teach you a technical related subject and relationships are built ("Backend Services Overview").&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local environment&lt;/strong&gt;: invest time installing local env early on. Verify you have a simple &lt;strong&gt;"how-to" document.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sanity checks:&lt;/strong&gt; schedule check-ins to verify things are as expected and verify: &lt;code&gt;{Do you want to pair more? Do you want more alone time? Are there particular areas you need more guidance in?}&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Retrospective:&lt;/strong&gt; conduct retrospective meeting, &lt;strong&gt;collect data&lt;/strong&gt;, feedback and adjust plan accordingly. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Serves a dual purpose:&lt;/strong&gt; an opportunity to demonstrate new hire that they have joined a professional environment.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Most bootcamp graduates agree that the most valuable part of bootcamp is the tasks they are assigned. 
Engineers have real work assigned to them the first time they open their laptops and many push code to the live site within their first week."
(Boz, 2009)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Following these ideas, you can build your own onboarding plan, &lt;strong&gt;heres how we do it in Semperis&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ffjitxkghi2mny3r6lq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ffjitxkghi2mny3r6lq.png" alt="Example of OB plan" width="696" height="1016"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>onboarding</category>
      <category>engineering</category>
      <category>productivity</category>
      <category>developers</category>
    </item>
    <item>
      <title>You don't always have to be doing something</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Wed, 26 Jun 2024 21:06:04 +0000</pubDate>
      <link>https://dev.to/akotek/you-dont-always-have-to-do-something-44o3</link>
      <guid>https://dev.to/akotek/you-dont-always-have-to-do-something-44o3</guid>
      <description>&lt;p&gt;It often surprises people when I suggest them to rest or read something when they have completed their Sprint tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;You don't always have to be doing something.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Managers often believe that keeping everyone occupied is essential, feeling accomplished when everyone around them is busy.&lt;/p&gt;

&lt;p&gt;However, in software delivery, it's more like a relay race. (Taiichi Ohno). Each team member plays a crucial role in achieving the common goal by completing their part.&lt;/p&gt;

&lt;p&gt;We should focus on passing the baton forward by working on items that matter and provide (business) value, rather than just staying busy and actually, keep running in circles.&lt;/p&gt;

&lt;p&gt;Taking a break, observing or reading something that interest you, can help you identify what truly matters, allowing you to get back to the race and pass the baton effectively.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqzf63eaudedkybut5hb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqzf63eaudedkybut5hb.png" alt="Baton race" width="700" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>rnd</category>
      <category>productivity</category>
      <category>leadership</category>
      <category>code</category>
    </item>
    <item>
      <title>Running effective meetings</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Mon, 15 Jan 2024 21:27:26 +0000</pubDate>
      <link>https://dev.to/akotek/running-effective-meetings-cb6</link>
      <guid>https://dev.to/akotek/running-effective-meetings-cb6</guid>
      <description>&lt;p&gt;After experimenting with meetings in recent years at Sproutt, here are some of our conclusions for running effective meetings:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Utilize a Meetings App:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Have your meeting agendas and notes on a cloud app for time savings and increased transparency. Tag colleagues with action items or notes before and after meetings. At &lt;a href="https://sproutt.com" rel="noopener noreferrer"&gt;Sproutt&lt;/a&gt;, we use &lt;a href="https://fellow.app" rel="noopener noreferrer"&gt;Fellow&lt;/a&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcvcw1idorokkrhrndo0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcvcw1idorokkrhrndo0r.png" alt="CloudApp" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Template Recurrent Meetings:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Create templates for recurring meetings (Weekly, R&amp;amp;D Monthly, Product-R&amp;amp;D, 1:1, Retrospective) to save time on agenda preparation. Fellow templates work well for us.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynwij5rcr8znz63wfhct.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynwij5rcr8znz63wfhct.png" alt="Template meetings" width="800" height="644"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Schedule 15min Meetings:&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
Experiment with shorter, 15-minute meetings. No introductions and side-talks, get things done..&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Schedule Meetings Around Recurrent Events:&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;
Avoid spreading meetings throughout the day (1x morning... 1x afternoon); it disrupts a maker's schedule. Instead, schedule them &lt;strong&gt;&lt;em&gt;next to existing and recurring events&lt;/em&gt;&lt;/strong&gt;, like lunch or Daily to minimizing interruptions and &lt;strong&gt;&lt;em&gt;context switch&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Weekly Meetings Planning:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Start each week by dedicating 20 minutes to plan and outline agendas for all upcoming meetings. Automation (what you communicate in each meeting) isn't just for development; it can also streamline your meetings..&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa78158qczl9brc3xfs9i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa78158qczl9brc3xfs9i.png" alt="Weekly think" width="441" height="245"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Keep Attendees Minimal:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
For technical meetings, limit participants to four or fewer; for non-technical meetings, a maximum of six is ideal.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>meetings</category>
      <category>development</category>
      <category>rnd</category>
    </item>
    <item>
      <title>A simple focus time framework</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Sun, 03 Sep 2023 17:33:45 +0000</pubDate>
      <link>https://dev.to/akotek/a-simple-focus-time-framework-5cmk</link>
      <guid>https://dev.to/akotek/a-simple-focus-time-framework-5cmk</guid>
      <description>&lt;p&gt;Switching from an individual contributor (IC) to becoming a manager is quite a shift for a developer. Apart from handling different tasks, it also means you've got to be great at managing your time.&lt;/p&gt;

&lt;p&gt;Transitioning from handling different tasks each week to taking on a broader range of responsibilities is a significant shift. Instead of focusing on development, code reviews, DevOps and being on call, you'll find yourself responsible for a wider variety of tasks. &lt;/p&gt;

&lt;p&gt;This shift can be particularly challenging if you're used to the focused, uninterrupted time of a &lt;a href="http://www.paulgraham.com/makersschedule.html" rel="noopener noreferrer"&gt;'Maker's schedule' (Paul Graham)&lt;/a&gt;, as managerial roles often involve more meetings and diverse tasks that can disrupt concentrated work periods.&lt;/p&gt;

&lt;p&gt;With more meetings and responsibilities, it can sometimes be tough to stay on track.&lt;/p&gt;

&lt;p&gt;I propose a straightforward time management framework, the "Weekly Focus System" to help you manage your time effectively:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Begin by scheduling a meeting with your direct manager to clearly define your role. Together, discuss "What success looks like" (Gilad Naor).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p93voo2l14g83ul26nx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2p93voo2l14g83ul26nx.png" alt="Define success" width="409" height="147"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Categorize your responsibilities into specific activities and assign each one a label &lt;strong&gt;&lt;em&gt;(Technical = T, Product &amp;amp; Business = PB, Management = M)&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allocate a percentage of your time to each activity. (50% T, 20% PB, 30% M)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ahpbi2nf4nadcvbhu6s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ahpbi2nf4nadcvbhu6s.png" alt="Activities" width="587" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Break down each activity into &lt;strong&gt;&lt;em&gt;sub-task&lt;/em&gt;&lt;/strong&gt; and list them in order of &lt;strong&gt;&lt;em&gt;priority&lt;/em&gt;&lt;/strong&gt; from left to right. For example, if 40% of your time is dedicated to Technical tasks, break them like this: &lt;strong&gt;&lt;em&gt;[Code Review, Tech Design, Code, DevOps]&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a table with &lt;strong&gt;&lt;em&gt;N rows and 2 columns&lt;/em&gt;&lt;/strong&gt;, labeling them as Activity and Time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fill in the table as follows:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For each activity, note the time needed for a focused work block.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Determine the number of blocks required, specify the days, and calculate the total (e.g., "Code Review" 2h Mon, Wed =&amp;gt; 4h).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4ensqg94tswmbi57q19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4ensqg94tswmbi57q19.png" alt="Time Matrix" width="411" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Transform the matrix into recurring and actionable time block on your Google Calendar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2hfh2qlq555hym79pjfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2hfh2qlq555hym79pjfd.png" alt="Calendar" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Commit to this plan, give it a try, and adjust it iteratively as needed.&lt;/p&gt;

</description>
      <category>time</category>
      <category>framework</category>
      <category>engineering</category>
      <category>management</category>
    </item>
    <item>
      <title>Owning your time and estimating better - Toggl Track</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Mon, 14 Aug 2023 14:12:43 +0000</pubDate>
      <link>https://dev.to/akotek/owning-your-time-and-estimating-better-toggl-track-4hjb</link>
      <guid>https://dev.to/akotek/owning-your-time-and-estimating-better-toggl-track-4hjb</guid>
      <description>&lt;p&gt;A common phenomenon many engineers experience is the feeling that despite starting their day early, it ends without tangible progress or a clear sense of what was achieved.&lt;/p&gt;

&lt;p&gt;"It's already 6 PM and I haven't accomplished anything"&lt;/p&gt;

&lt;p&gt;Apart from the discomfort this brings, repeated experiences of this situation negatively impact performance and productivity.&lt;/p&gt;

&lt;p&gt;One of the most crucial skills engineers need, and one that distinguishes junior engineers from their more seasoned counterparts, is the ability to estimate tasks. &lt;a href="https://www.joelonsoftware.com/2007/10/26/evidence-based-scheduling/" rel="noopener noreferrer"&gt;a somehow very challenging one&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;My go-to method for handling estimations, is breaking tasks into smaller sub-tasks and allocating focused time blocks on my calendar (Code X, Code Y, DevOps Z, Product, Code Review). I then estimate the total time needed for each sub-task.&lt;/p&gt;

&lt;p&gt;For instance, task X comprises x1 to x7, where x1 to x3 require a day each, and x4 to x7 take a week combined.&lt;/p&gt;

&lt;p&gt;However, this becomes more challenging when there's no &lt;strong&gt;&lt;em&gt;evidence&lt;/em&gt;&lt;/strong&gt; of how much time a task should take due to lack of experience or historical data.&lt;/p&gt;

&lt;p&gt;The uncertainty of time spent on smaller tasks contributes to the initial issue of time slipping away unnoticed, eroding our control over our schedules. &lt;/p&gt;

&lt;p&gt;A few years ago, I adopted &lt;a href="https://track.toggl.com/timer" rel="noopener noreferrer"&gt;Toggl Track&lt;/a&gt; along with the &lt;a href="https://en.wikipedia.org/wiki/Pomodoro_Technique" rel="noopener noreferrer"&gt;Pomodoro technique&lt;/a&gt;, significantly boosting my productivity.&lt;/p&gt;

&lt;p&gt;Toggl Track functions as a timer. You start it when a new 'focus' block begins and stop it when it ends. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft88uuku967k07f5jrh46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft88uuku967k07f5jrh46.png" alt="Timer" width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Pomodoro technique, which involves breaking work into 'focus' and 'break' intervals (1h focus, 10m break), empowers you to manage and own your time effectively.&lt;/p&gt;

&lt;p&gt;At the end of each week, you receive a comprehensive report detailing your time allocation patterns, facilitating gradual improvement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmivz9imx4b5hrbz58zh4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmivz9imx4b5hrbz58zh4.png" alt="Weekly review" width="542" height="787"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A successful day may involve completing 5 full intervals of one hour* each (measured by Toggl), while a less productive day might include only two to three intervals.&lt;/p&gt;

&lt;p&gt;Another valuable feature of Toggl is its integrations with platforms like: GitHub, Jira, Calendar, and Chrome. These integrations seamlessly provide context about your ongoing tasks (e.g., Code Review: 45 minutes, Planning: 30 minutes, etc.).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmzep4upmhqe9xgrjtcjz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmzep4upmhqe9xgrjtcjz.png" alt="Google Calendar integration" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42s3rupi570hbhf853gc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42s3rupi570hbhf853gc.png" alt="GitHub Integration" width="800" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Start owning your time!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;We're actively seeking talented developers to join our team. PM&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>developer</category>
      <category>productivity</category>
      <category>management</category>
      <category>focus</category>
    </item>
    <item>
      <title>Development life cycle productivity tools</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Sat, 12 Aug 2023 14:22:03 +0000</pubDate>
      <link>https://dev.to/akotek/development-life-cycle-productivity-tools-38jl</link>
      <guid>https://dev.to/akotek/development-life-cycle-productivity-tools-38jl</guid>
      <description>&lt;p&gt;a few nice tools we adopted recently to ease development process and improve productivity - and are very happy with:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Add context automatically to any PR &lt;a href="https://github.com/linear-b/gitstream" rel="noopener noreferrer"&gt;LinearB GitStream&lt;/a&gt;:&lt;/em&gt;&lt;/strong&gt; labels a PR with some context, i.e: time-to-review, missing-tests, deleted-files, big-change etc. very helpful when having several open PRs and want to focus on the high-impactful ones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mhbaxbsdf7aicqxqva2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mhbaxbsdf7aicqxqva2.png" alt="Context" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Automatic PR code review &lt;a href="https://github.com/Codium-ai/pr-agent" rel="noopener noreferrer"&gt;CodiumAI PR Agent&lt;/a&gt;:&lt;/em&gt;&lt;/strong&gt; performs automatic code reviews, suggests code changes and shortly describes any PR. biggest success so far.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9psey48njwzp7dos60d4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9psey48njwzp7dos60d4.png" alt="PR review" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijxv62lw9oul3s8sab60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijxv62lw9oul3s8sab60.png" alt="PR description" width="800" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Security &amp;amp; static analysis checks on PR &lt;a href="//jit.io"&gt;Jit.io&lt;/a&gt;:&lt;/em&gt;&lt;/strong&gt; runs dependency checks, static analysis and IaC misconfigurations on every new introduced changes. can easily trigger slack notification if there are any new “security” issues introduced during development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4eluv0vuebchjw8ghxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4eluv0vuebchjw8ghxe.png" alt="IAC Misconfig" width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Auto approve PR’s according to logic (GitStream):&lt;/em&gt;&lt;/strong&gt; tests-only change, .yml changes, etc&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbplr60j6njtaxta96ls5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbplr60j6njtaxta96ls5.png" alt="Auto approve as safe change" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;GitHub discussions:&lt;/em&gt;&lt;/strong&gt; using existing templates to perform service-related discussions. in our case, this was helpful when conducting technical design meetings, allowing offline process to occur (something similar to code review).&lt;/p&gt;

&lt;p&gt;We’re looking for talented devs to join our team, feel free to PM.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>management</category>
      <category>pr</category>
      <category>github</category>
    </item>
    <item>
      <title>Thoughts on 'Code Simplicity' by Max Kanat-Alexander</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Fri, 05 Apr 2019 11:55:18 +0000</pubDate>
      <link>https://dev.to/akotek/thoughts-on-code-simplicity-by-max-kanat-alexander-22a1</link>
      <guid>https://dev.to/akotek/thoughts-on-code-simplicity-by-max-kanat-alexander-22a1</guid>
      <description>&lt;p&gt;I have read this book lately, after lots of recommendations online and in dev.to as well, i'll try to summarize it with it best ideas and give &lt;strong&gt;my own thoughts on it&lt;/strong&gt; - mostly to do another 'review' of the book for myself.&lt;/p&gt;

&lt;p&gt;Book tells &lt;strong&gt;lessons learned&lt;/strong&gt; by Max Kanat-Alexander, architect of the &lt;a href="https://www.bugzilla.org/" rel="noopener noreferrer"&gt;Bugzilla&lt;/a&gt; project, about his refactoring issues, rewriting and management of the project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F5n89x29ia1xemm3nttte.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F5n89x29ia1xemm3nttte.jpg" title="Code simplicity" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It tries to give ideas about the &lt;strong&gt;'right way'&lt;/strong&gt; of software design, by introducing 'laws' and 'rules'. It's actually tries to give 'philosophical notions' to programming and software development, mostly with 'easy' (to grasp) and known notions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I think&lt;/strong&gt; - if each one of us can have set of 'ideas', 'rules' or guidelines in our minds, (maybe write them down on our offices, conduct 'learning sessions' or practice until they settle) could help us in becoming better software developers. Reading those things in a book, can 'enlighten' us about concepts, making us more aware of them and in practice - write better code. For example: if we embrace simplicity and 'YAGNI' as valuable concepts, we will think on them automatically every-time we write new code. Another example is embracing TDD (which is not mentioned in the book), if we decide to do TDD, this can highly affect the way we code, from the time it takes to the quality. In future, those ideas will lead to better code written.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lets dive into it main concepts:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Understanding&lt;/strong&gt;:&lt;br&gt;
Books starts with this notion - as one of the main things a developer have to know and practice - how to better understand the problem. Max says that it is also a metric to evaluate programmers - a 'good' programmer knows what he is doing every-time and a 'bad' one does not. &lt;strong&gt;Writing code is a mental activity where understanding is everything&lt;/strong&gt;, if you understand what you do precisely - you will do it better.&lt;/p&gt;

&lt;p&gt;I think this is an obvious notion but clearly an eye-opener, it looks very simple and 'known' at start, but, do we really think about 'fully' understanding our task each time before writing code? do we really know what we are doing every-time? what are we trying to achieve? this can give us a new way to think on our (and while doing) software development process.&lt;/p&gt;

&lt;p&gt;I think starting with writing a uni-test is a good practice as well, it can help understand what we are trying to achieve, by explaining it via a test.&lt;/p&gt;

&lt;p&gt;Further more - doing an 'understanding sessions' while implementing or designing or just in middle of a sprint can be a good practice, stop a side and &lt;strong&gt;explain / discuss your task&lt;/strong&gt; with the other teammates or with team leader, to verify- that you understand what you are trying to do. Adding refactoring missions to our sprint - by just checking old components and re-thinking if they are achieving their objective or not - could be another good practice I should embrace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The purpose of software is to help people:&lt;/strong&gt;&lt;br&gt;
Again, an obvious-easy-dummy idea, but - thinking on it every-time we choose tasks for current sprint or designing our program- do we really think if it achieves the purpose of helping someone? would changing and setting our logs in a faster none-relational database can help people? not immediately but it will reduce search time and in future would help out IT people to fix users problems or to track them, and eventually help users.&lt;/p&gt;

&lt;p&gt;Thinking on this while planning our feature requests and coding, could help in reducing writing useless code / components and even rejecting future requests from our bosses / pm. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The three flaws&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fd9xo7587cunf9xgrc2bh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fd9xo7587cunf9xgrc2bh.png" title="The three flaws" alt="alt text"&gt;&lt;/a&gt;&lt;br&gt;
This is a great concept, &lt;strong&gt;noting about three major flaws&lt;/strong&gt; in software design: as our program grows, pieces of it will be needed to change, rather if it is due to customer demands, bugs or new technologies. If you want the program to keep be useful to people - you have to continually change your system as well. You should expect that you will cope with changes of your software.&lt;/p&gt;

&lt;p&gt;Max notes three mistakes programmers usually do, &lt;strong&gt;that makes it much harder to cope with change:&lt;/strong&gt;&lt;br&gt;
    a. Write code that isn't needed.&lt;br&gt;
    b. Not making code easy to change.&lt;br&gt;
    c. Being too generic.&lt;/p&gt;

&lt;p&gt;I think the first one is the most important - &lt;strong&gt;don't write code before you actually need it ('YAGNI')&lt;/strong&gt;. This idea has made some thoughts for myself, as there were times when writing new code I have also added unused methods for 'future' use - this is a waste. It's related to writing new methods, classes and more. This simple concept is vital - write just the code you need for the current problem, if you will need to expand it - do it later. Don't over-design your code, it's a waste of time, it's adding complexity and it's impossible to handle 'every possible thing' as demands are always changing.&lt;/p&gt;

&lt;p&gt;Good design means your code is needed, thus, writing unused code also leads to a bad design.&lt;/p&gt;

&lt;p&gt;This can save us time while programming new modules - and reduce stressful thoughts. Removing code that is not in use is also important - it can reduce misunderstanding of methods and components, which might lead to different design. If you need the code once in future - just go back in your VCS. It is also should be an important ritual in doing Code Reviews -- verify that there is no 'unused code' and 'not needed code'.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt;&lt;br&gt;
The simpler the pieces are, the more easily you can change things in the future. The idea is to make the individual components of your code as simple as possible, and then make sure they stay that way over time. This can be tested as how easily a module is understood by others. The notion assumption is as our software grows - our code base becomes complex and no one can conceive the whole system in his mind all the once.&lt;/p&gt;

&lt;p&gt;Simplicity should be in our mind every-time we produce something new.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Incremental development and design:&lt;/strong&gt;&lt;br&gt;
The flaws mentioned above could be solved using this idea, mainly- we &lt;strong&gt;split our tasks into smaller ones and perform small task each time.&lt;/strong&gt; While we develop incrementally - we also design incrementally, we look back at our design at each step. This approach is executed in Agile development, but not always with the design part. Max notes doing an incremental development - developing features in small iterations, each time developing some piece of it, and &lt;strong&gt;incremental design&lt;/strong&gt;- we build our design incrementally as well. We start with a simple easy design - implement it, then fix the system design to something better. Incremental design is somewhat 'new' and not much 'common', and might need some practice as well, but this is the main addition of Max to the incremental process.&lt;/p&gt;

&lt;p&gt;This might be relevant for newcomers and I'm always facing those issues- thinking just to start with something, with a simple design and implement it- could be useful and get things working in start. &lt;/p&gt;

&lt;p&gt;Another notion of this is the &lt;strong&gt;ORDER of building things&lt;/strong&gt;, building from "the inside out". &lt;strong&gt;build the most important component first&lt;/strong&gt;, then iterate and build the others by using it or not. Haven't had experience with this notion but it makes sense- if you want to build a calculator, build the 'addition' and 'subtraction' first, then as building them as the base - use the others in top of that. This is an interesting idea that can help in producing better code.&lt;/p&gt;

&lt;p&gt;Doing an incremental design is also something that needed to be considered in the agile process - let's add a task of looking back at our design - did we chose the right architecture for this component? do it needs refactoring? and more.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fgdnfgoh3ksrtxcchcnyk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fgdnfgoh3ksrtxcchcnyk.png" title="Incremental" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be consistent:&lt;/strong&gt;&lt;br&gt;
Max notes consistency in context of simplicity, as part of being simple you should also try to &lt;strong&gt;be consistent&lt;/strong&gt;. If we are writing our uni-tests in a specific style of writing - we should keep on doing that. This is helpful as our team mates learn how to use our code in a specific way, being consistent reduces their effort of understanding another part that we have written, as they are familiar with our 'styling' already.&lt;/p&gt;

&lt;p&gt;I think this is a simple (yet again) known idea- but if we give our thoughts on it, practice on it - it's a rule we should all embrace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Software complexity:&lt;/strong&gt;&lt;br&gt;
Software complexity is the notion of how 'complex' is our system - in terms of understanding it and adding code to it. Our software starts small, simple and easy to maintain and over time it gets bigger, complex and difficult to maintain. Defects start to arise and maintainability becomes much more difficult.&lt;/p&gt;

&lt;p&gt;From Max perspective, there should be taken big efforts of keeping code simple, and there should be taken active steps in reducing the complexity, by refactoring and making things simple.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handling complexity - rewriting code:&lt;/strong&gt;&lt;br&gt;
As a programmer, you will run into complexity - as some parts of your system is too complex and not easy to maintain. If a system needs a whole re-write or a refactoring - it should be done in parallel to writing new features and in small pieces.&lt;/p&gt;

&lt;p&gt;In the tension between refactoring vs. rewriting (should we re-write this whole component from scratch or just refactor it), max  refactoring and restructuring the existing codebase as the better option,&lt;/p&gt;

&lt;p&gt;If this concept interests you, &lt;a href="https://techbeacon.com/app-dev-testing/rewrites-vs-refactoring-17-essential-reads-developers" rel="noopener noreferrer"&gt;check this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testings:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2conqo55rar7qysmjf3e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F2conqo55rar7qysmjf3e.jpg" title="TDD" alt="alt text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;The last and maybe 2nd-most important part of this book&lt;/strong&gt; (imo), refers to the only way we can know &lt;strong&gt;how our software behaves depends on the degree we have tested it&lt;/strong&gt;. Or stating it differently - we can only state that our code 'works' if we have tested it. 'Works' is the behavior we expect from our code, if we supply a search() method which returns results - we expect it to behave in a specific way for each query, this must be tested.&lt;/p&gt;

&lt;p&gt;I think that in addition to ensuring that our system 'works' as max noted, being hard with tests (covering more and more behaviors of our code with tests) can gives us more functionality then just testing behaviors: it can be our 'documentation' of the code - how to use our code, it can supply cases on how our code being used - if we use a search engine - how queries are answered, what process it makes and more. It can help other developers use the system.&lt;/p&gt;

&lt;p&gt;This graph shows a long time projects covered correctly with tests vs one which is not.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fmuvjjsgybvf9gvbt72oc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fmuvjjsgybvf9gvbt72oc.png" title="TDD" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;In conclusion&lt;/strong&gt;- Max notes 'known' ideas and facts about software development, but, reading them in a book you have paid for -  and by doing that investing time and concentration on - you are really able to grasp such important ideas. Besides of grasping them - those ideas are highly needed for junior developers and should be practiced and used daily.&lt;/p&gt;

&lt;p&gt;That's it!&lt;/p&gt;

</description>
      <category>codesimplicity</category>
      <category>thoughts</category>
      <category>codingbook</category>
    </item>
    <item>
      <title>Improving team work - 'StackOverflow for teams' style.</title>
      <dc:creator>Aviv Kotek</dc:creator>
      <pubDate>Tue, 02 Apr 2019 17:45:01 +0000</pubDate>
      <link>https://dev.to/akotek/improving-team-work-stackoverflow-for-teams-style-163</link>
      <guid>https://dev.to/akotek/improving-team-work-stackoverflow-for-teams-style-163</guid>
      <description>&lt;p&gt;Few weeks ago, &lt;strong&gt;Joel Spolsky&lt;/strong&gt; arrived to Tel-Aviv and conducted an interesting talk (as usual) &lt;a href="https://www.youtube.com/watch?v=zPd_gtEJjV8" rel="noopener noreferrer"&gt;about software, stackoverflow and more&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Joel noted StackOverflow (SO) new feature -- &lt;strong&gt;'SO for teams'&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fqo6iu48dkprgqbtaww23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fqo6iu48dkprgqbtaww23.png" title="SO for teams" alt="alt text" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of writing documents, powerpoints, emails or just letting your knowledge go away -- Joel offered the &lt;strong&gt;Q+A format of SO&lt;/strong&gt;, internally into your company / team for knowledge management and retention: improve your teams knowledge-sharing by asking and answering questions.&lt;/p&gt;

&lt;p&gt;According to Joel, it is already integrated successfully in many companies ('Apple', 'Microsoft' and more). Instead of looking up in your so-called-internal -knowledge-system, just search for the question, as you do externally when tackling coding problems.&lt;/p&gt;

&lt;p&gt;Besides knowledge retention, &lt;strong&gt;this can be a great tool&lt;/strong&gt; in developing team-work, producing better code and mentoring junior developers.&lt;/p&gt;

&lt;p&gt;What happens if you can't integrate this great tool to your team (too costly, regulations, corporationZZ.......) ? don't give up!&lt;/p&gt;

&lt;p&gt;Two weeks ago I was troubling with work related implementation problem. I had the logic already figured out, but could not implement it due to 3rd-party code issues. I googled the problem and found out there is an unsolved git-pull-request regarding this issue from 2015. Coding the solution myself could be possible, wrapping the 3rd-party code, but I did not liked any of the solutions that on my mind - I wanted a better one.&lt;/p&gt;

&lt;p&gt;I opened a SO thread, but &lt;strong&gt;answers were not coming&lt;/strong&gt; - as the problem was too-linked to our own team-implementation and logic. I had to supply results asap, then I thought on consulting other team members, but how?&lt;/p&gt;




&lt;p&gt;Skyping or emailing my other team members &lt;strong&gt;might not be easy or productive&lt;/strong&gt; - as developers are too bothered with their own tasks and question was too broad. Solving it needed some thought and time,&lt;/p&gt;

&lt;p&gt;But I have already questioning it in StackOverflow.... &lt;strong&gt;why not just consult my team via the SO thread?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then in one of our development meetings I have noted I'm troubling with a problem, and linked everyone with my SO thread.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0rxrj53w4fg54c7h7w80.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0rxrj53w4fg54c7h7w80.JPG" title="Woop!" alt="alt text" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The responses we're great, I expected it would be much easier to understand and tackle the problem while reading it via a thread in your office, and not in a face2face talk or with skype. Besides that, team members wanted to 'show' they can solve the problem (and maybe earn SO points as well?) and a battle between team members on who solving it faster have raised. Describing the question and problem &lt;strong&gt;in detailed SO format&lt;/strong&gt; helped in giving emotion and 'seriousness', as the time I spent on defining and writing the question - also improved my understanding of the problem and my team members took this question more seriously.&lt;/p&gt;

&lt;p&gt;Further more, if you already found out a solution to the problem - &lt;strong&gt;why not sharing it with the whole community?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the senior's offered a solution, &lt;strong&gt;then answered the SO thread&lt;/strong&gt; - &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftsisj14ghhg0ab2o2qh6.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Ftsisj14ghhg0ab2o2qh6.JPG" title="Woop!" alt="alt text" width="800" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;problem solved.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In conclusion, this concept of team-stackoverflowing can be much useful even if you do not have 'SO-for-teams' platform integrated both for knowledge retention but also for team-work and knowledge transfer, as you can just use the public service with your team. Consulting team members using SO platform is much better than email/skype/face2face-questioning, it makes the problem easy to understand, it adds &lt;strong&gt;emotion&lt;/strong&gt; and 'points' to the issue (and thus solves the problem faster), it keeps the data backed-up and it supports the community. &lt;strong&gt;Give it a try!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>stackoverflow</category>
      <category>coding</category>
      <category>teamwork</category>
      <category>agile</category>
    </item>
  </channel>
</rss>
