<?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: Gokuldroid</title>
    <description>The latest articles on DEV Community by Gokuldroid (@gokuldroid).</description>
    <link>https://dev.to/gokuldroid</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%2F229878%2Fe954fdd9-011d-4b75-9a42-fc5ef6fbf97d.jpeg</url>
      <title>DEV Community: Gokuldroid</title>
      <link>https://dev.to/gokuldroid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gokuldroid"/>
    <language>en</language>
    <item>
      <title>IMHO - Being a software engineer.</title>
      <dc:creator>Gokuldroid</dc:creator>
      <pubDate>Wed, 26 Feb 2025 06:37:21 +0000</pubDate>
      <link>https://dev.to/gokuldroid/imho-being-a-software-engineer-b1i</link>
      <guid>https://dev.to/gokuldroid/imho-being-a-software-engineer-b1i</guid>
      <description>&lt;p&gt;I worked in three companies. worked in small team, big team and I have seen a product growing from the scratch. Thourgh the years of learning I have shaped my decision framework. Here is some of them :). I might revisit and tweak it in future. Feel free to disagree on some of these.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;"Best practices" are "Not a rule book". Everything has exceptions and outliers based on the context. Status quo bios can work in both good and bad ways. That applies for all the items below.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We're literally getting paid to 'think'. If we're not being creative in thinking that yeilds tangible results, we're not incentivising companies to pay us more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you move up and up, it is not just about technical skills unless you work in very specialised field.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the company prioritizes velocity over the learning of an individual most of the times, you should start being selfish about grooming yourself. Otherwise you are doing long term damage to you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bad code or bad implementation is not always because of people's incompetency. It might be because of deadline or tight deliverable. If you're constantly giving these excuses for your bad code, you're incompetent or you lack ownership.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you see a ugly bug, fix it or get it fixed. Not everything will be planned in sprint planning. 15 mins work (This time limit differs person to person) is not worth your backlog or mental space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sometimes it doesn't cost you a penny to be nice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your code demands some long term tax to be paid. if possible It is always better to pay it gradually. You can't remove all duct tapes in single shot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Greater the common code and longer the code in production, lesser the bug.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Never hesitate to make some change that might break something which is not in prod yet or the cost of failure is low. The long term tax you're trying to pay now will be much lesser than the tax you will pay when you do the same thing in prod. You might not get rewarded for your work. But you might get blamed for your failures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sometimes going slow is the fastest way you can go.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Correcting or improving the implementation is always easier than correcting or improving the interface. Same with method signature and method implementation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sometimes you will be forced to win some battle instead winning a war.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't give too much credit to your intelligence. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't compare AIs evolution with human evolution that happened over millions of years.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A complex thing can be broken into thousands of small things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can't start eating the big pizza in the middle, but you have to start eating it to finish it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Requiring too much tribal knowledge get started is a good recepie to kill the team.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write code like a coffee bug which doesn't require a manual.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You should avoid writing some code if you feel that someone might break it if they try to change when you're not there. If you're forced to do so, tests are your final line of defence.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Effective two person review rule is a simple math. If one person has 0.1% chance of committing a mistake, two persons committing same mistake will be very very less than 0.1%. thus take reviews seriously. Don't approve something if you don't understand it fully.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Estimate - by definition of the word itself is it's approximate. How much you're off with your estimate defines the quality of your estimates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;QA is the last line of dedense and you shouldn't handover all of your fights to QA. Use them only when needed. If p0 is not working, it is your problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't be an intelligent jerk. You will do far more damange to the team than you think.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You will lose your goodwill for the every destructive fight you will pick. Thus pickup the fight only if you can win. Losing fights may not worth the goodwill you will be loosing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You need to phase out after a sprint. Thank me later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rearchtecture is most often not solution for a system which handles 99% of the cases and no frameworks or libraries handles 100% of the cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consciously spend perfection tax. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Over-engineering can kill startups. Under-engineering can churn big companies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If something becomes a problem to the team, don't ever say it's not my line of work. acquire skill to fix it or "know who" will fix it for you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;At core you're engineer first. whether you're a backend engineer or frontend engineer comes later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You need feedback loop to grow. A good feedback loop will get formed from the people who have different opinion than you. Thus listen to people who have a different opinion and corrected you in the past. Not all people can form good feedback loop also.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;... to be continued.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>programming</category>
      <category>career</category>
      <category>development</category>
    </item>
    <item>
      <title>Local aliases using zen aliases</title>
      <dc:creator>Gokuldroid</dc:creator>
      <pubDate>Fri, 05 Feb 2021 19:36:08 +0000</pubDate>
      <link>https://dev.to/gokuldroid/local-aliases-using-zen-aliases-kg6</link>
      <guid>https://dev.to/gokuldroid/local-aliases-using-zen-aliases-kg6</guid>
      <description>&lt;p&gt;We can configure aliases very easily in bash or zsh. but those aliases are global to all directory. sometimes we need aliases or commands only for some directories alone. this plugin makes the process easy. those aliases will be available only to that particular directory. aliases will be loaded when you &lt;code&gt;cd&lt;/code&gt; into the directory and unloaded once you leave the directory. &lt;/p&gt;






&lt;h3&gt;
  
  
  Configure in zsh
&lt;/h3&gt;

&lt;p&gt;clone plugin from github&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Gokuldroid/zen-alias ~/.oh-my-zsh/plugins/zen-alias
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;check if the plugin is cloned correctly&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; ~/.oh-my-zsh/plugins
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;open .zshrc&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;open ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vim ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;add zen-alias like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Which plugins would you like to load?&lt;/span&gt;
&lt;span class="c"&gt;# Standard plugins can be found in $ZSH/plugins/&lt;/span&gt;
&lt;span class="c"&gt;# Custom plugins may be added to $ZSH_CUSTOM/plugins/&lt;/span&gt;
&lt;span class="c"&gt;# Example format: plugins=(rails git textmate ruby lighthouse)&lt;/span&gt;
&lt;span class="c"&gt;# Add wisely, as too many plugins slow down shell startup.&lt;/span&gt;
&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
    git
    zen-alias
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;updating the plugin&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;cloned directory&amp;gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; git pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;h3&gt;
  
  
  Configure in bash
&lt;/h3&gt;

&lt;p&gt;copy the file to root directory or somewhere in your system.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-S&lt;/span&gt; https://raw.githubusercontent.com/Gokuldroid/zen-alias/main/zen-alias.plugin.zsh &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.zen-alias.bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;source the file in bashrc&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;open ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;add this line at the end of the bashrc&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zen-alias.bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;h3&gt;
  
  
  Aliases syntax
&lt;/h3&gt;

&lt;p&gt;Create &lt;em&gt;.aliases&lt;/em&gt; file in the root directory of the project. add your per project aliases like this. You can find a sample file &lt;a href="https://github.com/Gokuldroid/zen-alias/blob/main/.aliases"&gt;here&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yc: yarn w @zen-alias/client
ys: yarn w @zen-alias/server
ycommon: yarn w @zen-alias/common
ybg: yarn w @zen-alias/bg-jobs
yb: yarn build
yw: yarn watch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;








&lt;h3&gt;
  
  
  Tips
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Excluding the .aliases file in git tree
&lt;/h4&gt;

&lt;p&gt;incase if you don't want others to use your aliases, you can add it global .gitignore or project .gitignore&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~
&lt;span class="nb"&gt;touch&lt;/span&gt; .gitignore_global
git config &lt;span class="nt"&gt;--global&lt;/span&gt; core.excludesfile ~/.gitignore_global
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;".aliases"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ~/.gitignore_global
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;h4&gt;
  
  
  Init command for a directory.
&lt;/h4&gt;

&lt;p&gt;we might want to execute some script as soon as we enter the project. like updating local branch or setting up nvm or rvm version etc. zen-alias provides an easy way for this.&lt;/p&gt;

&lt;p&gt;define a zen-alias like this,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;init_zen_dir: nvm use &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; rvm use
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>cmdline</category>
      <category>zsh</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
