<?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: Tummala Krishna Kishore</title>
    <description>The latest articles on DEV Community by Tummala Krishna Kishore (@webruster).</description>
    <link>https://dev.to/webruster</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F223483%2F4d8818dc-ba2f-4e50-bc1d-a75b5d02da5b.png</url>
      <title>DEV Community: Tummala Krishna Kishore</title>
      <link>https://dev.to/webruster</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/webruster"/>
    <language>en</language>
    <item>
      <title>What actually belongs in an architecture decision record (and what doesn't)</title>
      <dc:creator>Tummala Krishna Kishore</dc:creator>
      <pubDate>Sat, 25 Jul 2026 06:35:30 +0000</pubDate>
      <link>https://dev.to/webruster/what-actually-belongs-in-an-architecture-decision-record-and-what-doesnt-1ke6</link>
      <guid>https://dev.to/webruster/what-actually-belongs-in-an-architecture-decision-record-and-what-doesnt-1ke6</guid>
      <description>&lt;p&gt;Most architecture decision records fail for the opposite reason people think. The issue usually isn't that teams forget to write them. It's that the ones they write are filled with the wrong content. The key information a reader needs—why this option instead of the others—often gets buried on page three under a list of API changes.&lt;/p&gt;

&lt;p&gt;An ADR has one job: capture a decision that is costly to reverse, along with the reasoning that led to it, while that reasoning is still fresh. That's all. It isn't a design document, a specification, or a collection of research. If you keep that focus, everything else about what to include or leave out will follow naturally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The format that still works&lt;/strong&gt;&lt;br&gt;
Michael Nygard's original ADR template from 2011 (title, status, context, decision, consequences) has lasted for a reason. It directly addresses the key questions a future reader has: What was the situation? What did we decide? What did we give up? Teams that add ten extra sections, like owners, review dates, risk matrices, or approval lists, usually end up with a document no one finishes reading, which defeats the purpose. If your ADR template is longer than the time it takes to fill it out for a simple decision, cut sections until it’s more concise.&lt;/p&gt;

&lt;p&gt;A useful rule of thumb is that an ADR longer than a page and a half is often a design document masquerading as an ADR. This isn’t a strict rule, but I haven’t seen a truly good ADR exceed 600 words. The decisions worth documenting this way can be stated, justified, and owned in about a page. If that's not possible, the record isn’t the issue. The decision is probably still tied up with other unresolved matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What belongs&lt;/strong&gt;&lt;br&gt;
The decision, stated clearly. "We will use event-driven integration between the order and inventory services instead of synchronous REST calls" is a decision. "The order service integrates with inventory" simply describes the current state and belongs in a wiki, not an ADR.&lt;/p&gt;

&lt;p&gt;The challenges faced. Describe the two or three actual constraints that were in conflict, not a comprehensive literature review. For example, a latency budget versus consistency guarantees, team ownership boundaries versus a shared database that made those ownership lines unclear, or cost limits versus the vendor lock-in that comes with a cheaper option. If there was no real conflict, you probably didn't need an ADR.&lt;/p&gt;

&lt;p&gt;The alternatives you seriously considered, along with why they weren’t chosen. Focus on the options a competent engineer would likely ask about six months later. For example, "We looked at a shared database with row-level locking; we rejected it because it recreated the coupling we wanted to eliminate between the two teams' deployment cycles." This simple statement saves the next person from rehashing a decision that's already been made.&lt;/p&gt;

&lt;p&gt;The consequences, including the ones you’re not thrilled about. This is often the section teams skip, but it offers the highest value. Every genuine architectural decision comes with costs. If you adopt event-driven integration, you trade the simplicity of synchronous actions for eventual consistency and a tougher debugging process when a message is lost. Document that. An ADR that lists only the benefits isn't a valid record of a decision. It's a sales pitch to your future self, and future-you won’t be fooled more than once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What doesn’t belong&lt;/strong&gt;&lt;br&gt;
Implementation details. Class names, endpoint paths, table schemas, retry counts—these change frequently and can quickly make the document outdated. If the ADR needs a code example to clarify its point, it likely indicates that the decision being documented is more about implementation than architecture, and it should belong in the code or design document instead.&lt;/p&gt;

&lt;p&gt;Decisions that are not settled yet. If three options are still in play and no one has chosen one, that's a design document or a spike ticket. Writing an ADR for a decision still in progress creates a record that contradicts itself by the time it gets approved. Contradictory records are worse than having no records; they mislead the following reader.&lt;/p&gt;

&lt;p&gt;A decision made after the fact to meet process requirements. This rubber-stamp scenario is more common than teams want to admit. Someone builds the solution and then creates the ADR retroactively because it's required by the checklist. The "alternatives considered" section becomes fictional, as nothing was actually considered. The option that got released is the only one that ever existed on paper. Readers can tell the difference. An ADR written after the code is merged feels different from one written beforehand. Once a team’s ADRs acquire a reputation for being just for show, people stop reading them, which is worse than never having them required.&lt;/p&gt;

&lt;p&gt;Every decision, regardless of its importance. This is the trade-off people often avoid stating clearly: requiring an ADR for every non-trivial pull request leads to a pile of records. For example, both the choice to follow field-naming conventions and the decision to go fully async receive the same template and attention. The signal-to-noise ratio diminishes, and the truly important records—those concerning team boundaries, data ownership, or long-term platform choices—get lost among many similar entries about logging formats. Save ADRs for decisions that are genuinely challenging to reverse: those that affect team boundaries, data ownership, or a platform choice you'll live with for years. Smaller considerations can go in a pull request description or a design note.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The crucial test&lt;/strong&gt;&lt;br&gt;
Before you write the next one, ask yourself: if this decision turns out to be wrong in eighteen months, would the person troubleshooting it appreciate this document? If the answer is that they would skim through the generic content looking for the paragraph explaining why the obvious choice wasn’t made, write that paragraph first and build the rest of the record around it. Everything else, like the status field, review date, and approval chain, is optional. The reasoning is the key part; treat it that way, and the format will fall into place.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>softwaredesign</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Open In-line video in fullscreen</title>
      <dc:creator>Tummala Krishna Kishore</dc:creator>
      <pubDate>Tue, 01 Feb 2022 05:55:24 +0000</pubDate>
      <link>https://dev.to/webruster/open-in-line-video-in-fullscreen-28ge</link>
      <guid>https://dev.to/webruster/open-in-line-video-in-fullscreen-28ge</guid>
      <description>&lt;p&gt;Its been a long time i have written my posts, so got some free time to publish some articles which are usefull for the people who are implementing In-line video and make it fullscreen in Ionic.&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;Config.xml&lt;/strong&gt; we need to Add this Block of code to Make it full screen&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;preference name="AllowInlineMediaPlayback" value="true" /&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Which Triggers the Native app to play in Inline. while coming to the HTML5 there is a intresting fact that was stated in &lt;a href="https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html" rel="noopener noreferrer"&gt;Apple Developer Site&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;on iPhone and iPod touch, which are small screen devices, Video is NOT presented within the Web Page&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ionic</category>
      <category>angular</category>
      <category>iphone</category>
    </item>
    <item>
      <title>Publish from Visual Studio and automatically encrypt appSettings using aspnet_regiis</title>
      <dc:creator>Tummala Krishna Kishore</dc:creator>
      <pubDate>Tue, 17 Aug 2021 06:04:18 +0000</pubDate>
      <link>https://dev.to/webruster/publish-from-visual-studio-and-automatically-encrypt-appsettings-using-aspnetregiis-1m1e</link>
      <guid>https://dev.to/webruster/publish-from-visual-studio-and-automatically-encrypt-appsettings-using-aspnetregiis-1m1e</guid>
      <description>&lt;p&gt;After going through your all edits and a bit of research from me , you want to execute the following command after the publish from the Visual Studio&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -pe "appSettings" -site Default -app "/" &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If I understood right , You can try wrapping the&amp;nbsp;&lt;em&gt;ItemGroup&lt;/em&gt;&amp;nbsp;in a Target with&amp;nbsp;&lt;em&gt;AfterTargets&lt;/em&gt;&amp;nbsp;set to&amp;nbsp;&lt;strong&gt;AddIisSettingAndFileContentsToSourceManifest&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Target Name="executeinHosts" AfterTargets="AddIisSettingAndFileContentsToSourceManifest"&amp;gt;
    &amp;lt;ItemGroup&amp;gt;
      &amp;lt;MsDeploySourceManifest Include="runCommand"&amp;gt;
       //here would be your path that need to run after the publish
      &amp;lt;/MsDeploySourceManifest&amp;gt;
    &amp;lt;/ItemGroup&amp;gt;
  &amp;lt;/Target&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So in Your case this is how that part should look:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Target Name="executeinHosts" AfterTargets="AddIisSettingAndFileContentsToSourceManifest"&amp;gt;
    &amp;lt;ItemGroup&amp;gt;
      &amp;lt;MsDeploySourceManifest Include="runCommand"&amp;gt;
         &amp;lt;path&amp;gt;C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -pe "appSettings" -site $(DeployIisAppPath) -app "/"&amp;lt;/path&amp;gt;
      &amp;lt;/MsDeploySourceManifest&amp;gt;
    &amp;lt;/ItemGroup&amp;gt;
  &amp;lt;/Target&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Additional Info:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AddIisSettingAndFileContentsToSourceManifest&lt;/strong&gt;&amp;nbsp;target works just right before Web Deploy copying files from local to server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;aspnet_regiis&lt;/strong&gt; can be run in&amp;nbsp;&amp;nbsp;node by&amp;nbsp;&lt;em&gt;&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Exec Command="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -pef connectionStrings $(ProjectDir)obj\Debug\Package\PackageTmp" WorkingDirectory="$(publishUrl)" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>dotnet</category>
      <category>iis</category>
    </item>
    <item>
      <title>Display datetime correctly in iOS/Safari using ionic2/angular2</title>
      <dc:creator>Tummala Krishna Kishore</dc:creator>
      <pubDate>Tue, 06 Jul 2021 07:58:39 +0000</pubDate>
      <link>https://dev.to/webruster/display-datetime-correctly-in-ios-safari-using-ionic2-angular2-lof</link>
      <guid>https://dev.to/webruster/display-datetime-correctly-in-ios-safari-using-ionic2-angular2-lof</guid>
      <description>&lt;p&gt;The issue is caused by the Intlapi because DatePipe for Angular 2. Release is working fine only for FireFox and Chrome with custom format strings. it Doesn’t work on Safari due to lack of Intl. so as a temporary work around is to include the Intl polyfill&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Solution 2 You can use the moment.js which can format your required date as follows&lt;/p&gt;

&lt;p&gt;&lt;code&gt;moment(singleTable[0].FromCurrentDate).format("dd/MM/yyyy,h:mm:ss a")&lt;/code&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>ionic</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Pass multiple Eval field in one command argument in Repeater Control</title>
      <dc:creator>Tummala Krishna Kishore</dc:creator>
      <pubDate>Thu, 01 Jul 2021 10:11:47 +0000</pubDate>
      <link>https://dev.to/webruster/pass-multiple-eval-field-in-one-command-argument-in-repeater-control-10m7</link>
      <guid>https://dev.to/webruster/pass-multiple-eval-field-in-one-command-argument-in-repeater-control-10m7</guid>
      <description>&lt;p&gt;This is the most common problem that generally users face while dealing with Repeater control. I gave this solution in Stackoverflow. want to post it here for users coming from search&lt;/p&gt;

&lt;p&gt;Add the below snippet in in template&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CommandArgument='&amp;lt;%#Eval("ScrapId")+","+ Eval("UserId")%&amp;gt;'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In code behind you can use retrieve values like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;protected void GridViews_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Comment")
    {
        string[] commandArgs = e.CommandArgument.ToString().Split(new char[] { ',' });
        string scrapid = commandArgs[0];
        string uid = commandArgs[1];
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>dotnet</category>
      <category>csharp</category>
      <category>nuggets</category>
    </item>
  </channel>
</rss>
