<?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: softdevstart</title>
    <description>The latest articles on DEV Community by softdevstart (@softdevstart).</description>
    <link>https://dev.to/softdevstart</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%2F897057%2F1d198224-8a35-4686-aee0-e3c19a72b2a2.png</url>
      <title>DEV Community: softdevstart</title>
      <link>https://dev.to/softdevstart</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/softdevstart"/>
    <language>en</language>
    <item>
      <title>Ready to ship your app ? Lets check...</title>
      <dc:creator>softdevstart</dc:creator>
      <pubDate>Sat, 07 Oct 2023 17:41:17 +0000</pubDate>
      <link>https://dev.to/softdevstart/operational-readiness-3608</link>
      <guid>https://dev.to/softdevstart/operational-readiness-3608</guid>
      <description>&lt;p&gt;&lt;strong&gt;Operational readiness&lt;/strong&gt; is the often most neglected part of the software development, but if we look at it closely its a very crucial aspect and if not done right, all the effort which is put to build a really valuable product can become inaccessible to your customers. This is situation that no business wants to be in, and no developer wants to be in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So exactly what is operational readiness ?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Operational readiness means that we are able and confident to serve the actual production traffic to the feature which we have implemented, and under this traffic the features works as expected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How can achieve operational readiness for our systems ?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Infrastructure scaling&lt;/p&gt;

&lt;p&gt;In this, we need to ensure that we have enough infrastructure to support our customers, i.e ability to scale our infra for handling peak traffic. For example : Do we have enough number of servers which can bear the traffic ? Do we have circuit breakers which can prevent our system from complete shutdown ? Are we having the correct configuration in our cloud units which can scale as demand increases ?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Use case scaling&lt;/p&gt;

&lt;p&gt;In this, we need to ensure that our use case implementation will actually be able to serve the customer using patterns. For example : Use case is that customer should be able to upload a file on our portal. Now an ideal scaling here means that our implementation should be able to handle file of any size. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Monitoring Dashboards&lt;/p&gt;

&lt;p&gt;In this, we ensure that we are capable to monitor the health of our system in real time(or periodically) and are able to easily identify the problem in case of any failure. This may include jobs which regularly check for system health, graphical representations of the real time metrics which are emitted by system itself, etc. Ideally we should be monitoring each aspect of our system to the extent possible, which immensely help the developers who are trying to find out what has wrong.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Auto cut alarms&lt;/p&gt;

&lt;p&gt;In this, we make sure that we get timely notifications in cases where the system is not behaving as per expectations. For example : setting thresholds for cpu utilization, endpoint spillovers, dependency throtlling, high disk usage, latency increase beyond limits, etc. This make sure that we reduce the downtime of our system by being able to work on the issue as soon as it happens, and hence reduce the customers getting impacted. Because now we will not wait for customer to tell us that there is some issue with our system.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Know the limits  &lt;/p&gt;

&lt;p&gt;In this section, we bench mark our system capacity in terms of real time traffic handling, long running async processes, etc. The outcome of this exercise is that we know when will our system fail, this is crucial information since based on this we can scale our systems with some buffer to adjust peak timings. This saves us cost by not being over-scaled, but also helps in designing other systems which will depend on this one, and to scale up or down efficiently when the expected traffic is already known.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Creating Runbooks &lt;/p&gt;

&lt;p&gt;Runbooks are the documents which contains all the info(or atleast links to the info) required with respect to functioning of a specific module or feature. It contains design documents, dashboards, system dependencies, their contact information, how to handle failure scenarios, standard operating procedures, etc. This helps oncalls(developers monitoring the system) to figure out teh resolution steps for a issue, or atleast reach the correct team to resolve the issue.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Review &lt;/p&gt;

&lt;p&gt;Now once we have done all of the above as per the system requirements or needs, we need to review these with senior engineers, this will allow us to get their perspective in the terms of operational ability, and will get to know the gaps or improvements which can be done. This is required to get an external perspective because eventually we need to monitor our system the best way possible, since nobody knows everything.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are some ( and not the exhaustive list) of the ways by which we can launch our feature smoothly and confidently to the customer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why should we do this ?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Smooth roll-out of our feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ability to gracefully handle failures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduce system downtime.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reduce or avoid negative customer impact.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And this extra effort saves developer's time later on to fix an issue.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hopefully, now we have better understanding of operational readiness, and its criticality to us and our businesses. If you have ideas on others better ways via which we can achieve better operational readiness, feel free to add them in comments.&lt;/p&gt;

&lt;p&gt;Want to know more on another tech topic or aspect of "Growing as software developer" ! Feel free to add it in comments.&lt;/p&gt;

&lt;p&gt;Source and Credits : &lt;a href="https://www.dcpsoftwaresolutions.com/2023/10/operational-readiness.html"&gt;https://www.dcpsoftwaresolutions.com/2023/10/operational-readiness.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>developer</category>
      <category>learning</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Growing as Software Developer | Working with Distributed Systems</title>
      <dc:creator>softdevstart</dc:creator>
      <pubDate>Sun, 05 Feb 2023 11:13:31 +0000</pubDate>
      <link>https://dev.to/softdevstart/growing-as-software-developer-working-with-distributed-systems-1gl1</link>
      <guid>https://dev.to/softdevstart/growing-as-software-developer-working-with-distributed-systems-1gl1</guid>
      <description>&lt;h2&gt;
  
  
  Starting point
&lt;/h2&gt;

&lt;p&gt;When we grow as software developer, the scope of focus increases by default, which means one goes from working on low level designs to high level designs, working on single component to multiple components(system), working on single system to multiple systems(organisation level architecture). This growth demands that we increase the scope of our knowledge to next level, so that we can efficiently understand, create, maintain and deprecate the systems.&lt;/p&gt;

&lt;p&gt;While there is lot of content around what and why of distributed systems, the focus area of this post is &lt;strong&gt;to share learning, experiences and best practices gained while working with distributed systems&lt;/strong&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Working with Distributed Systems
&lt;/h2&gt;

&lt;p&gt;These days its a must to have knowledge on "what are distributed systems" and "how they work" in order to grow as a software developer. The reason is that on daily basis, there are so many webapps or online applications which we use to either be more productive at work or even for basic communication with our peers. Without a doubt, all these apps are implementing "Distributed systems" concept in order to be &lt;strong&gt;robust, highly available, fault tolerant, work in asynchronous mode&lt;/strong&gt; and  with various other benefits. &lt;/p&gt;

&lt;p&gt;"Distributed system" , as the words suggest that the "system" is distributed in nature. Now distribution can be in terms of &lt;strong&gt;application usage pattern, server's geographical location, responsibilities of application, etc&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;But all of this comes as a &lt;strong&gt;cost&lt;/strong&gt;, for example if you want to make your application fault tolerant, which means you want your application to be running and serving traffic even if there happens to be an outage at the company where you have hosted your application. Best practices suggest remediating this situation by &lt;strong&gt;deploying your application into multiple availability zones&lt;/strong&gt;(for instance at different geographical locations), which inherently means that you now have a fleet instead of just single server, which means more cost.&lt;/p&gt;

&lt;p&gt;Working with distributed systems &lt;strong&gt;tends to increase complexity&lt;/strong&gt; and suddenly concept of maintenance becomes even more important than monolithic systems. &lt;strong&gt;Monolithic systems are opposite to "distributed systems" in terms of "handling of responsibilities"&lt;/strong&gt;. A Monolithic system handles all the responsibilities on its own, which will be simple to maintain, but will be hard to handle in cases where this system itself goes down for any reason. Responsibilities are the different functionalities which are performed by the application for example, UI rendering, data processing and storage, monitoring, logging to name a few.&lt;/p&gt;

&lt;p&gt;As a developer, its always better to have basic understanding of already built and in-use distributed systems in market. Today, we have so many cloud services providers. These are best examples of distributed systems in there own, because they have to fulfil mostly all the things which are required in distributed systems to run their business itself. These cloud providers offers many maintained services which we should be aware of, and become expert in knowing when and where to use these services to design a better system. &lt;/p&gt;

&lt;p&gt;Distributed systems have various characteristics, and we should be aware of them all. It doesn't necessarily mean to incorporate all of them within the same system, the &lt;strong&gt;decision to trade-off which characteristic of Distributed System comes from a combination of lot of factors like project fund limits, service provider's limits, stage of application (whether its already receiving huge traffic or its just about to start), etc&lt;/strong&gt;. These information points become very useful, as developer so that we know, what is the best option for us to solve a problem. For solving the same problem, we can have many systems with different designs, but we have to pick the one which fits in all constraints of the problem and at the same point is scalable, maintainable, and cost effective to business.&lt;/p&gt;

&lt;p&gt;Hopefully you would have learned something from the post, in case you want to know more about the topic or want to hear on another topic, please feel free to comment.&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>devjournal</category>
      <category>programming</category>
    </item>
    <item>
      <title>Create Block Diagrams at typing speed</title>
      <dc:creator>softdevstart</dc:creator>
      <pubDate>Sun, 24 Jul 2022 10:56:26 +0000</pubDate>
      <link>https://dev.to/softdevstart/create-block-diagrams-at-typing-speed-i9a</link>
      <guid>https://dev.to/softdevstart/create-block-diagrams-at-typing-speed-i9a</guid>
      <description>&lt;p&gt;Hello all !&lt;/p&gt;

&lt;p&gt;Introducing web app : &lt;a href="https://blockdiagram.onrender.com/"&gt;https://blockdiagram.onrender.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create simple block diagrams quickly with plain text. Control basic blocks/arrows positions without any drag and drop. Positioning blocks/arrows ourselves helps us quickly understand/remember diagrams, and this tool does the same easily and quickly.&lt;/p&gt;

&lt;p&gt;This has advantage of text to diagram model while still having easy control on the diagram format. Positioning blocks ourselves helps us quickly understand the diagram flow even if its complex, compared to the diagrams which are formatted based on pre-defined rules which sometimes becomes difficult to grasp.&lt;/p&gt;

&lt;p&gt;This webApp helps you be more productive while focussing on design.&lt;/p&gt;

&lt;p&gt;Useful for :&lt;br&gt;
a) High level simple System/Architecture Diagrams.&lt;br&gt;
b) Also comes handy to create quick diagram to brainstorm system design while collaborating with colleagues.&lt;/p&gt;

&lt;p&gt;Links&lt;br&gt;
Create Block Diagrams : &lt;a href="https://blockdiagram.onrender.com/"&gt;https://blockdiagram.onrender.com/&lt;/a&gt;&lt;br&gt;
Examples : &lt;a href="https://blockdiagram.onrender.com/examples"&gt;https://blockdiagram.onrender.com/examples&lt;/a&gt;&lt;br&gt;
About : &lt;br&gt;
&lt;a href="https://blockdiagram.onrender.com/about"&gt;https://blockdiagram.onrender.com/about&lt;/a&gt;&lt;br&gt;
Feedbacks/Queries : &lt;a href="https://forms.gle/3n3cKMppQVTDfeMd7"&gt;https://forms.gle/3n3cKMppQVTDfeMd7&lt;/a&gt; or just comment below&lt;/p&gt;

&lt;p&gt;Boost your productivity !&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>showdev</category>
      <category>news</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
