<?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: Doug Arcuri</title>
    <description>The latest articles on DEV Community by Doug Arcuri (@solidi).</description>
    <link>https://dev.to/solidi</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%2F258665%2Fa8b4eda2-c2e8-4530-a4eb-2aef6db0eb4d.jpg</url>
      <title>DEV Community: Doug Arcuri</title>
      <link>https://dev.to/solidi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/solidi"/>
    <language>en</language>
    <item>
      <title>Prefer Accommodating Over Accurate App Experiences</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Mon, 16 Oct 2023 13:42:58 +0000</pubDate>
      <link>https://dev.to/solidi/prefer-accommodating-over-accurate-app-experiences-7nh</link>
      <guid>https://dev.to/solidi/prefer-accommodating-over-accurate-app-experiences-7nh</guid>
      <description>&lt;p&gt;Comedy captured the moment as I suggested a destination to the GPS app. "Navigate to such and such place." A five-second pause. "Something went wrong." I tried again, &lt;em&gt;twice&lt;/em&gt;. "You will arrive in three hours." Smirking, I said, "Hehe, yeah, right!" I've been through this rodeo. "No way it's three hours, more like four and a half!" An unneeded reply chimed, "Sorry, I don't understand."&lt;/p&gt;

&lt;p&gt;We hurried above the speed limit, got fast food, and hit sporadic traffic. We arrived in &lt;em&gt;four and a half hours&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;For me, these experiences are typical, having not improved in years.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apps Prefer Accuracy
&lt;/h2&gt;

&lt;p&gt;Being involved &lt;a href="https://medium.com/@solidi/read-these-5-passionate-software-engineering-books-this-holiday-6c6ad8fbd211"&gt;in software&lt;/a&gt; for a time, I've had the pleasure to work with brilliant technological and &lt;a href="https://dev.to/solidi/what-is-a-product-manager-anyway-3pc4"&gt;product&lt;/a&gt; people. And yeah, every team skewed toward the happy path, preferring &lt;strong&gt;&lt;em&gt;accurate over accommodating&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Accuracy is demanded in our culture, driven by two points: the relentless pressure to release and moving on to the next thing. Failing gracefully is not on the incentive list.&lt;/p&gt;

&lt;p&gt;Apps that are &lt;strong&gt;&lt;em&gt;accurate&lt;/em&gt;&lt;/strong&gt; perform discretely, abandoning the user experience during errors, which drives odd customer behaviors. Consumers utilize unconventionality to get what they need, such as unduly forced closing apps, clearing cache, reinstalling, tapping numerous times to get the reward, or a secret action to perform the transaction, fiddling with settings to achieve it. Or, in my case, knowing how to deal with a familiar skew of results.&lt;/p&gt;

&lt;p&gt;These behaviors have become common, a badge of honor. For customer service, there is a growing backlog of complaints, low user ratings, and rising churn.&lt;/p&gt;

&lt;p&gt;The result is a consumer that acquires pessimism, frustration, the burden of remembering unique tricks, being overcome with doubt, and, in time, abandoning the product for something else.&lt;/p&gt;

&lt;p&gt;Nonetheless, &lt;a href="https://medium.com/@solidi/apps-doing-sh-t-f5ffa72140db"&gt;many experiences suck&lt;/a&gt;, and there is room to improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prefer Accommodating Over Accurate
&lt;/h2&gt;

&lt;p&gt;If we reverse our thinking, preferring &lt;strong&gt;&lt;em&gt;accommodating over accurate&lt;/em&gt;&lt;/strong&gt;, it will positively change user experiences. For instance, choose to provide upfront rich information, being realistic of an Internet connection, and give the consumer confidence when the transaction has yet to go through but will as soon as possible. Mercilessly scrutinize the error paths, rooting out accuracy, and provide &lt;strong&gt;&lt;em&gt;accommodation&lt;/em&gt;&lt;/strong&gt; instead.&lt;/p&gt;

&lt;p&gt;Yes, &lt;strong&gt;&lt;em&gt;accommodating&lt;/em&gt;&lt;/strong&gt; experiences costs development time and incurs intense technical complexity to achieve. There isn't an easy way around managing statefulness, and technological inventions are waiting to be found to blunt the digital trauma. But it's worth an inquiry within your team, especially if the app is in production and the rush to launch has easied.&lt;/p&gt;

&lt;p&gt;I've seen it many times. When racing to get a product out, &lt;strong&gt;&lt;em&gt;accommodating&lt;/em&gt;&lt;/strong&gt; actions get &lt;a href="https://medium.com/@solidi/my-goal-is-to-ship-c772f63c278d"&gt;cut out of scope&lt;/a&gt; as teams within repeat in chorus, "Nice to have!" Ask the question, "Why so?" If we don't ask, few experiences will become smooth, and cooperation in intra-app experiences will remain unexplored.&lt;/p&gt;

&lt;p&gt;Fluid, &lt;strong&gt;&lt;em&gt;accommodating&lt;/em&gt;&lt;/strong&gt; interactions do not have to be something of science fiction in software. It is worth taking steps to improve the experience starting now.&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>career</category>
      <category>ux</category>
      <category>ui</category>
    </item>
    <item>
      <title>Do Laundry During System Demos</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Sat, 30 Sep 2023 11:38:44 +0000</pubDate>
      <link>https://dev.to/solidi/do-laundry-during-system-demos-2ndk</link>
      <guid>https://dev.to/solidi/do-laundry-during-system-demos-2ndk</guid>
      <description>&lt;p&gt;When I'm jammed on a technical problem, time evaporates. I'll bargain with myself on when to separate. After a lengthy back-and-forth in self-negotiation on "one more thing!" I'll &lt;a href="https://medium.com/@solidi/do-great-at-working-remotely-adbfe4b7452b"&gt;go for a walk&lt;/a&gt;. Recovering from mental despair, walking helps my mind collect unexplored methods to attack the frustrating problem. I'll organize my bubbling ideas to rebuild hope that this intractable problem is solvable.&lt;/p&gt;

&lt;p&gt;Moderate physical activity helps my mind focus, and studies have &lt;a href="https://studyfinds.org/shower-thoughts-great-ideas/"&gt;confirmed my experiences&lt;/a&gt;. At least for me, doing something physical unlocks new ways of thinking. Another great example is showering. My likelihood of achieving the desired outcome increases proportionally to my number of showers. Showering is a time to navigate said problem. I just have to watch for the incoming Slack message my manager desperately awaits an answer.&lt;/p&gt;

&lt;p&gt;There is my ritual of making tea or coffee as a build proceeds. Better yet, speaking to myself out loud to a rubber duck to navigate logic. Sometimes, &lt;a href="https://dev.to/solidi/technically-considered-writing-3nng"&gt;writing&lt;/a&gt;, typing, or talking to another human will help separate me from the frustrating problem. Yeah, there are many ways to unstick what is stuck. For me, it requires separation to refocus my approach. More importantly, I have to do something physical.&lt;/p&gt;

&lt;p&gt;But what is my most productive activity? I look no further than doing laundry. Performing the folding, sorting, and stacking is a great way to organize my plan of attack on a frustrating situation. In my experience, it has dispatched all my technical and personal problems.&lt;/p&gt;

&lt;p&gt;Funny as it sounds, there is no other place like speaking to my pile of warm linens as our &lt;a href="https://dev.to/solidi/how-to-crush-your-next-team-demo-2bb5"&gt;system demo&lt;/a&gt; proceeds on Webex. The best ideas had come from here.&lt;/p&gt;

</description>
      <category>career</category>
      <category>watercooler</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>The Springboard Pattern</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Mon, 31 Jul 2023 12:35:53 +0000</pubDate>
      <link>https://dev.to/solidi/the-springboard-pattern-3o04</link>
      <guid>https://dev.to/solidi/the-springboard-pattern-3o04</guid>
      <description>&lt;h2&gt;
  
  
  How to build new features in isolation
&lt;/h2&gt;

&lt;p&gt;A few years ago, at an agile demo, a stakeholder made a special appearance. The team was closing in on a minimum viable product. The demonstration focused on sound effects and animations. The group revealed a configurable animation board to demo the results quickly. The experiences were easy to launch consecutively, isolated, and variably configured. The animation board did not depend on the more extensive system, but the intention was to tie each animation later.&lt;/p&gt;

&lt;p&gt;While the team demoed, the stakeholder asked if we evaluate the animation board for further experimentation. With this feedback, the group noted the &lt;strong&gt;&lt;em&gt;unrealized&lt;/em&gt;&lt;/strong&gt; value and quickly wrote down what to explore next. Of course, this wasn’t the first time the team used the technique. We made similar discoveries in &lt;a href="https://dev.to/solidi/how-to-crush-your-next-team-demo-2bb5"&gt;future demos&lt;/a&gt;. The team was aware the feature containment were incredibly powerful both for their demos and for product value.&lt;/p&gt;

&lt;p&gt;For us as engineers, naming things is hard. Harder still is how to communicate something. To the above story, there exists no vocabulary to describe the effort of execution. There is no description for the iterative containment orchestration in &lt;strong&gt;&lt;em&gt;software engineering&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So this is what I propose, a definition to describe the unique execution with its benefits and drawbacks. Developing and demoing in containment is an example of what I call the &lt;strong&gt;springboard pattern&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Let's describe what the pattern is.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is The Springboard Pattern?
&lt;/h2&gt;

&lt;p&gt;The springboard pattern is known as a &lt;strong&gt;&lt;em&gt;visual design&lt;/em&gt;&lt;/strong&gt; pattern. Mobile operating systems that constrain viewing areas have used the pattern widely. The app launcher is an example.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hi-u3Mla--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6hnjgj0z8ngbnjda00al.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hi-u3Mla--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6hnjgj0z8ngbnjda00al.png" alt="Above are examples of the springboard visual design pattern within app launchers." width="646" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our introductory story and its animation board also fit this model. We can think of the animation board as the contained screen launcher and each animation as an organized app with its configurations.&lt;/p&gt;

&lt;p&gt;When applied to software development, the springboard pattern acts as a guardrail to develop features in isolated pieces that are easily &lt;strong&gt;&lt;em&gt;demonstrable&lt;/em&gt;&lt;/strong&gt; on the platform. There are many benefits to engineering and product. The design is a way to execute both iteratively and incrementally operationally.&lt;/p&gt;

&lt;p&gt;The springboard pattern is a way to keep dependencies in check and develop features on a cycle centered around &lt;strong&gt;&lt;em&gt;product demonstrations&lt;/em&gt;&lt;/strong&gt;. Here are the rules an engineer must follow while iterating.&lt;/p&gt;

&lt;p&gt;The feature:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It launches from a board that includes other features.&lt;/li&gt;
&lt;li&gt;Can launch quickly with minimum setup.&lt;/li&gt;
&lt;li&gt;It can launch on its own and in any order.&lt;/li&gt;
&lt;li&gt;The configuration is possible to launch in any state.&lt;/li&gt;
&lt;li&gt;The feature resists larger system coupling and dependencies.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If we follow these rules during feature development, magic happens. Benefits include the promotion of modularity, testability, and build-time. Additional improvements include &lt;a href="https://dev.to/solidi/what-is-a-product-manager-anyway-3pc4"&gt;product ideation&lt;/a&gt; that is unrealized, engineer efficiency, and advantages of the framework. Let’s discuss these next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promotes Modularity
&lt;/h2&gt;

&lt;p&gt;The springboard pattern insists on developing features in isolation from one another. In each design segment, the team must do their best to create a solution in &lt;strong&gt;&lt;em&gt;containment&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Dependencies will always be present, but the layers separate the feature for demonstration cleanly. The feature should be modularized and independent. As the iterations continue and demos succeed, the springboard items integrate into the extensive system. As this occurs, the team should continue to resist coupling and ensure the feature code cohesion is high. From start to finish, each item should have a weak measure of &lt;strong&gt;&lt;em&gt;connascence&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k5mDl7rM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9zx5cocdg6sa6anwo7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k5mDl7rM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w9zx5cocdg6sa6anwo7f.png" alt="The springboard design pattern." width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At any time during the cycle, pattern violation can diminish the return of the modularization. Therefore, the team must make &lt;strong&gt;&lt;em&gt;prudent and deliberate&lt;/em&gt;&lt;/strong&gt; decisions by leaning on tools of layering, wrapping, and flow of control using dependency inversion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supports Testability And Build Time
&lt;/h2&gt;

&lt;p&gt;The development of a demonstrable item from the springboard demands testability. The unit tests will also serve as documentation of the module.&lt;/p&gt;

&lt;p&gt;The concept of the springboard pattern is one that promotes testability. Its dependencies should be highly configurable. The feature should have available configurations available for its &lt;strong&gt;&lt;em&gt;dependency injections&lt;/em&gt;&lt;/strong&gt;. Thus this supports ease of testing and mocking of all situations of the component.&lt;/p&gt;

&lt;p&gt;Build time also is maintained, and the complexity of the codebase is normalized with each feature. Incoming features can be &lt;strong&gt;&lt;em&gt;flagged&lt;/em&gt;&lt;/strong&gt; to be unbuilt by the toolset. Features that are rejected from demos are continuously removed.&lt;/p&gt;

&lt;p&gt;Finally, a natural phenomenon of the springboard pattern can reveal &lt;strong&gt;&lt;em&gt;diagnostic test tooling&lt;/em&gt;&lt;/strong&gt; of that unique feature. The feature had started life without the extensive system. The springboard can make tools that test part of the feature in contra to the more comprehensive system as they are their subsystems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Product Ideation And Engineer Efficiency
&lt;/h2&gt;

&lt;p&gt;Opportunities happen when products are deconstructed into independent pieces. In the case of the introduction example, there appeared to be an unrealized product value in the use of an animation board.&lt;/p&gt;

&lt;p&gt;Stakeholders refer to the features of their products as cohesive constructs and use vocabulary to describe them. Wouldn’t it be powerful to find the part without friction immediately? The springboard gives us a &lt;strong&gt;&lt;em&gt;learning library&lt;/em&gt;&lt;/strong&gt; and allows for &lt;strong&gt;&lt;em&gt;cross-pollination&lt;/em&gt;&lt;/strong&gt; between engineers and gives us a tool to locate each feature quickly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YQN6TGly--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u70duaof3bwukumd24no.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YQN6TGly--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u70duaof3bwukumd24no.png" alt="Above is a screenshot of a springboard example with the use of the domain language." width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As an additional benefit, the engineer’s work is &lt;strong&gt;&lt;em&gt;always available&lt;/em&gt;&lt;/strong&gt; for demonstration at a moment’s notice. An isolated solution offsets the typical cost of the time to prepare for the demo (you are giving time for the engineers to prep, yes?).&lt;/p&gt;

&lt;p&gt;Mileage may vary depending on the domain and the reception from stakeholders. In the most pragmatic terms, products must predict less and experiment more. Having the features deconstructed and isolated may indicate a different outcome or a reconfiguration of that product value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Framework Support
&lt;/h2&gt;

&lt;p&gt;With the springboard pattern, there could be undiscovered &lt;strong&gt;&lt;em&gt;efficiency&lt;/em&gt;&lt;/strong&gt; benefits that coincide with features of the framework. The framework the team works with may vary. For this post, I’ll discuss Android concerning the use of a springboard.&lt;/p&gt;

&lt;p&gt;Recently in the Android ecosystem, Google has launched &lt;a href="https://developer.android.com/topic/instant-apps/index.html"&gt;Instant Apps&lt;/a&gt; and discussed at length the incorporation and break out of new concepts in the area called &lt;strong&gt;&lt;em&gt;feature modules&lt;/em&gt;&lt;/strong&gt;. As we can see from above, everything that is demonstrable to stakeholders should be modular and isolated. As development continues, insulate each feature from significant dependencies and optimize them for every feature. The product team may want to launch these features separately or together.&lt;/p&gt;

&lt;p&gt;Another example of Android is the concept of isolated &lt;strong&gt;&lt;em&gt;activities&lt;/em&gt;&lt;/strong&gt;. Each activity should be able to launch in isolation, taking what it needs to survive an experience. If features are built-in isolated activities, reconfiguration of the pieces of an application is possible.&lt;/p&gt;

&lt;p&gt;Finally, with the latest versions of Android, its tooling have significantly improved. Independent modules allow for building abilities, which significantly reduce build time. Setups that use a &lt;strong&gt;&lt;em&gt;flavored&lt;/em&gt;&lt;/strong&gt; code organization may cause building delays, especially if the product dimensions are extensive.&lt;/p&gt;

&lt;p&gt;Before we conclude, there are drawbacks to consider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drawbacks
&lt;/h2&gt;

&lt;p&gt;There are possible drawbacks to this mode of execution. The team will have to make decisions that make the most sense to steer clear of over-engineering.&lt;/p&gt;

&lt;p&gt;The springboard approach may:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Violate YAGNI&lt;/strong&gt; — “&lt;a href="https://martinfowler.com/bliki/Yagni.html"&gt;You ain’t gonna need it&lt;/a&gt;.” The team should build what they need, and not a single line more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accelerate decisions&lt;/strong&gt; — deferring architectural choices is an excellent strategy to keep complexity manageable. Operating this way may force challenging code decisions sooner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Increase complexity&lt;/strong&gt; — additional logic to support layering and modularization may increase development time.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;However, keep in mind that the cost paid will most certainly provide a cost-benefit for code that is consistent and adaptable. &lt;strong&gt;&lt;em&gt;Adaptability&lt;/em&gt;&lt;/strong&gt; needs room to breathe. The code and products deserve that breathing room.&lt;/p&gt;

&lt;p&gt;Now let’s wrap this up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spring Into Action
&lt;/h2&gt;

&lt;p&gt;Developing for isolation and modularity is a practice all engineers should strive for. However, there had not been a pragmatic approach to these concepts and a way to describe how to execute on them. It is assumed engineers build this way, but the reality is that they do not.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&lt;em&gt;springboard pattern&lt;/em&gt;&lt;/strong&gt; in software development finally gives us a word to communicate our intention both in software execution. When adhering to this pattern, we manage &lt;strong&gt;&lt;em&gt;complexity&lt;/em&gt;&lt;/strong&gt; and increase &lt;strong&gt;&lt;em&gt;optionality&lt;/em&gt;&lt;/strong&gt;. As described above, the benefits are plenty, but be aware of the cost of drawbacks.&lt;/p&gt;

&lt;p&gt;The springboard pattern takes effort and drive, but the benefits could be incredible to the team and their products. Center the way around the team demos and adhere to it.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Reply All Considered Harmful</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Wed, 31 May 2023 11:55:46 +0000</pubDate>
      <link>https://dev.to/solidi/reply-all-considered-harmful-45aj</link>
      <guid>https://dev.to/solidi/reply-all-considered-harmful-45aj</guid>
      <description>&lt;h2&gt;
  
  
  Learning from sending thousands of emails
&lt;/h2&gt;

&lt;p&gt;Lately, I’m writing fewer emails &lt;a href="https://dev.to/solidi/what-is-an-engineering-manager-anyway-4and"&gt;at work&lt;/a&gt;. To me, email authoring can be torture. It’s the time-sunk cost of carefully crafting the message. And when I do send an email, I avoid &lt;em&gt;Reply All&lt;/em&gt;. If possible, I would like the conversation to be &lt;strong&gt;between just us&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Over the years, my perception of how to use &lt;em&gt;Reply All&lt;/em&gt; has changed. Earlier on, my understanding of its intoxicating power invoked a sense of urgency to all those addressed. But after being scrutinized in these exchanges and me targeting others, it has soured. Mix this in with selectively adding in authoritative figures; I now &lt;strong&gt;&lt;em&gt;consider it harmful&lt;/em&gt;&lt;/strong&gt; for the outcome of the ask and the long-term relationship for those involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  You and I But Rarely Anyone Else
&lt;/h2&gt;

&lt;p&gt;While participating in &lt;em&gt;Reply All&lt;/em&gt; threads over the years, I’ve learned the concept of a &lt;em&gt;directly responsible individual&lt;/em&gt; who is accountable and owns a possible outcome. And when replying all, this can muddle who is &lt;a href="https://twitter.com/LazMattarus/status/856501596099940352"&gt;directly responsible&lt;/a&gt; for the ask. And suppose the message is poignantly addressed to a particular person. In some business cultures, the receiver may find it combative, comical, or downright ignore the ask while having an &lt;em&gt;unfamiliar&lt;/em&gt; audience watching them. The perception of resistance is real when trust does not exist between them.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Reply All&lt;/em&gt; has the potential to &lt;strong&gt;&lt;em&gt;scorch-the-earth&lt;/em&gt;&lt;/strong&gt;. For select email clients, it is a dangerous default function. I’ve seen it become the &lt;em&gt;nuclear button&lt;/em&gt; when context-sensitive information was released to an unattended audience. While I won’t reveal the example to protect the innocent, exposure to sensitive information clearly destroyed trust through teams and leaders. The result: potential sales loss, team members distrust, and leadership perceived as evil. It had been inadvertently misused in a downright embarrassing way. Yikes.&lt;/p&gt;

&lt;p&gt;But it’s not all bad. There are good points to &lt;em&gt;Reply All&lt;/em&gt; that are helpful and effective. An essential function of &lt;em&gt;Reply All&lt;/em&gt; is to broadcast information, not directed to the individual but the group interested in the information. Where there is a call to action, this is acceptable if all recipients are a trusting team.&lt;/p&gt;

&lt;p&gt;And job roles that require the use of the tool extensively, connecting disparate groups or gathering more &lt;em&gt;perfect&lt;/em&gt; information that is useful for business outcomes. But in my opinion, these moments in time are rare. They are better served elsewhere, such as in physical proximity, a direct instant message, and thoughtfully crafting a &lt;em&gt;smaller&lt;/em&gt; target audience for a higher percentage of success.&lt;/p&gt;

&lt;h2&gt;
  
  
  When I use Reply All
&lt;/h2&gt;

&lt;p&gt;I’ve summarized when I typically use &lt;em&gt;Reply All&lt;/em&gt;. While &lt;strong&gt;it is a tool I avoid&lt;/strong&gt;, there is utility.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When the information is vital to a broad audience without commitment to a call to action.&lt;/li&gt;
&lt;li&gt;When a call to action is essential to a trusting group of individuals.&lt;/li&gt;
&lt;li&gt;When urgency is needed to a critical item that requires escalation in good faith.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When I Avoid Use of Reply All
&lt;/h2&gt;

&lt;p&gt;More importantly, here are my reasons why I do not use &lt;em&gt;Reply All&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoid detailed information being released to an unintended audience.&lt;/li&gt;
&lt;li&gt;When the information is essential, a call to action is required, but the directed individual is not trusted.&lt;/li&gt;
&lt;li&gt;When urgency is needed in an unjustified or repetitive matter.&lt;/li&gt;
&lt;li&gt;Removing someone's voice by &lt;em&gt;prematurely&lt;/em&gt; adding high-level authority to a fresh unresolved matter.&lt;/li&gt;
&lt;li&gt;Replying to a long threaded email to obtain visibility without adding value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve sent many emails in my career, and now &lt;em&gt;Reply All&lt;/em&gt; is one of those tools reserved for exceptional cases. I &lt;strong&gt;prefer to defuse&lt;/strong&gt;, whereas I understand &lt;em&gt;the individual&lt;/em&gt; who can help myself, my team, and the project and product. I continue that conversation &lt;em&gt;privately&lt;/em&gt;. &lt;a href="https://en.wikipedia.org/wiki/Getting_to_Yes"&gt;Once we have closure&lt;/a&gt;, it’s fused back into the &lt;em&gt;Reply All&lt;/em&gt; as broadcasted information.&lt;/p&gt;

&lt;p&gt;While this may seem like common sense, this was a long journey for me to understand. I’ve reflected on my abrasive &lt;em&gt;Reply All&lt;/em&gt; exchanges. Whether it’s a company of hundreds of thousands of people or just a startup between two, &lt;em&gt;it’s always a conversation with another person&lt;/em&gt;. To me, it’s better to discuss with the individual to build a relationship and obtain results with time privately. And then give them chances to do their craft before the proverbial balloon is popped. The people I work with have come to respect this approach.&lt;/p&gt;

&lt;p&gt;And for those in the past who have suffered from my nefarious &lt;em&gt;Reply All&lt;/em&gt; dealings, I’ve learned to do better.&lt;/p&gt;

</description>
      <category>career</category>
      <category>beginners</category>
      <category>watercooler</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Software Development Is Unlike Construction</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Tue, 16 May 2023 10:34:09 +0000</pubDate>
      <link>https://dev.to/solidi/software-development-is-unlike-construction-1mb6</link>
      <guid>https://dev.to/solidi/software-development-is-unlike-construction-1mb6</guid>
      <description>&lt;h2&gt;
  
  
  A Short on the Reasons Why
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;TL;DR:&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;Construction is a poor metaphor for software development due to its non-linear nature, difficulty maintaining insight, disagreement in measuring, and its conveyor belt of opinionated approaches. There may be better analogs.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Our family recently completed a straightforward home construction project. We took down walls and extended our kitchen into an open floor concept.&lt;/p&gt;

&lt;p&gt;The project process and progress was clear. We initially worked with an architect by drawing up plans. We then worked with a government agency to critique and approve those plans. Finally, we worked with the implementers in three phases-first, demolition and preparation. Second, structural, plumbing, and electrical. Finally, exterior cover and finish. At each point in time, the agency would review and approve the work.&lt;/p&gt;

&lt;p&gt;The project made me reflect on my profession. &lt;strong&gt;While building construction metaphors are often used to describe the software development process, this is not how it works.&lt;/strong&gt; Here are the reasons why.&lt;/p&gt;

&lt;h2&gt;
  
  
  Non-Linear and Mutable in Nature
&lt;/h2&gt;

&lt;p&gt;Construction can be highly linear. It follows a well-defined sequence. There are points in time where diversions are required. Sometimes plan alterations are made when plumbing specifics need adjustment. &lt;em&gt;Structural maladies&lt;/em&gt; are discovered. Or when &lt;em&gt;safety realities&lt;/em&gt; must be mitigated when dangerous electrical splice boxes are found. With software development, there is no &lt;a href="https://medium.com/@solidi/the-springboard-pattern-340e00379404"&gt;defined sequence&lt;/a&gt; and no &lt;a href="https://www.cgl.ucsf.edu/Outreach/pc204/NoSilverBullet.html"&gt;silver bullet&lt;/a&gt;. We tend to run in different directions. We shore this up with the typical "sprint zero" and include numerous inspection points. We shorten the loop of the process and respond to items in that loop.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Software development is a creative endeavor that is non-linear. It is fostered by discovery with no clear middle, beginning or end. Re-work is continuous.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Insights Are Opaque
&lt;/h2&gt;

&lt;p&gt;Construction progress is straightforward and visible throughout. Software development is abstract and invisible. We use &lt;a href="https://dev.to/solidi/how-to-crush-your-next-team-demo-2bb5"&gt;demos&lt;/a&gt;, tools, and dashboards to make visibility available to our stakeholders and teams. At best, it is opaque and requires extraordinary effort to &lt;a href="https://growsmethod.com/practices/TracerBullets.html"&gt;maintain visibility&lt;/a&gt;. The tools lack cross-cutting dissection, rely on imperfect &lt;a href="https://medium.com/@solidi/in-software-philosophy-is-delegation-c786dd3a16cf"&gt;telemetry&lt;/a&gt;, and inference in our tooling is nascent. This leads to difficulty in making appropriate decisions at proper times, leading to waste, poor software cohesion, and delayed delivery.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Our mental model of software projects have misconceptions. The reality is that the model is varied from contributor to contributor more than we think.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Disagree on Common Measures
&lt;/h2&gt;

&lt;p&gt;Construction requires building in a way that is acceptably safe and predictable. There would be no way a two-story home could stand if its main structural beam were removed. However, we would be surprised at how software development projects across the finish line with malformed structures. Software development processes, &lt;a href="https://medium.com/@solidi/8-observations-on-test-driven-development-a9b5144f868"&gt;development practices&lt;/a&gt;, and principles attempt common ground between &lt;a href="https://dev.to/solidi/what-is-a-software-engineer-anyway-3fb2"&gt;engineers&lt;/a&gt;, but there is little agreement. A continuous debate has created a void of common measures, therefore, to less predictability and safety.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;It is as if on the proverbial blueprints no one can agree to a consistent scale measure.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Individual Personalities Prevail
&lt;/h2&gt;

&lt;p&gt;Construction is physical in nature, with clear constraints. Many past learnings have reinforced agreed approaches. But software development is not a mature industry, and therefore we do not follow a clear approach due to disagreement in measures. There is a high-level diversity in thought and approach based on assumptions. We are all exploring and learning together. There are spheres of influence that represent numerous philosophies. &lt;em&gt;Opinionated&lt;/em&gt; &lt;a href="https://medium.com/@solidi/the-decision-hypothesis-aa512e0113"&gt;decisions&lt;/a&gt; are made externally and brought in internally. At best, we have &lt;em&gt;team-scrutineering&lt;/em&gt; based on perceived external community validation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Unlike construction, software development has many voices pushing and pulling the community in different approaches. The question is, who are we listening to and why?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Our home construction project ended on time and within budget. However, this cannot be said for a majority of software projects I worked on. What is clear are the above items. &lt;a href="https://medium.com/@solidi/the-zen-of-motorcycling-and-programming-620907dbab2c"&gt;Invisible details&lt;/a&gt;, glued together non-linearly by smart, opinionated individuals.&lt;/p&gt;

&lt;p&gt;If construction is such a poor analogy to software development, other human endeavors may be more closely relatable. &lt;strong&gt;Scribing, music composition, gardening, and &lt;a href="https://www.youtube.com/watch?v=JJ7UgLpgkzc"&gt;philosophical activity&lt;/a&gt; may have better analogs.&lt;/strong&gt; The reasons why require study, and I will leave this up to the reader.&lt;/p&gt;

&lt;p&gt;What are other differences between construction and software development not outlined here?&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>career</category>
      <category>devjournal</category>
      <category>programming</category>
    </item>
    <item>
      <title>Meta Skills of a Software Engineer</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Thu, 27 Apr 2023 10:51:10 +0000</pubDate>
      <link>https://dev.to/solidi/meta-skills-of-a-software-engineer-1fa6</link>
      <guid>https://dev.to/solidi/meta-skills-of-a-software-engineer-1fa6</guid>
      <description>&lt;h2&gt;
  
  
  Learning Through Books on Correctness and Pattern Recognition
&lt;/h2&gt;

&lt;p&gt;Recently, a friend asked a question about the particular skills possessed by software engineers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;What are the unique skills that software engineers practice?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Drawing from my experience led me to an opinion. I enjoy the meta of programming. The skill of learning the &lt;em&gt;meta&lt;/em&gt;, or how to do what we do better, includes reading many well-known books in context. I took specific examples of what I read over the years, applied it to my observations practicing in the field, and I answered in a way that I believed was most pragmatic.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Me: In my opinion, if we think universally, I would say it is the practice of correctness and pattern recognition. These are some of the skills that are unique to software engineers.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's exam these skills to add context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Correctness
&lt;/h2&gt;

&lt;p&gt;Correctness is very much related to &lt;strong&gt;how&lt;/strong&gt; and &lt;strong&gt;why&lt;/strong&gt; we &lt;a href="https://medium.com/hackernoon/software-is-unlike-construction-c0284ee4b723"&gt;build things&lt;/a&gt; the way we do. In organizations, it is most closely associated with the accuracy of what the business must solve for its customers. Well written software follows this thinking.&lt;/p&gt;

&lt;p&gt;Correctness is &lt;em&gt;how correct the "how" is&lt;/em&gt; so that the solution for business can continue with high reliability. It is a balance of strategy (designing) and tactics (execution). The examination of the &lt;em&gt;how's how&lt;/em&gt; in a vacuum appears well in chapter four of &lt;a href="https://www.pearson.com/us/higher-education/program/Bentley-Programming-Pearls-2nd-Edition/PGM203056.html"&gt;Programming Pearls&lt;/a&gt; - &lt;em&gt;Writing Correct Programs&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;...keeping code simple is usually the key to correctness.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- Jon Bentley&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Pattern Recognition
&lt;/h2&gt;

&lt;p&gt;Pattern recognition strongly ties to the &lt;strong&gt;organization&lt;/strong&gt; of that &lt;strong&gt;correctness&lt;/strong&gt; by creating the necessary abstractions and component boundaries. Pattern recognition leads to concepts of reuse to modularize and isolate code. We monitor duplication, find areas that can be reused, and refactor complicated parts of the system. It is what &lt;a href="https://dev.to/solidi/what-is-a-software-engineer-anyway-3fb2"&gt;software engineers&lt;/a&gt; do well. Our attention to that detail is vigilant. We recognize knowledge as it is created over and over again. Then we simplify.&lt;/p&gt;

&lt;p&gt;Pattern recognition is discussed at length in the community, and there are many sources to read up on their techniques. The origins where I learned about this skill reside in chapter two of &lt;a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/"&gt;The Pragmatic Programmer&lt;/a&gt; - &lt;em&gt;The Evils Of Duplication&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Make it easy to reuse. DRY - Don't Repeat Yourself.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- Andrew Hunt &amp;amp; Dave Thomas&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  A Teachable Moment
&lt;/h2&gt;

&lt;p&gt;Once I gave this response, my friend followed up with another question.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;If correctness and pattern recognition are these skills, how do you teach them?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course, my answer was simple enough.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Me: Locate these books, set the environment, and work through by showing examples. Set the expectation of learning and practicing these meta skills while delivering value to business. Why? Complexity. This is the best investment of learning the skill of balancing complexity that I know of. It also results in engineers who become more confident over time.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My mentoring focuses on these books and these particular skills. But it made me realize there are few out there that invest heavily in the meta, apart from doing the work without realizing it. The vocabulary of the meta is something I have an interest in. My writings on &lt;a href="https://medium.com/hackernoon/no-description-provided-8d9e0f3a3abb"&gt;problem decomposition&lt;/a&gt; (correctness) and &lt;a href="https://medium.com/hackernoon/the-decision-hypothesis-aa512e0113"&gt;organization&lt;/a&gt; (pattern recognition) in the real world were difficult to see when in the heat of delivery.&lt;/p&gt;

&lt;p&gt;At about the same time writing this brief on these skills, I received a book recommendation. A professor at Stanford has been teaching a course on the meta. His study resulted in an edition of his course findings. I was shocked when I found out that he has the same gripe as me. I purchased the book and devoured it from chapter thirteen, &lt;a href="https://twitter.com/JohnOusterhout/status/989260683836506112"&gt;A Philosophy Of System Design&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Engineers tend to be very detailed oriented. We love details and are good at managing lots of them; this is essential for being a good engineer. But, great software designers can also step back from the details and think about a system at a higher level.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;- John Ousterhout&lt;/em&gt;**&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In my opinion, correctness and pattern recognition are skills*** that software engineers should strive to understand and do well at. The result is &lt;em&gt;higher quality software&lt;/em&gt;. All other unique skills, if there are others to categorize, may very well be based on these. I invite others to share examples of meta-skills they have practiced over time.&lt;/p&gt;

&lt;p&gt;Fundamentally, correctness and pattern recognition have tie-ins to outcomes of complexity (also known as cognitive load). There needs to be a way to balance both intelligently so that we mitigate complexity. In essence, this is why these skills are, in my opinion, the distillation of what we do.&lt;/p&gt;




&lt;p&gt;* &lt;em&gt;What is interesting about correctness and pattern recognition is they also have a strong association with practices around machine learning.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;** &lt;em&gt;If you want to know more about what John is doing, take a look at &lt;a href="https://www.youtube.com/watch?v=ajFq31OV9Bk"&gt;his video&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;*** &lt;em&gt;Engineers should also practice high levels of learning and communication. These concepts aren't unique to software but have strong associations with the sciences.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>devjournal</category>
      <category>productivity</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Technically Considered Writing</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Thu, 30 Mar 2023 16:04:36 +0000</pubDate>
      <link>https://dev.to/solidi/technically-considered-writing-3nng</link>
      <guid>https://dev.to/solidi/technically-considered-writing-3nng</guid>
      <description>&lt;p&gt;&lt;a href="https://www.julian.com/guide/write/intro"&gt;Write&lt;/a&gt; to document what you're doing now, finding relief from its gripping subject. Set a publishing date as motivation. And where there isn't inspiration, tinker with the process of &lt;a href="http://paulgraham.com/useful.html"&gt;writing&lt;/a&gt;. Undoubtedly the muse will return in what you'll do later.&lt;/p&gt;

&lt;p&gt;What you'll &lt;a href="https://blog.stephsmith.io/learning-to-write-with-confidence/"&gt;write&lt;/a&gt; will become fuzzy. Re-read your past &lt;a href="https://adamfaliq.wordpress.com/2020/10/28/write-well/"&gt;writing&lt;/a&gt; to remember where you were and laugh with the people you shared it with. &lt;a href="https://www.preetamnath.com/blog/why-you-should-write"&gt;Writing&lt;/a&gt; transmits a once-lived perspective and style.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fs.blog/why-write/"&gt;Writing&lt;/a&gt; on a matter is a loop that spirals in your mind. But not after publishing it. When moving to the next, which will inevitably occur, the previous &lt;a href="https://robert.bearblog.dev/just-write/"&gt;writing&lt;/a&gt; is a compressed artifact for a future reader of your earlier thinking.&lt;/p&gt;

&lt;p&gt;Were you clear? Did you &lt;a href="https://poets.org/poem/so-you-want-be-writer"&gt;write&lt;/a&gt;?&lt;/p&gt;




&lt;p&gt;Dev reader, you came for &lt;a href="https://www.developing.dev/p/why-engineers-need-to-write"&gt;write&lt;/a&gt; engineering: Here's how:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iqD09CDh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hw1ynk2vxv4t6av58x5v.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iqD09CDh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hw1ynk2vxv4t6av58x5v.gif" alt="Writing as a System" width="880" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@solidi/the-one-about-blogging-cd9e65a2055b"&gt;Higher-res version here&lt;/a&gt;. Subscribe below!&lt;/p&gt;

</description>
      <category>writing</category>
      <category>watercooler</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Video Gaming Concepts For the Uninitiated</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Tue, 28 Feb 2023 11:59:38 +0000</pubDate>
      <link>https://dev.to/solidi/video-gaming-concepts-for-the-uninitiated-4k8m</link>
      <guid>https://dev.to/solidi/video-gaming-concepts-for-the-uninitiated-4k8m</guid>
      <description>&lt;p&gt;Watching my children play provides exciting observations. Their behaviors are organized into distinct concepts. I'll tinker, associating their manners with unrelated ideas. Then, it came to me. I crave comparable actions while playing &lt;em&gt;video games&lt;/em&gt;. In this write, my goal is to label them.&lt;/p&gt;

&lt;p&gt;As an &lt;a href="https://medium.com/super-jump/building-a-popular-half-life-mod-during-the-rise-of-counter-strike-fec6a5b9fd8f?sk=6d1427b3f1d832df06bd5b07aaa456bb"&gt;uninitiated developer&lt;/a&gt; who could not hold a candle to gaming theorists, I believe the following behaviors make gameplay fun. At the same time, the results trigger my children's laughter at loftier decibels while at play. My fascination is this question: &lt;em&gt;Do these behaviors transcend to video game mechanics, delivering higher fidelity?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The List of Uninitiated Attributes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Physical possession of objects&lt;/strong&gt; - holding on to things is an essential ability. While video games have inventories of collecting possessions, few have allowed players to hold onto the objects in space. Grabbing onto two items is better. How about even more?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Picking up objects and throwing them&lt;/strong&gt; - while holding things is excellent; picking them up and manipulating them in space is perfect. Why not throw them at something? Better strength means adequate velocity. Start laughing because there is plenty to throw.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Damage and destruction of objects&lt;/strong&gt; - objects are damaged if enough force is applied. Things can be destroyed too. Of course, laughter increases with the amount of destruction, to a point before it becomes out of hand. Specific items can be destroyed in video games, with lots to explore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hiding without others knowing&lt;/strong&gt; - also known as &lt;em&gt;stealth&lt;/em&gt;, this concept has the stimulating effect of protection. Cloaking oneself leads to laughter. Being hidden provides a feeling of opportunity. Games have analyzed this concept over the years, but there is much to explore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The permanence of objects&lt;/strong&gt; - objects which remain strewn across an area is an expression of disorder, especially if these objects are revisited later. Going back to what was placed earlier is of interest. Things are rarely accumulated in video games, as resources are reclaimed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repeat and retry&lt;/strong&gt; - nothing gets the kids going, like reprising one of the items above, doing it repeatedly. The same goes for these concepts in video games. A solid rewind/repeat mechanism is yet to be developed, but ideas have been tried.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full brights and environment&lt;/strong&gt; - nothing gets the kids laughing if there is play at night, in the snow, or an environmental change. Environmental space is the same as in video games. There are copious amounts of effects. Recently, glowing objects, or full brights, are often used for improved visual style.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fluidity of movement&lt;/strong&gt; - my kids climb to inaccessible areas. They jump around and laugh when their perspectives are altered, looking upside down! The same goes for video games; lately, games have opened up into fantastic "acrobatics," "parkour," vertical play, moving fast, and &lt;a href="https://medium.com/@solidi/read-these-5-passionate-software-engineering-books-this-holiday-6c6ad8fbd211"&gt;flying upside down&lt;/a&gt;. There are mechanics left undiscovered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chaos in quantity&lt;/strong&gt; - increasing the number of objects makes kids go nuts. Think of a ball pit where there are thousands of similar items. So in video games, in a gray box or sandbox, with lots of abilities to spawn them. Chaos mode, where objects are at insane levels, makes for an exciting, time-consuming experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pretend building&lt;/strong&gt; - nothing gets my kids minds flowing with ideas when they pretend to build. Either sandcastles or pillow forts, it's a lot of laughter with creative imagination in mechanics like &lt;em&gt;substitution&lt;/em&gt; and world-building in the small. The same sentiment stirs within video games. Making things virtual is a captivating topic worth investigating its value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mutator configurations&lt;/strong&gt; - kids have a way of inventing the play in which they engage. They make things up, configure their toys in a particular way, or change the environment with unique abilities such as copious amounts of pretend lava. So too, are nice to have with video games. Changing up its composition is a must-have. Unfortunately, games limit their options.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Playing with others with invented rules&lt;/strong&gt; - is an unmistakable quality explored intensely in video game communities, so playing with others increases the fun factor. &lt;a href="https://dev.to/solidi/five-more-minutes-5b7d"&gt;By keeping score&lt;/a&gt;, kids form play rules in which inspirit the experience and bring out their disagreements!&lt;/p&gt;

&lt;h2&gt;
  
  
  Is it Fun?
&lt;/h2&gt;

&lt;p&gt;From here on out, adults invent intricate rule sets, ending my list. Those were my observations about video games, my kids, and what I crave while playing. But how do you quantify fun? Having these qualities alone does not equate to joy. A combination of them will provide incentives.&lt;/p&gt;

&lt;p&gt;I'm sure I missed other attributes which are a part of gaming elements. Of course, numerous mechanics are well-known within the community. My goal here was to list out these observations. How they connect will be a topic I'll explore as I find other patterns.&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>gamedev</category>
      <category>videogames</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Goodbye to Saccharine Feelings of Clean Code</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Tue, 31 Jan 2023 12:10:43 +0000</pubDate>
      <link>https://dev.to/solidi/goodbye-to-saccharine-feelings-of-clean-code-15o4</link>
      <guid>https://dev.to/solidi/goodbye-to-saccharine-feelings-of-clean-code-15o4</guid>
      <description>&lt;p&gt;A surprisingly soured reaction has come over me. Lately, feeling giddy about sweeping up code is absent. As time accelerates &lt;a href="https://twitter.com/paulg/status/1619480259556179968" rel="noopener noreferrer"&gt;hyperlinearly&lt;/a&gt; within my text editor, the bursts of dopamine are no longer an assertion of &lt;em&gt;knowing&lt;/em&gt;. I'm middle-aged without its small pleasures.&lt;/p&gt;

&lt;p&gt;I'm giving up on clean code and consistency, coming full circle in a game of &lt;a href="https://www.dailymail.co.uk/news/article-11687263/Marie-Kondo-says-shes-kind-given-tidying-having-three-kids.html" rel="noopener noreferrer"&gt;sparking joy&lt;/a&gt;. If I feel good about mopping up code, I'll remind myself that it's time extinguished, which steals from what needs doing. Whatever I'm working on will be &lt;a href="https://xkcd.com/2730/" rel="noopener noreferrer"&gt;sullied over or thrown out&lt;/a&gt;, anyway.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Editor's note: Feel free to share this rant in your next code review.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>web3</category>
      <category>blockchain</category>
      <category>offers</category>
    </item>
    <item>
      <title>The Not So Small Things of Developing Software</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Thu, 19 Jan 2023 11:51:14 +0000</pubDate>
      <link>https://dev.to/solidi/the-not-so-small-things-of-developing-software-3emi</link>
      <guid>https://dev.to/solidi/the-not-so-small-things-of-developing-software-3emi</guid>
      <description>&lt;p&gt;Reflecting on my &lt;a href="https://dev.to/solidi/rediscovering-the-plan-file-4k1i"&gt;software experiences&lt;/a&gt;, I've formed a list of deep curiosities. Here is my list of all the &lt;em&gt;not-so-small&lt;/em&gt; things I learned about creating software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Defaults rule the perceived experience&lt;/strong&gt; - what comes shipped in software is what sticks to its adopters. I've learned what is preset in software, such as settings and default preferences, shapes a first impression. That impression predicts an excellent experience from a flawed one. Adopters of my software rarely see past the defaults. Those who do are my power users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rubber ducking clarifies intent&lt;/strong&gt; - when I speak to a rubber duck about issues, it solves my problems. When it doesn't,  I'll take another step, talking to another human about what I am to do. Performing these two actions has a consistent effect. It increases the odds of achieving what I've said, solving the problem in a shorter time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Communicate using video often&lt;/strong&gt; - a problem discussed in a conversation needs context. Today, sharing motion capture has become effortless. Why not &lt;a href="https://www.cockos.com/licecap/" rel="noopener noreferrer"&gt;cut a gif or movie&lt;/a&gt; of the observation sooner? Since I've used gif creation, it has helped me cast a broader net to solve my problems faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The most straightforward answer is the right one&lt;/strong&gt; - debugging is a  process of deep information gathering and logical deduction. If my approach goes "off the ranch," I'll tie back the &lt;a href="https://dev.to/solidi/short-circuiting-fantastical-debugging-ig3"&gt;fantastical thinking&lt;/a&gt; (or blaming the framework) for such woes. Instead, the solution to my problem is a straightforward answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The answer comes the following day&lt;/strong&gt; - while rubbering ducking above is half the strategy to unstick my problem, the other half is to step away and let &lt;a href="https://medium.com/hackernoon/the-manager-stew-dd59cd653728" rel="noopener noreferrer"&gt;my mind stew&lt;/a&gt;. The solution to a problem will come the next day. Whether in the shower, exercising, or chewing breakfast, an explanation from yesterday's woes will bubble up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deprioritizing quality for delivery&lt;/strong&gt; - when revenue is on the line, humans will set an immovable date. Next, consistency and quality will forgo their priority in delivering software. So when delivery is declared, its scope, but precisely, quality, is at stake. Said plainly, not everything &lt;a href="https://medium.com/@solidi/read-these-5-passionate-software-engineering-books-this-holiday-6c6ad8fbd211" rel="noopener noreferrer"&gt;worth doing is worth doing well&lt;/a&gt;, which is a difficult lesson for me as a former perfectionist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instability at the edges&lt;/strong&gt; - when I &lt;a href="https://medium.com/hackernoon/software-is-unlike-construction-c0284ee4b723" rel="noopener noreferrer"&gt;develop software&lt;/a&gt;, the middle parts of the system are stable. Instability lies in the edges, the seams, and the software setup. Therefore, I test software presets to ensure edge cases are tested thoroughly. Assumptions of the state should remain explicitly protected, meaning I clarify the default state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scripting things remain essential for automation&lt;/strong&gt; - writing manual instructions is a step toward automation. I've achieved this by &lt;a href="https://blog.danslimmon.com/2019/07/15/do-nothing-scripting-the-key-to-gradual-automation/" rel="noopener noreferrer"&gt;do-nothing scripting&lt;/a&gt;, a great way to capture actions performed in an environment. Taking the scripts I wrote, I'll hammer them into a future pipeline to build software in continuous integration later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A route to innovation is through tooling&lt;/strong&gt; - creating tools for software engineers is a perfect environment to develop novel solutions to common problems. Tooling demands invention since it's hermetic to a problem that needs solving. Interestingly, since the tool's focus is the immediate resolution of someone's pain, there is a higher chance of discovering an untried solution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Naming and grouping things remain complicated&lt;/strong&gt; - aliasing software components requires a choice of &lt;a href="https://ntietz.com/blog/name-your-projects-cutesy-things/" rel="noopener noreferrer"&gt;cute&lt;/a&gt; versus descriptive. I've participated in teams of senior engineers where services are tagged "&lt;a href="https://dev.to/solidi/the-next-fantastic-software-project-code-name-bbd"&gt;creatively&lt;/a&gt;." While labeling does not have an answer, organizing those names is clear. &lt;a href="https://twitter.com/housecor/status/1603428432091701252" rel="noopener noreferrer"&gt;Grouping by concern&lt;/a&gt;, not by type, is an excellent strategy to keep my sanity in check.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Grains of salt in applying quality acronyms&lt;/strong&gt; - my engagement in pursuing quality software contained acronyms over the years. DRY, YAGNI, AHA, &lt;a href="https://medium.com/free-code-camp/8-observations-on-test-driven-development-a9b5144f868" rel="noopener noreferrer"&gt;TDD&lt;/a&gt;, and &lt;a href="https://simonwillison.net/2021/Jul/1/pagnis/" rel="noopener noreferrer"&gt;PAGNI&lt;/a&gt;, to name a few. While all these are reasonable guidelines, easing their application in construction is a route for sanity. Over-application of such methods leads to developing into a corner. It's a matter of judgment and moderation. If I had to haul them all away, the one I would keep is KISS. Over-complexity destroys clarity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interviewing requires specific practice&lt;/strong&gt; - interviewing is a core part of &lt;a href="https://dev.to/solidi/find-career-freedom-with-a-daily-code-workout-18e9"&gt;maintaining my career&lt;/a&gt;. My interviewing experiences have been challenging. I've succeeded, but in others, I have failed, sometimes humiliated. While every interview I've participated in was fair, some felt like intellectual hazing. I say this because the complex challenges raised in discussions do not appear on the job. So practicing is a skill set in itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distance between teams breeds contest&lt;/strong&gt; - having experience working with collaborative teams over the years, I've witnessed that distance equates to competition. As isolation increases, so does the perception. It takes filling the gaps between people to void the disharmony. But I learned sometimes I could not smooth out the edges, a reality of participating in a group of &lt;a href="https://dev.to/solidi/what-is-a-software-engineer-anyway-3fb2"&gt;software engineers&lt;/a&gt;. I had to let go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote work is a mental game&lt;/strong&gt; - I support remote work and its flexibility for engineers to do &lt;a href="https://medium.com/@solidi/do-great-at-working-remotely-adbfe4b7452b" rel="noopener noreferrer"&gt;their job well&lt;/a&gt;. Just like interviews are a skill set, so is working remotely. Lately, the impact of a world-shifting pandemic has caught up to me. My journey has been &lt;a href="https://medium.com/@solidi/the-world-i-worked-into-no-longer-exists-732659963058" rel="noopener noreferrer"&gt;a long adventure&lt;/a&gt; of becoming productive in the new environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Support systems become collateral to burnout&lt;/strong&gt; - it was uncomfortable when I was engaged in a time-consuming project for months. Wrapping software engineering into a career is a &lt;a href="https://medium.com/@solidi/my-goal-is-to-ship-c772f63c278d" rel="noopener noreferrer"&gt;recipe for experiencing burnout&lt;/a&gt;. I found it crucial to find a support system to lean on. Software engineering requires deep thought. With its intensity, my support system had become collateral. To put the brakes on solving issues, I purposefully said no.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The urge to become an expert gardener&lt;/strong&gt; - while plenty of my contemporaries swear by the craft, few want to quit to become an expert gardener (or farmer) due to exhaustion. At a point in my career, I see a precise repetition of events. Planning, developing, testing, and shipping software. Specifically, dealing with the politics in-between with a growing list of shelved projects. It may be time for me to take up gardening. :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;While this list is a living document, it captures my &lt;em&gt;not-so-small&lt;/em&gt; things about software creation. While developing software, these essential concepts are front of mind while creating solutions. In time, embracing them will lead to further discoveries. I am sure I missed a few other core concepts, which I will add later.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>documentation</category>
      <category>programming</category>
    </item>
    <item>
      <title>Find Career Freedom With A Daily Code Workout</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Mon, 31 Oct 2022 12:12:26 +0000</pubDate>
      <link>https://dev.to/solidi/find-career-freedom-with-a-daily-code-workout-18e9</link>
      <guid>https://dev.to/solidi/find-career-freedom-with-a-daily-code-workout-18e9</guid>
      <description>&lt;p&gt;There are two main modes of physical exercise, &lt;a href="https://en.wikipedia.org/wiki/Aerobic_exercise"&gt;aerobic&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Anaerobic_exercise"&gt;anaerobic&lt;/a&gt;. Aerobics train the body to maintain output throughout distributed muscles. Its goal is to preserve oxygen levels along a strenuous distance. Anaerobic exercises target muscle groups under resistance repetitions until the muscles cannot perform further. The goal is to improve the energy output of the muscle target by tearing and rebuilding. Both modes have benefits associated with peak performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dealing With Software
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dev.to/solidi/what-is-a-software-engineer-anyway-3fb2"&gt;Software engineers&lt;/a&gt; perform their craft in a similar matter. If one squints, the resemblance of aerobic exercise is to solve problems, such as taking on an unformed concern and unraveling it. However,  engineers cannot complete the activity because they need specific "muscles" to command, which lack the strength to achieve the required endurance.&lt;/p&gt;

&lt;p&gt;Engineers perform targeted "anaerobic" workouts to improve problem-solving endurance to achieve better aerobic results. But why perform exercises and spend time doing what seems trivial? The answer is simple, freedom to solve problems. As a benefit, &lt;a href="https://levelup.gitconnected.com/interview-well-for-your-next-incredible-engineering-role-a5513e6596ae?sk=fd06c4775ff3e9d912be078e6854c64f"&gt;career options&lt;/a&gt; will expand when we gracefully perform various computer science skills. We choose where to spend time motivated by solving interesting problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Targets
&lt;/h2&gt;

&lt;p&gt;The core engineering workout is a process of concentration and effort. It requires about one hour of practice daily. If every day is too rigorous, exercise this workout every other day to let the mind rest. Rotate a reduced set throughout the week. Either way, working to solve known problems builds muscles in the brain, particularly the neocortex. Like &lt;a href="http://codekata.com/"&gt;code katas&lt;/a&gt;, these exercises target building muscle memory.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Temporal&lt;/strong&gt; - relating to temporary space. Holding items in mind is a skill that practice improves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spacial&lt;/strong&gt; - relating to visualizing how these exercises interrelate with data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oral&lt;/strong&gt; - &lt;a href="https://en.wikipedia.org/wiki/Rubber_duck_debugging"&gt;rubber ducking&lt;/a&gt; through the problems challenges better communication. Think: how can I teach this to someone?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recollection&lt;/strong&gt; - these workouts target a wide range of muscles, memorizing essential patterns. Repeating them leads to working efficiently within an &lt;a href="http://integrated%20development%20environment/"&gt;integrated development environment&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Abstract&lt;/strong&gt; - Learning something new. Discovering a new workout, we add new computer science fundamentals to expand our knowledge.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Workout
&lt;/h2&gt;

&lt;p&gt;Like a physical exercise regime, these exercises require a warm-up to get the mind thinking clearly in the space. More profound activities ensue. After a certain amount of rotations, results include solving complex problems in less time. Craving to perform will follow, such as desiring spicy food from our &lt;a href="https://www.businessinsider.com/eating-spicy-food-capsaicin-hot-pepper-side-effects-2017-10"&gt;TRPV1 pain receptors&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Warm Up (5 minutes)
&lt;/h3&gt;

&lt;p&gt;Create an array, fill it with random integers, and print it to the screen. Or execute the &lt;a href="https://www.mathsisfun.com/numbers/fibonacci-sequence.html"&gt;Fibonacci sequence&lt;/a&gt; recursive and iteratively.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sorts (10 minutes)
&lt;/h3&gt;

&lt;p&gt;Exercise integer sorting in progressive order of difficulty. &lt;a href="https://en.wikipedia.org/wiki/Bubble_sort"&gt;Bubble&lt;/a&gt;, Selection, Insertion, Shell, &lt;a href="https://en.wikipedia.org/wiki/Merge_sort"&gt;Merge&lt;/a&gt;, Quick, Heap. Finalize with binary search iteratively and recursively. Describe the &lt;a href="https://en.wikipedia.org/wiki/Big_O_notation"&gt;Big O-notation&lt;/a&gt; as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maps / Hashes Or Stacks / Queues (10 Minutes)
&lt;/h3&gt;

&lt;p&gt;Create a naive &lt;a href="https://en.wikipedia.org/wiki/Hash_table"&gt;hash table&lt;/a&gt; and basic hashing to avoid collisions. Or build &lt;a href="https://en.wikipedia.org/wiki/Stack_(abstract_data_type)"&gt;stack&lt;/a&gt;/queues with challenges of finding the minimum on a stack, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trees Or Double Linked List (10 Minutes)
&lt;/h3&gt;

&lt;p&gt;Create a &lt;a href="https://en.wikipedia.org/wiki/Binary_search_tree"&gt;binary search tree&lt;/a&gt; by inserting nodes, printing traversals, and deleting a node. As an alternative, create a &lt;a href="https://en.wikipedia.org/wiki/Doubly_linked_list"&gt;doubly linked list&lt;/a&gt;. Insert, delete, and print in both directions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Graphs (15 Minutes)
&lt;/h3&gt;

&lt;p&gt;Create and traverse graphs using breath-first and depth-first search, or experiment with the &lt;a href="https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm"&gt;Dijkstra&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/A*_search_algorithm"&gt;A* algorithm&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternative (15 Minutes)
&lt;/h3&gt;

&lt;p&gt;Solve a question from the &lt;a href="https://www.crackingthecodinginterview.com/"&gt;cracking the coding interview&lt;/a&gt; problem &lt;a href="https://medium.com/free-code-camp/how-to-organize-your-thoughts-on-the-whiteboard-and-crush-your-technical-interview-b668de4e6941"&gt;openly&lt;/a&gt;. Adding these random questions to the workout will inspire you to think differently and amend the repetitive nature of the previous exercises. If solving canned problems is not attractive, build &lt;a href="https://www.scotthyoung.com/blog/2022/10/26/variable-mastery/"&gt;something variable&lt;/a&gt; that utilizes these skill sets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;A disciplined workout is key to a healthy engineer, whether a &lt;a href="https://dev.to/solidi/what-is-a-tech-lead-anyway-483p"&gt;leader&lt;/a&gt; or an individual contributor. The goal is discipline, first to remedy the repetitions by gradually improving the time to solve. Once achieving results, "aerobic" problem-solving exercises will come naturally because conditioned muscles are present to execute well.&lt;/p&gt;

&lt;p&gt;There is a certain satisfaction to these exercises. Why not strive to be a well-rounded engineer? If one hour seems lengthy, reduce the set, building toward a new goal. Most importantly, push hard at the end of the exercise to finish well. Add a few more counts at its conclusion to improve the results!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>SemVer is Dead. Long Live SemVer!</title>
      <dc:creator>Doug Arcuri</dc:creator>
      <pubDate>Tue, 18 Oct 2022 10:59:10 +0000</pubDate>
      <link>https://dev.to/solidi/semver-is-dead-long-live-semver-4lh4</link>
      <guid>https://dev.to/solidi/semver-is-dead-long-live-semver-4lh4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;This post is my opinion on versioning software. After a questioning dive into acknowledging fantastic alternative schemes, it introduces &lt;a href="https://latestver.org/"&gt;latestVer&lt;/a&gt;, my myopic software versioning technique. Please share with your friends!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Often, a swell versioning scheme appears on a link aggregator. I mutter, "&lt;em&gt;yeah, that's great.&lt;/em&gt;" Then I'll add it to a collection that has become a shrine of excellent thinking. In between, an opinion will come along on approaching versioning. Of the few posts I read, &lt;a href="http://akkartik.name/post/versioning"&gt;the cargo cult of versioning&lt;/a&gt; made me rise off the chair and clap—until the author recanted the phrase I enjoyed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You could even remove the version altogether and use the commit hash on rare occasions when we need a version identifier.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sigh, &lt;em&gt;correctness&lt;/em&gt;, but is there truth behind the author's words?&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Versioned Out There?
&lt;/h2&gt;

&lt;p&gt;Fast-forward years from the write-up, &lt;a href="https://semver.org/"&gt;SemVer 2.0.0&lt;/a&gt; remains the standard. Things stay as they are—a journey to communicate the intention of a change in a tangle of dependencies. If one is a maintainer, one receives pokes about improvements. If a manager, their game is to reduce risks. If a lead on a passion project, eighty-four versions of the software have elapsed on a Saturday, with one hundred seventy-nine regressions, which no one will find. And if an adopter updates a library, it's typically to the latest, knowing the risks even with a suite of ten-thousand tests.&lt;/p&gt;

&lt;p&gt;Since I am a consumer of someone else's work (like everyone else), I'll avoid bumping the library today or bump it slightly through constrained pinning until I must update it to the latest. I don't have much time to decode the version numbers. It's a linear function where risk &lt;em&gt;increases&lt;/em&gt; with time. Each bump means a subjectively &lt;em&gt;more&lt;/em&gt; perfect implementation enveloped with possible dreadful outcomes.&lt;/p&gt;

&lt;p&gt;So with versioning stuff, it depends on the intent of the change. Numbers don't communicate intentions well. Even when Rich Hickey says, "change behavior, rename!" it often fails to decode the message. Regardless, I'll &lt;em&gt;pin&lt;/em&gt; versions in the hope no one will &lt;a href="https://dev.to/solidi/cancel-this-app-update-dammit-5f6j"&gt;force me to update&lt;/a&gt; until I don't have the option. I'll throw my hands up, declaring that nothing is complete in the software, even &lt;a href="https://vivqu.com/blog/2022/09/25/outdated-apps/"&gt;when someone else states it's complete&lt;/a&gt;. If finished, the code expires because labor is consistently involved, costing scarce human, social, or monetary capital to keep it running. We are all at the mercy of becoming outdated.&lt;/p&gt;

&lt;p&gt;But we, as a community, try to do better. I'll continue to search for a modern version scheme that communicates sounder. So this got me contemplating. What is out there, encoded in its thinking? Let me share my incomplete child list of SemVer, the current defacto versioning standard. I will share brief opinions about them. By the way, I love all of these and tip my hat to these thinkers.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Label&lt;/th&gt;
&lt;th&gt;Depiction&lt;/th&gt;
&lt;th&gt;Introduced&lt;/th&gt;
&lt;th&gt;Where to Use&lt;/th&gt;
&lt;th&gt;Reality&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://semver.org/"&gt;SemVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The "Standard"&lt;/td&gt;
&lt;td&gt;2013&lt;/td&gt;
&lt;td&gt;At the Job&lt;/td&gt;
&lt;td&gt;Here to stay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ptaoussanis/encore/blob/master/BREAK-VERSIONING.md"&gt;BreakVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Clear intentions&lt;/td&gt;
&lt;td&gt;2014&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Patches can break things&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://blog.legacyteam.info/2015/12/romver-romantic-versioning/"&gt;RomVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Human in the highest&lt;/td&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;To err is to break some APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://csemver.org/"&gt;CSemVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Limits are good&lt;/td&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;SQL statements in versions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://simver.org/"&gt;SimVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Clear statements&lt;/td&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Even closer to reality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://perlancar.wordpress.com/2016/05/19/using-monotoning-versioning-in-perl/"&gt;MonoVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fewer placeholders&lt;/td&gt;
&lt;td&gt;2016&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;The fewer numbers, the better&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://gitlab.com/staltz/comver"&gt;ComVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Clear statements too&lt;/td&gt;
&lt;td&gt;2016&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Confused with simVer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/ms-studio/CMSver"&gt;CMSVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Specific to content&lt;/td&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Only if dealing with a CMS!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://wendtver.org/"&gt;WendtVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Tens, tens, tens&lt;/td&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Odometer goes on and on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://0ver.org/"&gt;Zer0Ver&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cool, lots of zeros&lt;/td&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Defines the incomplete nature of software&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://mikeralphson.github.io/pedantic-versioning/"&gt;PandenticVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;
&lt;em&gt;Sigh&lt;/em&gt;, no&lt;/td&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Politics, I guess&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://chronver.org/"&gt;ChronVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;A life on a calendar&lt;/td&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;What month is it?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://calver.org/"&gt;CalVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Make me remember the date&lt;/td&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Technology marches on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kkokosa/fibver"&gt;FibVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Matches the agile thinking&lt;/td&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Too many flashbacks to interviews gone sideways&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://sentimentalversioning.org/"&gt;SentimentalVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Become a stoic&lt;/td&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;How I feel about my failed essays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kstenerud/hyver"&gt;HyVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Good&lt;/td&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Closer to reality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://miniscruff.github.io/hashver/"&gt;HashVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Not very clear&lt;/td&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;A good choice for lots of commits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/orlandol/makever"&gt;MakeVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;For the C/C++ crowd&lt;/td&gt;
&lt;td&gt;2021&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Headers for versioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://taylorbrazelton.com/2022/06/06/2022-06-06-bye-bye-semantic-versioning-say-hello-to-gitdate/"&gt;GitDateVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Make me remember the date&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Makes me feel old&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://avatao.com/blog-semancat-versioning/"&gt;SemancatVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Love those cats&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;I'm allergic to cats&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/RocketRace/setver"&gt;SetVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Set patterns&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;Not at the job&lt;/td&gt;
&lt;td&gt;Wildly satisfying&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://latestver.org/"&gt;LatestVer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The reality&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;td&gt;At the job&lt;/td&gt;
&lt;td&gt;Cool, this one is mine&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Introducing LatestVer
&lt;/h2&gt;

&lt;p&gt;For the authors above, while having good intentions, new versioning schemes are at the fringes. I've rarely seen these in the wild, maybe &lt;a href="https://0ver.org/"&gt;zer0Ver&lt;/a&gt; or &lt;a href="http://calver.org/"&gt;calVer&lt;/a&gt;, smiling when I do. Creating a new versioning system requires creative thinking &lt;em&gt;and&lt;/em&gt; invoking a community change which takes exponential marketing. SemVer surrounds my work, and I'll label my libraries the same. But there is something meta that occurs as I interact with the labeling. Something first-ordered.&lt;/p&gt;

&lt;p&gt;As an adopter, I do not sweat over minor versions. It's always about the best, the latest, the major, and the now. If I am building something new, I shop for the latest. Since dependencies are a land of extreme abundance, it is unlikely I will pin my hopes on an out-of-date library. So, while I construct in a "shiny thing" matter, perhaps what is happening in my trenches is occurring elsewhere. As a consumer, I choose the latest version while making a new thing. Otherwise, I place myself, the team, and the project in explicit protection until the pinned forcefield depletes, and I must do something. There is rarely an in-between. SemVer is correct thinking, but in this consideration, anything that increments on the far side is what matters to me.&lt;/p&gt;

&lt;p&gt;So what is this pattern? Let's call my realistic library versioning scheme &lt;strong&gt;latestVer&lt;/strong&gt;. &lt;a href="https://latestver.org/"&gt;LatestVer&lt;/a&gt; is a simplistic approach to versioning. Choose whatever system—numbers, dates, or hashes. Let's call it a &lt;em&gt;LABEL&lt;/em&gt;. Then ensure the adopters follow the latest version. The reality is that consumers will be looking elsewhere anyway, challenged by pull requests of technical superiors, or dealing with well-intended contributors. Whatever happens, the author and adopter must bump up to the &lt;strong&gt;latestVer&lt;/strong&gt; before an ever-present dystopian cybersecurity vulnerability future. Implementers, including myself, will not have time to understand what has changed until getting into the weeds. When I unpack the work, the latest is what matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://latestver.org/"&gt;LatestVer&lt;/a&gt;&lt;/strong&gt; is a shortsighted but truthful versioning scheme. As an author, it encourages "&lt;a href="http://blog.ezyang.com/2016/12/thoughts-about-spec-ulation-rich-hickey/"&gt;accretion&lt;/a&gt;" as Rich Hickey said. As an adopter, it is my reality. Understandably I cannot speak for all since there are strict guidelines for implementing dependencies in different environments. But for those in my part of the world where philosophies are unrestricted, it's a general heave-ho, and &lt;strong&gt;latestVer's&lt;/strong&gt; motto captures the mood well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If I'm not on latestVer, let me get there soon. Otherwise, I'll be forced there as a priority by something out of my control. If unfixed, I'll drop the library for its alternative. And when building anything new, it's always the latest.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Seldom do I have to cherry-pick a specific "in-between" version that will raise a project from a sinking hole. A feeling sets in while I do it, corresponding vaguely to purchasing something expensive but of little value. Feeling regret, I'll bootstrap my way to the latest, finding the courage to drive in the newest version of &lt;em&gt;their&lt;/em&gt; shiny thing at the cost of my mental labor. In the end, it feels so good to have something new.&lt;/p&gt;

&lt;p&gt;I love &lt;strong&gt;latestVer&lt;/strong&gt; because it's my reality of the working software. Do you experience the same? &lt;a href="https://latestver.org/"&gt;If so, I wrote its specification to rally around&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>semver</category>
      <category>versioning</category>
      <category>systems</category>
    </item>
  </channel>
</rss>
