<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Nerdy and Noisy]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>https://nerdyandnoisy.com/</link><image><url>https://nerdyandnoisy.com/favicon.png</url><title>Nerdy and Noisy</title><link>https://nerdyandnoisy.com/</link></image><generator>Ghost 3.30</generator><lastBuildDate>Sat, 04 Apr 2026 12:43:00 GMT</lastBuildDate><atom:link href="https://nerdyandnoisy.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Don't be lazy, plan first and then hire]]></title><description><![CDATA[Here are some reasons why it is so important to plan before your start hiring for a role.]]></description><link>https://nerdyandnoisy.com/know-what-you-want-from-a-person-before-you-hire-them/</link><guid isPermaLink="false">5f73100eb38a4e511fd670d1</guid><category><![CDATA[Hiring]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[Startup]]></category><category><![CDATA[Thoughts]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Mon, 03 Jan 2022 15:14:20 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1531185352319-8140fe37bc4b?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1531185352319-8140fe37bc4b?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Don't be lazy, plan first and then hire"><p>How many times have you looked at a job profile, or been in an interview and heard things like we want you to hit the ground running with no oversight, or we want people who are flexible with their skills, or we want to hire cross functional talent? When I read, or hear such things it does not inspire confidence in me about the management. </p><p>I will not lie, I was one of those leaders at a point in time, because I accepted them as a norm. And then I learned that I was wrong, and that I had to put in the effort to plan, learn to think strategically, if I wanted to build a team that grows.</p><p>Here is what most organizations/teams/managers need to understand about hiring the right people and how to build a team for growth.</p><p><strong>Cross functional teams are a myth</strong></p><p>Any skill is hard to develop, and it takes years to master something. You cannot just hire someone for one skill, ask them to do something they have no experience of and then expect them to deliver quality work in that area. More so, if you as a leader cannot help them get better in the new skill. Have you ever heard of a hospital hiring a dentist, and then telling him/her to also do a kidney transplant. That is the because the dentist does not have the right skills, and most probably they will screw up. </p><p>This thing about cross functional teams, is a myth created to make leaders feel comfortable by making short term tactical decisions without worrying about long term impacts. Does a hospital ever say, we run a dental clinic, but we have cross functional doctors, so we can go and promise a client that we can also do kidney transplant. One of our cross functional dentists, can just learn it over night and do it. Yeah, thats not how it works !!!</p><p><strong>Hire only when you have role, and long term plan for the role</strong></p><p>There are enough quality consultancy companies to help you out with any of your short term needs. Yes, it might cost you more than hiring a person in short term, but hiring a person who does not fit your long term plan, is a higher cost than you imagine. The problem with cost is, it is always associated with $ figures, what people fail to understand that time wasted by people also is a cost because that can be utilized somewhere else to make or save more money. Imagine you hire someone for short term, and now you have to let them go because they don't fit your long term plans, people in the team will have to spend time transitioning that knowledge, you will spend time as a leader managing expectations, cost of hardware &amp; software that you procured for them, cost of time you spent trying to get them up to speed. All that for 2-3 months of work, it's a waste of time &amp; energy, not to mention that bad rep your company gets, if you keep doing this over and over. </p><p><strong>But I found a rockstar candidates</strong></p><p>Another reason, why a lot of managers hire before having a long term vision, is because they found a rock star candidate. Well that person is only a rockstar most probably because they are in a stable environment, focusing &amp; doing their best work. That means that when you put them in an unstable, unfocused environment and you might not get the same output from them. So, don't create a role just because you found a rockstar, hire a rockstar because you have role for them.</p><p><strong>People are not cogs in a wheel</strong></p><p>Another problem is the philosophy that, everyone is replaceable and a team is like a machine where you can replace a person without any impact. Well, skill wise yes most people are replaceable but the true cost of replacing a person is not the skill gap, its everything else that makes a team successful. </p><p>A team, is not an emotionless machine, it is a combination of people working towards a common goal. Which means, the chemistry they have with each other, the culture that makes them successful, their mutual respect for each other, everything is as important as the skills of the people. </p><p>If you keep replacing people in your team/organization, it will create a false sense of flux that has a very adverse impact on productivity. Your team will spend a lot more time training people, than doing actual work. </p><p><strong>No one hits the ground running</strong></p><p>For starters, you only hit the ground running, when you are trying to get off a moving bus or train. And, that is very dangerous because if you are not careful you will get into a terrible accident. Secondly, that momentum is not something you can carry forward always, because friction!! </p><p>Now, that we have clarified the physics part of this term, let's talk about why it is not practical in an organizational context. </p><p>There are a few reasons for it, first every organization is different, their product/services are different, their culture is different and their processes are different. There is a learning curve to go over that hump, before you can start doing actual work. </p><p><strong>You need a lot less people than you think</strong></p><p>The last thing to remember as a leader, is that if everyone in your team is doing their best work in a stable, productive environment, you can achieve a lot more with small teams. If you learn to be realistic in your goals, and prioritize them correctly you don't need a large team to achieve them. </p><p>What small teams also give you is a box that you need to fit your ideas, priorities in. Trust me this is very important for any team, because to deliver a great output you need to prioritize things. If you spread your net too wide, you will end up spending time on things, that should be your priority. </p>]]></content:encoded></item><item><title><![CDATA[Hours spent each day to maintain project status dashboard - Is it really worth it ?]]></title><description><![CDATA[Most project status dashboards that I have seen are poorly maintained, and developers require push to keep updating them. 
Here is what I learned about how to make project status tracking, simple, efficient and meaningful.]]></description><link>https://nerdyandnoisy.com/management-in-sync-with-style-of-working/</link><guid isPermaLink="false">5fc9163db38a4e511fd671ff</guid><category><![CDATA[Productivity]]></category><category><![CDATA[Technology]]></category><category><![CDATA[Project Management]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Tue, 21 Dec 2021 14:52:10 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1542626991-cbc4e32524cc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MXwxMTc3M3wwfDF8c2VhcmNofDF8fHxlbnwwfHx8&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1542626991-cbc4e32524cc?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MXwxMTc3M3wwfDF8c2VhcmNofDF8fHxlbnwwfHx8&ixlib=rb-1.2.1&q=80&w=2000" alt="Hours spent each day to maintain project status dashboard - Is it really worth it ?"><p>Today, I was on an interesting project management call for a client, where 7 people spent almost 1 hour trying to create a project status tracking dashboard. That's 7 hours spent on trying to create a dashboard to track progress of a project, the end result of which was a dashboard with 20 status columns for each task. Now imagine each developer working a task having to spend that extra time just tracking project tasks. Also, how can anyone get any information about the project status from such a cumbersome dashboard ? </p><p>Unfortunately I have seen disasters like this over and over again throughout my career. Most project status dashboards that I have seen are poorly maintained, and developers require push to keep updating them. </p><p>Here is what I learned about how to make project status tracking, simple, efficient and meaningful.</p><p><strong>Status Dashboard will not provide you answers to all your life's problems</strong></p><p>The first thing to understand is that a status dashboard is supposed to only provide you status of the project, its tasks and anything critical that the team needs to be focused on. If, you need more answers it can be tracked as comments, discussions on specific tasks, and anyone who wants to know those answers will have to go to that detailed level to get them. </p><p>The problem starts when people start adding more columns to a project status dashboard to avoid spending the time &amp; effort, trying to dig down into what work has gone into a task. And like that to save  5 mins of someone's time, your team is spending 10 hours maintaining a status dashboard. When you look at those numbers, isn't the solution obvious !!!</p><p>Keep your project status dashboard simple, and have a comments/discussion board linked to each task for tracking more details. Updating just the status of a task should be the priority, so that your team can brace for any issues. The easier you make it for your team, the better situation you will be in.</p><p><strong>Use status dashboards to solve issues, not lay blame</strong></p><p>The status dashboard should be used to quickly identify issues, and brace for any fallout because of those issues. But, in most cases they become a tool for laying blame of one person or team. This then leads to team members trying to move the hot potato off their plate by creating a complex dashboard, that can lay blame on someone else for the smallest issues. This then leads to people spending more time trying to move the blame around, than doing actual work.</p><p>Successful, teams only use status dashboards &amp; meetings to highlight issues and how to solve them, rather than trying to find some to take the fall for that issue. </p><p><strong>Automate</strong></p><p>The more you can automate status tracking, the easier it will be for you to maintain it. Also, your status will always be up-to date, and give you the exact picture. </p><p>I have consistently used, code pipelines to track which environment a feature/bug has moved to. It gave me an up-to date, and real picture rather than relying on individuals to update a dashboard. </p><p>There are enough tools, and automation solutions in the market to help to automate your workflow.</p><p>Below are a few tools, that I have used to achieve this :</p><ol><li><a href="https://www.atlassian.com/">Atlassian JIRA &amp; BitBucket</a> : We were able to automate our development process to a large extent, by tracking code commits, and their movement from one branch to another.</li><li><a href="https://monday.com/">Monday.com</a> : There are a lot of good integrations, and automation options available on Monday.com which makes the process of status tracking easy.</li><li><a href="https://zapier.com/">Zapier</a> : Zapier has a lot of options for integrating different systems. It helps if you want to track status of things like support tickets, customer queries etc. from different platforms into a single place. </li></ol><p><strong>Iterate</strong></p><p>Like everything else in life, a status dashboard will also never be perfect. You will have to continuously iterate upon it to make sure it evolves with your project and team. </p>]]></content:encoded></item><item><title><![CDATA[Don't punish failure embrace it !!]]></title><description><![CDATA[A lot of organizations want to be innovative but they want to punish people when they fail, which is counterproductive for innovation. Good innovation only comes when your team is not afraid to fail, when they know they can push the boundaries without worrying about what happens if they fail. ]]></description><link>https://nerdyandnoisy.com/dont-punish-failure-embrace-it/</link><guid isPermaLink="false">5f6c9d46b38a4e511fd66fe9</guid><category><![CDATA[Thoughts]]></category><category><![CDATA[Management]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Thu, 24 Sep 2020 19:42:43 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1523291681574-58c8ff48f868?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1523291681574-58c8ff48f868?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Don't punish failure embrace it !!"><p>All of us have failed more than once in our lives, at a personal level, professional level or both. I myself have learned a great deal from my failures in life. The best lesson though has been, is no matter how hard you try there is a chance that you will fail, and the best thing you can do is embrace when that happens. Get up, make sure you understand what went wrong, and try to not make the same mistake again. </p><p>It's the same when it comes to organizations. A lot of organizations want to be innovative but they want to punish people when they fail, which is counterproductive for innovation. Good innovation only comes when your team is not afraid to fail, when they know they can push the boundaries without worrying about what happens if they fail. </p><p>So, how do you build a culture that supports innovation and embrace failure ? </p><p><strong>Teams don't succeed or fail because of one person</strong></p><p>When a team fails, more often than not it is a collective failure. So, trying to find one person to pin it on is the worst way of handling failure. The sooner you understand this as a leader, the faster your team can move on to being a high performing, innovative team. </p><p>A good example of this is, when say the team pushes a software release to production which has a bug that got missed. Generally, everyone is quick to pin it on the QA engineer, or the developer who worked on it. But, if you think about it, first the developer who wrote the code didn't take care of the scenario, then the person who wrote unit test cases failed to identify the scenario, then the person who reviewed the code failed to identify the scenario, and then then the QA engineer failed to test the scenario. Whose mistake was it ? Everyone involved in the process. </p><p>You as a leader have to build a culture, where the whole team accepts responsibility for a failure. So, why can't most organizations and teams do it. Simple when something fails, they get into a blame game !!</p><p><strong>Stop the blame game, introspection is more productive</strong></p><p>The first thing to change is get rid of the blame game. It is a waste of time, and builds a toxic culture. It builds a culture where no one wants to take ownership, and everyone is trying push the hot potato of their plate. </p><p>Also, this culture leads to people hiding their failures because they are worried about the repercussions. And, by the time you as a leader find out that something is wrong, it might be too late to fix things. </p><p>Instead, create a culture where the team introspects each failure, documents it and learns not make the same mistake again. This makes sure that with time, you iron out major issues, and become a better, more innovative team. It also leads to more collaboration within the team, because everyone is focused on the goal without worrying who will be punished if they fail.</p><p><strong>Reward efforts, not just outputs</strong></p><p>Another thing to understand is that just because someone failed a few times does not mean their effort is less than someone who did it in less tries. You have to build a culture of rewarding efforts, and not just outputs. </p><p>Now, this is not a very easy thing to do, because you have to build processes around measuring effort, along with output. But, trust me that effort of coming up with the right process and tools, will pay off in the long term. It will lead to people picking up even the hardest tasks without hesitation, because they know their efforts will not go in vain even if they can't get the desired output. </p><p>Also, when you only reward outputs, you are sending a message that don't pick up something where you are not sure of delivering. Innovation, does not work that ways, and also change is inevitable. Every team, big or small will encounter a scenario where they will have to look at doing something they have never done before. More often than not, teams that have the culture of rewarding efforts and not just outputs will succeed at embracing this change. </p><p><strong>Track Learn Optimize</strong></p><p>Next part of the process needs to be a robust mechanism to track, introspection meeting outputs, and learnings every time you encounter a failure. This helps in obviously  making sure new members of the team know the pitfalls and old members do not repeat the same mistake.<strong> </strong>But more importantly, for the team to identify process gaps, and places where you could do more optimization either by process, or technology to make sure you avoid those issues. </p><p>A good example of these are coding standards, and static code analysis during the check-in process. Those are common places where programmers make mistake, and by optimizing the process and tailoring it to your product you can make sure that mistakes are not repeated. </p><p>As you and your team get better at this, you will see faster onboarding times for new members, reducing common pitfalls and an increase in overall productivity of the team.</p><p></p>]]></content:encoded></item><item><title><![CDATA[Hiring right]]></title><description><![CDATA[Hiring for any company is a critical task, and a wrong hire will cost more in the long term. These are some my experiences about how to hire right.]]></description><link>https://nerdyandnoisy.com/hiring-right/</link><guid isPermaLink="false">5f5a6f8db38a4e511fd66e6c</guid><category><![CDATA[Startup]]></category><category><![CDATA[Technology]]></category><category><![CDATA[Hiring]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Fri, 11 Sep 2020 09:37:30 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1518893494013-481c1d8ed3fd?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1518893494013-481c1d8ed3fd?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Hiring right"><p>Hiring for any company is a critical task, and a wrong hire costs much more in the long term. Over the course of my career I have hired close to a 100 people for various software engineering positions, and I have had my share of challenges. It has taken me a  lot of hit &amp; trials to get to the right approach. </p><p>Below is how I approach hiring for my software engineering teams.</p><p><strong>Resumes are a waste of time !!</strong></p><p>Resumes are good way to summarize someones experience but there is no way to objectively judge any person by their resumes. I have tried bunch of tools to filter candidates based on resumes, but eventually I have realized that resumes are not something anyone should be looking at. It's just a waste of time !!</p><p>So, now I don't look at them in most cases. Even when I do, I don't judge anyone's skills by the resume. At most the resume tells me how good the written communication of the person is. I much rather prefer candidates send me the link to their GitHub public repository, where I can look at the actual code they have written.</p><p><strong>Judge people on practical skills they have </strong></p><p>At the end of the day the primary goal of a good software engineer, is that they should be able to write code, and have an aptitude for problem solving. </p><p>If a candidate has  a repository, where I can look at samples of their codes, they go on the top of my pile for people I would like to talk to. I will go ahead and look at all the code that is in their repository, and judge them on the quality of that code. </p><p>Next step is talking to them, my first conversation is generally 30 mins, just to understand the candidates communication skills, and their ability to solve problems. I would generally use an example from any of the projects they have worked on, change some requirements and see if they can think of how they would approach that change from a solution perspective. I don't look for right answers, just an ability to think and not be stumped by a change. </p><p>Why is this important ? Because I am big believer in the fact that the best output for any software product comes when everyone involved can bring some ideas to the table. </p><p><strong>Show me the code !!</strong></p><p>Once I want to move forward with a candidate, I would typically give them a problem statement for which they have to write code. </p><p>For interns, freshers, and junior developers I prefer using my online testing platform <a href="https://www.quodeit.com">QuodeIT</a>. It is simple to use, and gives me quick results of how many test cases were passed for each code submission. That is all I want from a junior developer, I don't expect them to know architecture or tons of technologies. I expect them to know 1 language, and be able to write code in that language to solve a simple problem, thinking through all the scenarios from a unit testing perspective.</p><p>For senior developers, I would give them a bigger problem for which they would have to think about different aspects like architecture, logging, interaction between layers etc. I expect senior developers to be someone who can independently take day to day architecture decision, and help junior members of the team with their issues. I would ask them to first give me an estimate of when they would be able to submit the code. This tells me if they are good at planning, and can they stick to the deadlines they commit to. I don't reject people if they are delayed, as long as they let me know. Also, I ask them to create a README file for the project, which should cover how to setup the project and run it. This tells me about their communication skills, and the ability to articulate their thoughts. This is an important skills for people you would want to groom as leaders in your engineering org. </p><p><strong>Code review </strong></p><p>Then I do an interactive code review over a call. Where I would go through their code and ask questions about why did somethings. Also, challenge them on their decisions and hear what they have to say about it. </p><p>For senior developers this process goes further to challenge them on their choice of tech stack, frameworks etc. It's important for me to know their opinions and thought processes. I don't mind people having strong opinions about technologies, as long as they are patient listeners about conflicting opinion. This becomes a good thing when the team is making decisions. </p><p>The code review process is the longest of my whole hiring process, because this is the time where I can accurately judge the person. Sometimes, I would ask the person to change some small feature,  just to again make sure their ability to think and problem solve. </p><p><strong>Culture</strong></p><p>I always say that you should not hire a person who is not a cultural fit, no matter how good they are. A wrong cultural fit will do more harm to your team, than the value they can add. I have seen this in many organizations, where people who do not fit the culture are hired which ends up costing more to the team. </p><p>Earlier I used to do a detailed face to face interview, to try to judge the person culturally. But as technology has evolved, I was able to productize this as part of our <a href="https://www.quodeit.com">QuodeIT</a> platform. It also makes my decision making very objective, as opposed to just depending on my gut feel. </p><p><strong>This seems to be a lot work !!</strong></p><p>Yes, hiring right is a lot of work. It's not easy, and you should spend that time to make sure you build a team that can deliver for you. The idea for me is simple I spend time hiring the right person, in the longer run I will not spend time/money in trying to get the best work out of them. </p><p>Hirings should never be a quantity game, its about quality. 1 right hire, is worth much more than hiring 10 wrong employees. </p><p>As the world changed a few months back, and organizations had to adapt to a new completely remote work environment, I saw a lot of organizations buying remote employee monitoring software. The spend on those softwares is actually one of the long term costs of wrong hirings. As, I said when I started this post cost of a wrong hiring is much more in the long term !!</p>]]></content:encoded></item><item><title><![CDATA[My experience building a technology product for a startup]]></title><description><![CDATA[My transition from being technology leader at an investment bank to CTO of my startup was a challenging one. Here is what I learned from the experience.]]></description><link>https://nerdyandnoisy.com/you-are-overthinking/</link><guid isPermaLink="false">5f514acbb38a4e511fd66d4f</guid><category><![CDATA[Startup]]></category><category><![CDATA[Technology]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Thu, 10 Sep 2020 13:47:14 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1519389950473-47ba0277781c?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1519389950473-47ba0277781c?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="My experience building a technology product for a startup"><p>Last week, I was helping a startup founder review his technology architecture and helping them move cloud providers. One of the points that came up in the review, was how do I make sure this platform scales. It sent me thinking to my first year as a CTO for tech product startup. I had just left my job a large investment bank, where I had built large scale solutions. Definitely I was feeling confident that I could build a good scalable product. 4 months into the task, I realized I was so wrong !!</p><p>Here is what I learned from that experience. </p><p><strong> Your product will evolve very quickly </strong></p><p>When you are working for a large established investment you have the liberty of spending a lot of time talking to all your customers, and then have detailed requirements of what you want to build. This is something that most tech startups don't have when they start working on their product. Which means that from MVP to a product that is accepted by your consumers it might change completely. We went through 5 iterations of the product before we found the right solution for the problem that we were trying to solve. </p><p>So your technology and architecture have to evolve with the product, and it has to evolve quickly. If you build something very rigid, you might have to start over when iterating on a product, which is what we had to do when we went onto our 2nd iteration. We were over confident about our MVP, and we built it so rigid that we had to go back to the drawing board for our 2nd iteration. </p><p><strong>Always consider your team size, and money when designing the architecture</strong></p><p>When I was building platforms for an investment bank, team size and hardware capacity were never an issue. You can build a complex architecture, because you have the money to back you up. </p><p>In the startup world its not the same. Your resources are limited, and you have to adjust your approach accordingly. E.g. I had a dedicated DevOps team always during my career so I depended on them when it came to hardware decisions, security and scaling. This is not something I had the liberty of when we were building our first few iterations, so I had to evolve into learning those things, and picking the right tools, hosting and architecture so that these things don't become a burden on the team as we are moving forward.  </p><p>Cloud provider and scale of the hardware is also something you need to consider. Again money will be limited, so you need to start small, constantly monitor and scale accordingly where required. Things that I had no experience on, when I started this. Somethings I learned the hard way, like over procuring cloud servers and then realizing that we don't have enough users, and we need to be more agile in terms of scale as well. </p><p><strong>End users don't care if your tech stack is future ready</strong></p><p>Quite often I found myself getting drifted into building the best technology solution without thinking of the actual end user. As I spoke to more people I realized a lot of tech background founders had the same problem. We focus to much on which tech stack, what framework, what database etc. Although these are important decisions, but in your early days its more important to have stable working product that you initial users like. It should be something that is easy to use, solves the end users problems and something that you can quickly iterate on. Till you reach a critical mass of users focus more on user experience, than on what tech stack is future ready. </p><p>Another thing to consider is how easy it is to find good talent in the tech stack you are about to use. As you build your engineering team, you will good talent and you will need them to get accustomed to your stack quickly so that they can start helping out. As a startup you will not have the liberty of a long onboarding period, so if your application is too complex scaling your engineering team will become a challenge that might stop you from growing fast. </p><p><strong>Build something that a small engineering team can manage</strong></p><p>One of my biggest mistakes was I looked at the Googles, Netflixes and Facebooks of the world to find good design patterns and how they were doing it. Why was it a mistake, simple they have 100s of engineers to manage single products/services, while I had 5 !! So where things like microservices might work for them, it became a disaster for me because managing &amp; maintaining them was a huge cost. I could not afford to keep multiple versions of the services running, for me the changes had to move together with every piece in sync, else I would end up spending more cloud costs. </p><p>Never look at organizations that are not at your scale or size for technology architectures. It will most of the times end up in unmanageable product, which will require more money to maintain than you can afford. </p><p><strong>Do what makes sense for you </strong></p><p>Overall what these last 4 years have taught me is that my product is unique, my requirements are unique, and I have boundaries that I need to work within so I will have to do what makes sense for my product. My end users don't care if my UI framework is the coolest one in the industry, they care that their experience is nothing like any other product</p><p>Also, for me I can manage scale because mine is B2B product so I will always know how many licenses are being sold and how many new users I should expect to be on the platform. I can plan easily, and I don't have to worry too much about a sudden spike, so why worry about that instead I can spend energy on something else. </p><p>Finally, always remember when you have 1 Million users, you will have enough money in the bank to hire people smarter than you to fix any scaling issues that you might have !!!</p>]]></content:encoded></item><item><title><![CDATA[Multi Tasking is not cool]]></title><description><![CDATA[Multi tasking is not as cool as it looks, and the best output only comes from focus. ]]></description><link>https://nerdyandnoisy.com/multi-tasking-is-not-cool/</link><guid isPermaLink="false">5f513bd0b38a4e511fd66c5d</guid><category><![CDATA[Thoughts]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Fri, 04 Sep 2020 13:39:58 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1504507926084-34cf0b939964?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1504507926084-34cf0b939964?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Multi Tasking is not cool"><p>Some of my best work has come when I am focused. For a long time I thought of this as a shortcoming, because everyone around me was able to multitask, so that felt like a required skill. As, I have matured I have come to realize that multi tasking is not as cool as it looks, and that best output only comes from focus. </p><p>It becomes even more important as a founder for me to give focus to things that are important, and ignore all the white noise, because the output of the business depends on my decisions.</p><p>The book "It Does not have to be crazy at work" gave validation to this idea of mine. I would recommend reading it if you have the time. </p><p><strong>Time is Money</strong></p><p>You should value your time like you value money. Most of us tend to see time as an infinite resource, when the fact is that you probably have only 8-9 hours of good productive hours in a day. Which means you have to spend them very judiciously.</p><p>When you are constantly multi tasking, you are wasting precious time trying to context switch. Time that can be spent at the task at hand without having to context switch. Also, time spent focusing and making a good decision today, can save you a lot of money tomorrow, than making a decision just because you were pulled into a meeting without enough time to think about it. </p><p><strong>14 hours days are not sustainable</strong></p><p>To be honest I have done my fare share of crazy work hours and sleepless nights. When I introspect, none of them lead to good quality output. I have created some of the worst technical debts working at 2 AM high on caffeine. Now when I look at some code and ask why did I do that, the late night code check-in timestamp is probably the answer.</p><p>There is a reason that 7-8 hours of sleep is recommended for humans. Your mind needs rest, for it to make sound logical decisions. When you build a culture that expects people to constantly work long hours, eventually their productive and quality will go down. </p><p><strong>You are measuring the wrong output</strong></p><p>So, if long hours are not good for productivity and quality, why do a lot organizations still embrace it as a culture ? My simple answer, they are measuring the wrong output. </p><p>I have worked with enough managers, who used to measure productivity in terms of number of hours spent in office, and then wonder why the project had delays or so many bugs !! Simple because your measure of productivity does not guarantee efficient and quality output. The goal should be efficiency and quality of the output, than something as subjective as productivity.  If someone can deliver the most efficient and quality output with the time/cost constraints, why does it matter if they wrote 10 lines or 1000 lines of code, or if they spent 8 hours or 14 hours in office. </p><p><strong>The calendar, emails and  chat hell !!</strong></p><p>All the technology that has been built around communication, was supposed to make our life better. But, I think all it has done is make it worse. Why? Because people have stopped considering that the person on the other end of the communication might be focused on something else. Everyone expects that they send a message and get a response now. </p><p>Calendar invites are a probably the most abused of these technologies. Just because my calendar shows I am free 30 mins from now, does not mean you go ahead and schedule a meeting. For the most part I do no accept meeting invites that are scheduled the same day unless it is something extremely critical. Everything else can wait a few hours. </p><p><strong>Do you really need a meeting for this ?</strong></p><p>Meetings are another aspect of the modern work environment, which I think force people to lose focus, and try to be part of a discussion at a fixed point in time. A meeting which does not give its participants enough time to think before the discussion, and that ends without a decision is a waste of everyone's time. Also, a decision cannot be having another meeting to discuss the topic further !!!</p><p>Think before you schedule a meeting. If your discussion is not world ending, and you want people to think before they provide ideas, maybe give them time to respond to an email when they have bandwidth. You will probably get better output through an email, than the false sense of urgency to make a decision that a meeting forces. And then use a quick meeting to reach a consensus after you have had a thorough discussion about the topic over emails. And always end the meeting with a concrete decision, and next steps. </p><p><strong>Todo Lists do not work !!</strong></p><p>A list of things to do in the day gives me anxiety. I tried it for sometime to plan my day with lists, and tasks etc. What I realized eventually is that some tasks were either constantly getting pushed from one day to another or I would take shortcuts just because I could strike tasks out of my list. The reason for this is that Todo lists give a false sense of accomplishment by telling you that you have checked off all your tasks, and hence driving the goal to finish the tasks and not quality. It also forces you to meticulously plan each task, which is not practical. So, you plan your day and then realize that some task took more time, and that screws your plan for the day and makes you feel bad about that unfinished list at the end of the day.  </p><p>So, what do I do now. I divide my into long continuous stretches of time where I just focus on one task at hand. That helps me focus on the task at hand, and make sure it is completed before I move onto the next task. Since I made this switch, I have been getting more done but most of all the quality of my output has increased and stress levels have gone down !!!</p><p><strong>Let people get into their zone </strong></p><p>There is a reason why most great artists talk about getting into their zone before they produce a masterpiece. It is important for people to focus on the task at hand, without distractions to deliver the highest quality output. So, as as leader one of your primary job should be to let people get into their zone by giving them long stretches of focused work hours. Time when there are no meetings, no emails, no multitasking, just getting the job at hand done. </p><p>Once you start doing it, people will get better at planning their work and deliver high quality results efficiently. </p>]]></content:encoded></item><item><title><![CDATA[Coding - How something fun to do became a career !!!]]></title><description><![CDATA[Coding is one skill that I learned early in my life, and have never fallen out of love with it. Why? Because I still find it fun !!]]></description><link>https://nerdyandnoisy.com/how-i-started-coding/</link><guid isPermaLink="false">5f3d8db1f4c4cb113c4742e9</guid><category><![CDATA[Technology]]></category><category><![CDATA[Random]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Tue, 18 Aug 2020 23:14:06 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1461749280684-dccba630e2f6?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Coding - How something fun to do became a career !!!"><p>I am one of those people, who believes coding is more art than science. I like to think that there is an inherent level of creativity that is required to be good at coding. I enjoy it till date, because I feel happy when I able to create something new through my skills. From my school days, programing was the only thing no one forced on me to learn, so I learned it at my own pace. That I think became the biggest reason of why I enjoyed it, because there was no pressure of marks, or deadlines. It was the first sense of independence that I experienced.</p><p>When I first started coding, a lot of people did not believe that technology will become so important in our lives and that coding will become a much sought after skill.</p><p>So how did it all start ?</p><p><strong>My dad - The visionary !!</strong></p><p>When my dad bought a computer for our home (we were one of 2 homes that had a computer at home in my town), everyone was like 'Why do you need a computer at home ?'. His answer was computers will run the world one day, and I want my kids to get used to them. A lot of people thought that was not possible, and mocked him, saying that schools have computer labs, if he wants me to learn computers 45 mins once every 2 weeks should be good enough. 30 years later I am glad he did not listen to them.</p><p>The computer at home gave me access to a toy that I could play with and would never get bored of. Something I got better at every time I spent time on it. </p><p>The first thing I wanted to do was play games on it. My dad showed me Wolf 3D, and I was hooked. Then he was like if you can turn on the computer find where the game is, and figure out how to start it, you can play it. It was DOS based system (4 MB of hard disk space), so to do that I had to learn DOS command line interface, and basic commands. At first I could not figure it out, one time I ended up deleting directories in DOS. We had to reinstall the operating system !! My dad was not angry though, he taught me how to install the OS, and he was like from now on you should be able to it yourself. I can't remember how but eventually I was able to figure the DOS command prompt interface, open directories and run DOS commands. Spent long hours playing Wolf 3D, after that. </p><p>Eventually I got interested in writing code in Basic. My first program was simple calculator for adding &amp; subtracting numbers. It was fun, writing a few lines and seeing an idea come to life. This is what made me keep going back, and trying new things.</p><p><strong>The first coding night out</strong></p><p>I still remember, it was a project submission for my class 10th computer project. I had 2 options, take the easy way out i.e. copy it from someone, or build something on my own. I wanted to explore how you could build a full Hotel Management System, so I decided to build something. Obviously, I had grossly underestimated the work required, so I reached out to the only other person I knew could help me finish it, my father. </p><p>We spent the whole night writing code for the project, and then printing out the code for the submission report (Yeah, we had submit hard copy of the code, and its output !!). That feeling of accomplishment, along with exhaustion from working all night, is something that still pushes me till today.</p><p><strong>Windows 95, internet and my first deployment</strong></p><p>The next phase in my learning came with Windows 95 and the dial up modem. I was fascinated by websites, and I wanted one as well !! Time to learn HTML. </p><p>Took me about a week to have a basic page ready, and then create navigation to other pages. But this is too boring, just plain paragraphs and tables. How do these other sites add colors, animations and jazz ? Time to learn stylesheets.</p><p>Another week, and the website was looking good with loads of colors, blinking links and marquees (I cringe about that design now when I think about it !!). Then I found some cool websites which had funky things, like some popovers when you took the mouse over an image. And I wanted that on my website as well. This was the first time I learned that I could right click on any website and look at their source. I started copying pasting styles, javascript from other sites and adding it to my site. </p><p>Once the site was done, I wanted to show it to everyone. So, for the first time in my life I hosted something on a server. That was amazing feeling to see something you created on your computer come to life on the internet with everyone having access to it.</p><p><strong>Computer Science, the only thing I wanted to do</strong></p><p>When it was time for me to start college, we had to pick our top 3 priorities for a branch of engineering. Everyone was filling the priorities based on career prospects, and I had picked only 1, Information Technology, my only other option was drop off and try again next year. My choices were binary even then !!!</p><p>By the time I completed the second semester, I was very clear in my head, that this is something I enjoy, and I wanted to learn more about it. So, as we started getting options to pick our elective courses, people were thinking about which ones would get them better grades, and I just picked subjects that interested me. I was one of only 5 people in the AI course one semester, and had to talk to the dean to make sure the management did not cancel the course due to low registration.</p><p><strong>My first job</strong></p><p>By the time I finished college, I had an offer from one of the large IT outsourcing firms in India. I was happy that I had a job, but I also was a little skeptical. My interview did not talk anything about the programing skills I had learned, and I felt like I was ready to work on live projects, as opposed to going into another 6 months of training.</p><p>So, when the opportunity presented itself in the form of niche consulting company which I had heard did cool tech work for its clients, I decided to go for the interview. It was a coding test, followed by a tech interview. The interview experience was so fulfilling, that I was sure of taking the job if I got selected, and I did.</p><p><strong>My first project</strong></p><p>I still remember when I first started on the project, I looked at the code base and was just amazed at the shear size of it. Then I started digging, and realized I could not figure out most of the stuff !! I was like damn, this seems harder than I thought. It took me almost a week to find my way around it, a week that felt same as what I felt when I first started using a computer. Then a week later, I submitted my first check-in for review, and deployed my first code for QA testing.</p><p>14 years since, I have been writing code every single day. And I cannot think what life would have been like if I was not doing this.</p>]]></content:encoded></item><item><title><![CDATA[Building Your First Tableau Extension using ReactJs]]></title><description><![CDATA[In this blog I will explain how to build your first Tableau extension using ReactJs]]></description><link>https://nerdyandnoisy.com/building-your-first-tableau-extension/</link><guid isPermaLink="false">5f3d8db1f4c4cb113c4742e7</guid><category><![CDATA[Technology]]></category><category><![CDATA[Tableau]]></category><category><![CDATA[ReactJs]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Thu, 19 Mar 2020 21:40:46 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1543857778-c4a1a3e0b2eb?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1543857778-c4a1a3e0b2eb?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Building Your First Tableau Extension using ReactJs"><p>For the last one month I have been looking at Tableau extensions as a way to add more interesting analytics for a client's dashboards. They are great tools to enhance the functionality of existing dashboards by adding  visualizations that are not provided by Tableau. In this blog I will explain how to build your first Tableau extension using ReactJs</p><p><strong>Development Environment Setup</strong></p><!--kg-card-begin: markdown--><p>Before starting with Tableau extension development, you will need to setup your development environment.<br>
Following are some of the tools you will need to setup :</p>
<ul>
<li>NodeJs : I will be using NodeJs version &gt;= 12 for this tutorial. You can download NodeJS package for your operating from the below link.
<ul>
<li><a href="https://nodejs.org/en/download/">https://nodejs.org/en/download/</a></li>
</ul>
</li>
<li>Yarn (Optional) : I prefer yarn over npm for package management. Just a personal preference, you can use either.
<ul>
<li><a href="https://classic.yarnpkg.com/en/docs/install">https://classic.yarnpkg.com/en/docs/install</a></li>
</ul>
</li>
<li>Code Editor : I use WebStorm to setup and edit my NodeJS code. You can any editor which has support for JavaScript code editing (e.g. Sublime Text, Atom, Visual Studio Code)</li>
</ul>
<p>Once you have all these tools setup on your machine, we are all set to start building our first Tableau extension.</p>
<!--kg-card-end: markdown--><p><strong>Create a new ReactJs App</strong></p><p>Run the following command in a terminal to create a new ReactJs app</p><!--kg-card-begin: markdown--><pre><code class="language-command-line">npx create-react-app first-tableau-extension
</code></pre>
<!--kg-card-end: markdown--><p>Once the script finishes running go into the new first-tableau-extension directory </p><!--kg-card-begin: markdown--><pre><code class="language-command-line">cd first-tableau-extension/
yarn start
</code></pre>
<!--kg-card-end: markdown--><p>The yarn command should give an output similar to the one below </p><!--kg-card-begin: markdown--><pre><code class="language-command-line">Compiled successfully!

You can now view first-tableau-extension in the browser.

  Local:            http://localhost:3000
  On Your Network:  http://172.31.98.101:3000

Note that the development build is not optimized.
To create a production build, use yarn build.
</code></pre>
<!--kg-card-end: markdown--><p>Open a browser and enter the url <a href="http://localhost:3000">http://localhost:3000</a> in it. You should see the following output in the browser.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://nerdyandnoisy.com/content/images/2020/03/Screenshot-2020-03-15-at-11.13.32-PM.png" class="kg-image" alt="Building Your First Tableau Extension using ReactJs"><figcaption>ReactJs app is up and running</figcaption></figure><p>Now that we have successfully setup the ReactJs app we will go ahead and start adding features for Tableau extension. </p><p><strong>Add copyfiles node package to the project</strong></p><p>We will need the copyfiles node package for adding the tableau extension library when we build the project</p><!--kg-card-begin: markdown--><pre><code class="language-command-line">yarn add copyfiles
</code></pre>
<!--kg-card-end: markdown--><p><strong>Adding Tableau extension library to the project</strong></p><p>Create a new folder called lib under the tableau extension root directory.</p><p>Download tableau.extensions.1.latest.min.js from <a href="https://github.com/tableau/extensions-api/tree/master/lib">https://github.com/tableau/extensions-api/tree/master/lib</a> and place it in the lib directory</p><p>Update the package.json file to change the start and build scripts, to copy the tableau extension library JS into the public folder before starting the server/building the package. Below are the changes that need to be done to start and build scripts.</p><!--kg-card-begin: markdown--><pre><code class="language-json"> &quot;start&quot;: &quot;copyfiles -f lib/tableau.extensions.1.latest.js ./public &amp;&amp; react-scripts start&quot;
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-json">&quot;build&quot;: &quot;copyfiles -f lib/tableau.extensions.1.latest.js ./public &amp;&amp; react-scripts build&quot;
</code></pre>
<!--kg-card-end: markdown--><p>The updated package.json should look like the one below.</p><!--kg-card-begin: markdown--><pre><code class="language-json">{
  &quot;name&quot;: &quot;first-tableau-extension&quot;,
  &quot;version&quot;: &quot;0.1.0&quot;,
  &quot;private&quot;: true,
  &quot;dependencies&quot;: {
    &quot;@testing-library/jest-dom&quot;: &quot;^4.2.4&quot;,
    &quot;@testing-library/react&quot;: &quot;^9.3.2&quot;,
    &quot;@testing-library/user-event&quot;: &quot;^7.1.2&quot;,
    &quot;copyfiles&quot;: &quot;^2.2.0&quot;,
    &quot;react&quot;: &quot;^16.13.0&quot;,
    &quot;react-bootstrap&quot;: &quot;^1.0.0-beta.17&quot;,
    &quot;react-dom&quot;: &quot;^16.13.0&quot;,
    &quot;react-scripts&quot;: &quot;3.4.0&quot;
  },
  &quot;scripts&quot;: {
    &quot;start&quot;: &quot;copyfiles -f lib/tableau.extensions.1.latest.min.js ./public &amp;&amp; react-scripts start&quot;,
    &quot;build&quot;: &quot;copyfiles -f lib/tableau.extensions.1.latest.min.js ./public &amp;&amp; react-scripts build&quot;,
    &quot;test&quot;: &quot;react-scripts test&quot;,
    &quot;eject&quot;: &quot;react-scripts eject&quot;
  },
  &quot;eslintConfig&quot;: {
    &quot;extends&quot;: &quot;react-app&quot;
  },
  &quot;browserslist&quot;: {
    &quot;production&quot;: [
      &quot;&gt;0.2%&quot;,
      &quot;not dead&quot;,
      &quot;not op_mini all&quot;
    ],
    &quot;development&quot;: [
      &quot;last 1 chrome version&quot;,
      &quot;last 1 firefox version&quot;,
      &quot;last 1 safari version&quot;
    ]
  }
}

</code></pre>
<!--kg-card-end: markdown--><p>Finally go public/index.html and add the below under the head tag, to import the tableau extension library when serving/building the project.</p><!--kg-card-begin: markdown--><pre><code>&lt;script src=&quot;%PUBLIC_URL%/tableau.extensions.1.latest.min.js&quot;&gt;&lt;/script&gt;
</code></pre>
<!--kg-card-end: markdown--><p><strong>Creating extension configuration file</strong></p><p>Tableau extensions require a .trex file to load the configuration of the extension into the Tableau dashboard. We will now create the .trex file for our extension. Create a file named first-tableau-extension.trex in your extension project directory. </p><p>Copy the below contents into your trex file. You can then customize properties like author, extension id etc.</p><!--kg-card-begin: markdown--><pre><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;manifest manifest-version=&quot;0.1&quot; xmlns=&quot;http://www.tableau.com/xml/extension_manifest&quot;&gt;
    &lt;dashboard-extension id=&quot;com.nerdyandnoisy.tableau.extension.first&quot; extension-version=&quot;0.1.0&quot;&gt;
        &lt;default-locale&gt;en_US&lt;/default-locale&gt;
        &lt;name resource-id=&quot;name&quot;/&gt;
        &lt;description&gt;First Tableau Extension&lt;/description&gt;
        &lt;author name=&quot;Sunny Dave&quot; email=&quot;sunny.dave@nerdyandnoisy.com&quot; organization=&quot;Nerdy And Noisy&quot;
                website=&quot;https://www.nerdyandnoisy.com&quot;/&gt;
        &lt;min-api-version&gt;1.0&lt;/min-api-version&gt;
        &lt;source-location&gt;
            &lt;url&gt;http://localhost:3000/index.html&lt;/url&gt;
        &lt;/source-location&gt;
        &lt;icon&gt;iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAlhJREFUOI2Nkt9vy1EYh5/3bbsvRSySCZbIxI+ZCKsN2TKtSFyIrV2WuRCJuBiJWxfuxCVXbvwFgiEtposgLFJElnbU1SxIZIIRJDKTrdu+53Uhra4mce7Oe57Pcz7JOULFisViwZ+29LAzOSjQYDgz1ZcCvWuXV11MJpN+OS/lm6179teqH0yDqxPTCyKSA8DcDsyOmOprnCaeP7459pdgy969i0LTC3IO/RQMyoHcQN+3cnljW3dNIFC47qDaK3g7BwdTkwBaBELT4ZPOUVWgKl4ZBnjxJPUlMDnTDrp0pmr6RHFeEjjcUUXPDGeSEwDN0Xg8sivxMhJNjGzbHd8PkM3eHRfkrBM5NkcQaY2vUnTlrDIA0NoaX+KLXFFlowr14tvVpqb2MICzmQcKqxvbumv+NAhZGCCIPwEw6QWXKYRL/VUXO0+rAUJiPwAk5MIlgVfwPjjHLCL1APmHN94ZdqeYN+NW/mn6I4BvwQYchcLnwFhJMDiYmlRxAzjpKWZkYkUCcZ2I61wi37tLbYyjiN0fHk5Oz3nGSLSzBbNHCF35R7f6K1/hN9PRhek11FrymfQQQKB4+Gl05P2qNRtmETlXW7e+b2z01dfycGNbfFMAbqNyKp9Jp4rzOT8RYFs0njJkc2iqsCObvTsOsDWWqA5C1uFy+Uz/oXJeKwVT4h0RmPUXhi79vuC0Ku6yOffTK3g9lfxfDQAisY516sg5kfOCiJk7HoLt2cf9b/9LANAc7dznm98PagG1fUOZ9IP5uMB8Q4CPoyNvausapkTt3rNMuvdf3C/o6+czhtdwmwAAAABJRU5ErkJggg==&lt;/icon&gt;
    &lt;/dashboard-extension&gt;
    &lt;resources&gt;
        &lt;resource id=&quot;name&quot;&gt;
            &lt;text locale=&quot;en_US&quot;&gt;First Tableau Extensions&lt;/text&gt;
        &lt;/resource&gt;
    &lt;/resources&gt;
&lt;/manifest&gt;
</code></pre>
<!--kg-card-end: markdown--><p><strong>Update the ReactJS code to interact with the Tableau dashboard</strong></p><p>For the UI of this extension we will be using the react-bootstrap package. You can use the below yarn command to install the react-bootstrap package.</p><!--kg-card-begin: markdown--><pre><code class="language-command-line">yarn add react-bootstrap
</code></pre>
<!--kg-card-end: markdown--><p>The thing to note when creating extensions is that the only way to access data is through an existing sheet on the dashboard. So, next we will need to create a component which can be used to select the sheet which will be used to access to the data. </p><p>Let's start by creating a JavaScript file named SheetListComponent.js. In the code below we are iterating through all the sheets in the dashboard and creating buttons for each sheet, which can then be used by the user to select the sheet they want to use for getting the data for our extension. </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">import React from 'react';
import { Button } from 'react-bootstrap';

function SheetListComponent(props) {
    const makeSheetButton = (sheetName) =&gt; {
        return (
            &lt;Button key={sheetName} variant='light' block
                    onClick={() =&gt; props.onSelectSheet(sheetName)}&gt;
                {sheetName}
            &lt;/Button&gt;
        );
    }

    const sheetButtons = props.sheetNames.map(sheetName =&gt; makeSheetButton(sheetName));

    return (
        &lt;div&gt;
            {sheetButtons}
        &lt;/div&gt;
    );
}

export default SheetListComponent;
</code></pre>
<!--kg-card-end: markdown--><p>Next up we will creating a small component which will be used as a loading screen while the extension is loading configuration or data.</p><!--kg-card-begin: markdown--><pre><code class="language-javascript">import React from 'react';
import Spinner from 'react-spinkit';
import './styles/LoadingIndicator.css';

function LoadingIndicatorComponent(props) {
    return (
        &lt;div className='loadingIndicator'&gt;
            &lt;h3&gt;{props.msg}&lt;/h3&gt;
            &lt;Spinner name='three-bounce' fadeIn='none' /&gt;
        &lt;/div&gt;
    );
}

export default LoadingIndicatorComponent;
</code></pre>
<!--kg-card-end: markdown--><p>We will need a CSS file along with the LoadingIndicator just to add little style to the loading indicator.</p><!--kg-card-begin: markdown--><pre><code class="language-css">.loadingIndicator {
    width: 200px;
    height: 200px;
    text-align: center;
    position: absolute;
    left: calc(50vw - 100px);
    top: calc(50vh - 100px);
}
</code></pre>
<!--kg-card-end: markdown--><p>Now that all of our basic components are ready, we can start wiring them in. Let's create a new JS file called Extension.js. The first thing we will do here is initialize the tableau extension, and get selected </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">tableau.extensions.initializeAsync().then(() =&gt; {
        //Here you can write code that needs to be executed post the extension initialization
})
</code></pre>
<!--kg-card-end: markdown--><p>The first thing we will do inside the initializeAsync promise is to get all the sheet names from the dashboard on which this extension has been added. </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">tableau.extensions.initializeAsync().then(() =&gt; {
            const sheetNames = tableau.extensions.dashboardContent.dashboard.worksheets.map(worksheet =&gt; worksheet.name);
})
</code></pre>
<!--kg-card-end: markdown--><p>Now let's create a state variable to store these sheet names</p><!--kg-card-begin: markdown--><pre><code class="language-javascript">const [sheetNames, setSheetNames] = useState([]);
</code></pre>
<!--kg-card-end: markdown--><p>We can now add the sheetNames to the state variable </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">tableau.extensions.initializeAsync().then(() =&gt; {
            const sheetNames = tableau.extensions.dashboardContent.dashboard.worksheets.map(worksheet =&gt; worksheet.name);
            setSheetNames(sheetNames);
})
</code></pre>
<!--kg-card-end: markdown--><p>Next step we need to create a sheet variable to store the selected sheet. We will also use this variable to determine if a sheet has been selected or not. Along with it, we are also going to determine a state variable to manage the loading state of the extension.</p><!--kg-card-begin: markdown--><pre><code class="language-javascript">const [isLoading, setIsLoading] = useState(true);
const [selectedSheet, setSelectedSheet] = useState(undefined);
</code></pre>
<!--kg-card-end: markdown--><p>Now let's add the logic to show the Sheet List component we created in case no sheet is selected. For this we will use the Modal component in react-bootstrap, and the SheetListComponent we created above. So make sure you import those dependencies. </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">import {Modal} from &quot;react-bootstrap&quot;;
import {SheetListComponent} from &quot;./SheetListComponent&quot;;
</code></pre>
<!--kg-card-end: markdown--><p>We will now create a variable that we will use for setting what needs to be shown on the extension UI based on our conditions, and set it to show a modal window to select the sheet when no sheet is selected. </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">    let output = &lt;div&gt;Sheet Selected : {selectedSheet}&lt;/div&gt;;
    if(!selectedSheet){
        output =
            &lt;Modal show&gt;
                &lt;Modal.Header&gt;
                    &lt;Modal.Title&gt;Choose a Sheet&lt;/Modal.Title&gt;
                &lt;/Modal.Header&gt;
                &lt;Modal.Body&gt;
                    &lt;SheetListComponent sheetNames={sheetNames}/&gt;
                &lt;/Modal.Body&gt;
            &lt;/Modal&gt;
    };
    return (
        &lt;div&gt;{output}&lt;/div&gt;
    );
</code></pre>
<!--kg-card-end: markdown--><p>Now that we have this in place, let's try to test if this works fine. One last step before we can test this in Tableau is to edit the App.js to add the new Extension component we have created to it. The updated App.js should like the one below</p><!--kg-card-begin: markdown--><pre><code class="language-javascript">import React from 'react';
import './App.css';
import Extension from &quot;./Extension&quot;;

function App() {
  return (
    &lt;Extension/&gt;
  );
}

export default App;
</code></pre>
<!--kg-card-end: markdown--><p></p><p>Launch Tableau desktop, and open your Tableau workbook. On a dashboard view use the left Dashboard Objects pane to select Extension. Once done drag and drop the extension into the dashboard. You should see a popup like the one below. </p><figure class="kg-card kg-image-card"><img src="https://nerdyandnoisy.com/content/images/2020/03/Screenshot-2020-03-20-at-1.28.18-AM.png" class="kg-image" alt="Building Your First Tableau Extension using ReactJs"></figure><p>Select My Extensions, and then select the trex file we created above, to load the extension. Once you open the trex file Tableau should give you a popup asking to allow running the extension. </p><figure class="kg-card kg-image-card"><img src="https://nerdyandnoisy.com/content/images/2020/03/Screenshot-2020-03-20-at-1.29.29-AM.png" class="kg-image" alt="Building Your First Tableau Extension using ReactJs"></figure><p>Once you click ok the extension should load and show you a list of all the sheets that are in your current dashboard </p><figure class="kg-card kg-image-card"><img src="https://nerdyandnoisy.com/content/images/2020/03/Screenshot-2020-03-20-at-1.43.16-AM.png" class="kg-image" alt="Building Your First Tableau Extension using ReactJs"></figure><p>Wallah !! The extension is working fine. </p><p><strong>Save settings</strong></p><p>Now we are going to look at how we can save some of the extension settings so that when the dashboard loads the extension does not ask the end user for configurations, and hence making the interaction feel more native. </p><p>We are going to save the selected sheet into the extension settings and pull it from the settings the next time the extension reloads. </p><p>First we will create a function to store selected sheet that is returned by the SelectSheetComponent.</p><!--kg-card-begin: markdown--><pre><code class="language-javascript">    const onSelectSheet = (sheet) =&gt; {
        tableau.extensions.settings.set('sheet',sheet);
        setIsLoading(true);
        tableau.extensions.settings.saveAsync().then(() =&gt; {
            setSelectedSheet(sheet);
        });
    };
</code></pre>
<!--kg-card-end: markdown--><p>In the above code we are using the settings property in  tableau extension. Settings is a key value pair object where you can save string properties as values. Once done you can save the setting, using the saveAsync function which returns a promise, inside which you can do other operations post saving of the setting. We set the selected sheet in the state object once the setting has been saved. </p><p>Next we will update the SheetListComponent tag inside the modal window to pass this function to the component</p><!--kg-card-begin: markdown--><pre><code>&lt;SheetListComponent sheetNames={sheetNames} onSelectSheet={onSelectSheet}/&gt;
</code></pre>
<!--kg-card-end: markdown--><p>Finally we will update logic within the promise for initializeAsync function of the extension to pick up the selected sheet from the settings.</p><!--kg-card-begin: markdown--><pre><code class="language-javascript">
    useEffect(() =&gt; {
        tableau.extensions.initializeAsync().then(() =&gt; {
            const sheetNames = tableau.extensions.dashboardContent.dashboard.worksheets.map(worksheet =&gt; worksheet.name);
            setSheetNames(sheetNames);
            const selectedSheet = tableau.extensions.settings.get('sheet');
            setSelectedSheet(selectedSheet);
        })
    },[]);

</code></pre>
<!--kg-card-end: markdown--><p>Now reload your extension and select a sheet from the dashboard. </p><figure class="kg-card kg-image-card"><img src="https://nerdyandnoisy.com/content/images/2020/03/Screenshot-2020-03-20-at-2.02.01-AM.png" class="kg-image" alt="Building Your First Tableau Extension using ReactJs"></figure><p>You should see something like this in the output. </p><figure class="kg-card kg-image-card"><img src="https://nerdyandnoisy.com/content/images/2020/03/Screenshot-2020-03-20-at-2.03.54-AM.png" class="kg-image" alt="Building Your First Tableau Extension using ReactJs"></figure><p>Now try reloading the extension again, it should pick up the selected sheet from the setting and directly take you to the above view without you have to select the sheet again. </p><p><strong>Get data from the selected tableau sheet</strong></p><p>So finally, we can now pull our data from our selected sheet. </p><p>First we need to get the selectedSheet object using the tableau extension API. We will create a function for this. </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">    const getSelectedSheet = (sheet) =&gt; {
        const sheetName = sheet || selectedSheet;
        return tableau.extensions.dashboardContent.dashboard.worksheets.find(worksheet =&gt; worksheet.name === sheetName);
    };
</code></pre>
<!--kg-card-end: markdown--><p>Then we need to know what rows (marks) are selected, and also when that selection is changed. Tableau extension API has a function </p><p>Let's create a function to load the selected marks from the selected sheet. </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">    const loadSelectedMarks = (sheet) =&gt; {
        if(unregisterEventFn){
            unregisterEventFn();
        }

        const worksheet = getSelectedSheet(sheet);
        worksheet.getSelectedMarksAsync().then(marks =&gt; {
            const worksheetData = marks.data[0];
            const rows = worksheetData.data.map(row =&gt; row.map(cell =&gt; cell.value));
            const headers = worksheetData.columns.map(column =&gt; column.fieldName);
            setRows(rows);
            setHeaders(headers);
            setIsLoading(false);
        });
        unregisterEventFn = worksheet.addEventListener(tableau.TableauEventType.MarkSelectionChanged, () =&gt; {
            setIsLoading(true);
            loadSelectedMarks(sheet);
        })
    };
</code></pre>
<!--kg-card-end: markdown--><p>One interesting thing in the above code is the line where we add an event listener to the worksheet. Tableau extension API provides different events that we can tap into to update our extension UI, for this example we have used the MarkSelectionChanged event. </p><p>We will also have to update initial loading code (initializeAsync) and the sheet selection code to add a call to the loadSelectedMarks function. </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">    useEffect(() =&gt; {
        tableau.extensions.initializeAsync().then(() =&gt; {
            const sheetNames = tableau.extensions.dashboardContent.dashboard.worksheets.map(worksheet =&gt; worksheet.name);
            setSheetNames(sheetNames);
            const selectedSheet = tableau.extensions.settings.get('sheet');
            setSelectedSheet(selectedSheet);

            const sheetSelected = !!selectedSheet;
            setIsLoading(sheetSelected);

            if(!!sheetSelected){
                loadSelectedMarks(selectedSheet);
            }
        })
    },[]);
</code></pre>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><pre><code class="language-javascript">    const onSelectSheet = (sheet) =&gt; {
        tableau.extensions.settings.set('sheet',sheet);
        setIsLoading(true);
        tableau.extensions.settings.saveAsync().then(() =&gt; {
            setSelectedSheet(sheet);
            loadSelectedMarks();
        });
    };
</code></pre>
<!--kg-card-end: markdown--><p>Now we will create a simple grid to display the selected data. For this we will use a react library called react-virtualized.</p><!--kg-card-begin: markdown--><pre><code class="language-command-line">yarn add react-virtualized
</code></pre>
<!--kg-card-end: markdown--><p>Next we will create a simple data table to display the selected data. </p><!--kg-card-begin: markdown--><pre><code class="language-javascript">import React from 'react';
import { AutoSizer, MultiGrid } from 'react-virtualized';
import './styles/DataTable.css';

function DataTableComponent(props) {
    const cellRenderer = ({ columnIndex, key, rowIndex, style }) =&gt; {
        if (rowIndex === 0) {
            return (&lt;div className='cell header' key={key} style={style}&gt;
                &lt;button type='button' className='link-button'&gt;{props.headers[columnIndex]}&lt;/button&gt;
            &lt;/div&gt;);
        } else {
            return (&lt;div className={'cell ' + (rowIndex % 2 === 1 ? 'odd' : 'even')} key={key} style={style}&gt;
                {props.rows[rowIndex - 1][columnIndex]}
            &lt;/div&gt;);
        }
    };

    return (
        &lt;div className='dataTable'&gt;
            &lt;AutoSizer&gt;
                {({ height, width }) =&gt; (
                    &lt;MultiGrid
                        key={props.dataKey || -1}
                        fixedRowCount={1}
                        className='grid'
                        cellRenderer={cellRenderer}
                        columnCount={props.headers.length}
                        columnWidth={150}
                        height={height}
                        rowCount={props.rows.length + 1}
                        rowHeight={30}
                        width={width}
                    /&gt;
                )}
            &lt;/AutoSizer&gt;
        &lt;/div&gt;
    );
}

export default DataTableComponent;
</code></pre>
<!--kg-card-end: markdown--><p>Let's add the DataTableComponent to the Extension component and add as part of out output.</p><!--kg-card-begin: markdown--><pre><code class="language-javascript">    const mainContent = (rows.length &gt; 0)
        ? (&lt;DataTableComponent rows={rows} headers={headers}/&gt;)
        : (&lt;h4&gt;No Data Found&lt;/h4&gt;);

    let output = &lt;div&gt;{mainContent}&lt;/div&gt;;
</code></pre>
<!--kg-card-end: markdown--><p>Reload the extension and you should see a message saying "No Data Found"</p><figure class="kg-card kg-image-card"><img src="https://nerdyandnoisy.com/content/images/2020/03/Screenshot-2020-03-20-at-2.34.52-AM.png" class="kg-image" alt="Building Your First Tableau Extension using ReactJs"></figure><p>Now try selecting some marks from your selected sheet, and the data should start appearing in your extension view. </p><figure class="kg-card kg-image-card"><img src="https://nerdyandnoisy.com/content/images/2020/03/Screenshot-2020-03-20-at-2.37.10-AM.png" class="kg-image" alt="Building Your First Tableau Extension using ReactJs"></figure><p>And there we have our first tableau extension, which can interact with the tableau dashboard and pull data from the sheets. </p><p>The code for this sample extension is available in the below GitHub repository.</p><p><a href="https://github.com/sunnydave/first-tableau-extension">https://github.com/sunnydave/first-tableau-extension</a></p>]]></content:encoded></item><item><title><![CDATA[Ideas are a dime a dozen !!]]></title><description><![CDATA[In this blog I share things I learned as Founder of an enterprise SaSS platform, about how to turn ideas into successful businesses.]]></description><link>https://nerdyandnoisy.com/ideas-are-a-dime-a-dozen/</link><guid isPermaLink="false">5f3d8db1f4c4cb113c4742e6</guid><category><![CDATA[Startup]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Sun, 15 Mar 2020 16:37:20 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1512314889357-e157c22f938d?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1512314889357-e157c22f938d?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=1080&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Ideas are a dime a dozen !!"><p>Everytime someone comes to me with a new idea asking for my advice on how to turn it into a business, the first thing I tell them that start a business not because you think your idea is great but because you think you are the only one who can turn this idea into a successful enterprise. Everyone has a good idea, but what separates successful entrepreneurs from unsuccessful ones is execution. </p><p>Here are few things I have learned during my journey as an entrepreneur, which I believe are important to build a successful business </p><p><br><strong>Value before valuation</strong></p><p>Businesses who have been able to create long term value survive no matter how small or big their valuation is. I am a literal guy so for me value is, are people ready to pay for using your product/services, and does that money cover the cost of running your operations.   This makes sure that then you can focus on building a good business and not on arranging money from external investors for it. Trust me raising investment is hard, and not needing to do it will save you a lot of time &amp; stress. </p><p>If you build value and sustainability into your business from day one, then investments become tools for growth and not keeping the lights on. </p><p><strong>Rome was not built in a day and neither will you business</strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://images.unsplash.com/photo-1516880711640-ef7db81be3e1?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" class="kg-image" alt="Ideas are a dime a dozen !!"><figcaption>Photo by <a href="https://unsplash.com/@randyfath?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit">Randy Fath</a> / <a href="https://unsplash.com/?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit">Unsplash</a></figcaption></figure><p>Building a successful sustainable business is a marathon not a sprint. The first thing you need to be ready for is that turning your idea into a business will take time. There is no shortcut to building a sustainable business, and you will have require a lot of perseverance to get through day to day challenges.  Companies like Basecamp, WorkDay, SalesForce, Shopify are great examples of how long it takes to build a successful billion dollar sustainable business. </p><p><strong>Winners do one things that losers don't - They focus </strong></p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://images.unsplash.com/photo-1451226428352-cf66bf8a0317?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" class="kg-image" alt="Ideas are a dime a dozen !!"><figcaption>Photo by <a href="https://unsplash.com/@rvignes?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit">Romain Vignes</a> / <a href="https://unsplash.com/?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit">Unsplash</a></figcaption></figure><p>Any business has only finite amount of resources but start-ups have even less resources. Sometimes you only have those 4-5 hrs a day to work on your idea. This means that you will need a razor sharp focus in everything from deciding which problem in your business area you want to solve, to which feature should be part of your releases. Focus then becomes a tool for you to prioritize your work, making your decision making easier. </p><p>As your business grows, focus makes sure that everyone in the team knows what is the end goal they are working towards, and your organization moves as one cohesive unit. </p><p><strong>Every business is a services business</strong></p><p>This is specifically important because a lot of people think that they don't need to build a customer focused, or service mindset because they are offering products and not direct services to their end customers. This assumption cannot be farther from the truth, from the time a customer buys your product, or logs into your platform they become a customer who expects everything that a typical service customer would expect. You can automate end user services by using bots, emails, automated phone calls, but you cannot escape the fact that retaining customers requires a customer focused mindset.  </p>]]></content:encoded></item><item><title><![CDATA[Copycats cannot copy who you are]]></title><description><![CDATA[<p>The first thing I learned when venturing into my entrepreneurial journey is that you will find a lot of people trying to copy your ideas. Some of them will tell you that your idea will not work and then go out trying to replicate it in their products. Few of</p>]]></description><link>https://nerdyandnoisy.com/copycats-cannot-copy-who-you-are/</link><guid isPermaLink="false">5f3d8db1f4c4cb113c4742e2</guid><category><![CDATA[Startup]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Mon, 26 Aug 2019 16:19:25 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1454165804606-c3d57bc86b40?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Copycats cannot copy who you are"><p>The first thing I learned when venturing into my entrepreneurial journey is that you will find a lot of people trying to copy your ideas. Some of them will tell you that your idea will not work and then go out trying to replicate it in their products. Few of them would go one step further and blatantly copy exact lines from your discussion, website and pitches. </p><p>At first this used to irritated me, make me really angry. My defense mechanism was to go in my shell and share less with the next person I met. But, eventually I realized something, my ideas benefited more from having an open discussion with people, than they suffered from copycats trying to replicate them. This lead me to another conclusion, ideas are easy to come by what matters is the execution and the passion to keep working on the idea until it transforms into a great product. </p><p>You are doing what you because you are passionate about it and you believe that there are better ways of doing something, than the approaches available today. That is something no one can ever copy. You are the only one who can sacrifice everything to turn that idea into a reality, you will keep working on it forgetting things like hunger and sleep till you see yours users happy with what they are using. </p><p>Once you stop worrying about people trying to copy you and focus on refining your ideas, make a better product for your users and continuously innovate upon it, the copycats will always play catch-up. People copy because they are too lazy to come up with the next best idea, work with their users to refine their experience. For them a few extra bucks is better than building a sustainable product and great user experience. They can never match your never give up attitude and drive, to get better with every experience. </p><p>Now when I see someone trying to copy my ideas I go read feedback from my end users and see how/why my approach is better than anyone else's. I keep my focus on my idea, my product rather than trying to out smart a copy cat. Time and time again I have seen this pay off when clients try to compare our products to a copycat and realize how much better, innovative our offering is without us even having to spell it out for them. </p><p>To all those entrepreneurs who worry about copycats winning, I would say they can copy an idea, not your grit and thought process which turns that idea into a reality. Don't worry about the noise, focus on what your clients/users are saying about your product, keep innovating and perfecting your idea. See your copycats trying to play catch-up as the distance grows because this is a marathon not a sprint. Also remember, imitation is the sincerest  for of flattery !</p>]]></content:encoded></item><item><title><![CDATA[NaN - Nerdy and Noisy]]></title><description><![CDATA[<p>Not a Number, a term I came to know when I first started writing JS code. It was irritating to transition to a scripting language like JS from structured languages like C++ and Java, but it taught me a great lesson in life, just because something or someone is different</p>]]></description><link>https://nerdyandnoisy.com/nan/</link><guid isPermaLink="false">5f3d8db1f4c4cb113c4742e0</guid><category><![CDATA[Random]]></category><dc:creator><![CDATA[Sunny Dave]]></dc:creator><pubDate>Sun, 25 Aug 2019 08:55:40 GMT</pubDate><content:encoded><![CDATA[<p>Not a Number, a term I came to know when I first started writing JS code. It was irritating to transition to a scripting language like JS from structured languages like C++ and Java, but it taught me a great lesson in life, just because something or someone is different from the way you are used to does not mean it is bad. Once you get to know things, situations, people you open yourself up for fresh perspectives in life.</p><p>I used the term nerdy and noisy first time to describe myself about 2 years back. I don't remember where or in what context I used it, but it stuck in my head. So, being the nerd that I am, I went ahead and bought this domain. </p><p>I  had this domain for a long time not knowing what I want to do with it. Then I went through a bad phase in my life, and realised one of the reasons for that was I had no one to share my ideas, thoughts with. I was afraid of how people would perceive me, if I am open up about everything that goes on in this weird head of my mine. When I got out on the other side, I realised it does not matter how people perceive you for speaking the truth, because the ones who love you will be around and the ones who are not around should never have mattered. </p><p>So, here I am starting something new in life. A space where I will write my thoughts about society, technology, my life and anything else that comes into my head. If you like it come read it, if you don't like it don't read it, or read it &amp; hate me, choices are endless and they are yours to make. We are humans and not numbers, we have choices that are not binary, and we are free to make those choices. That is what this space is about my thoughts, ideas and choices that might not fit any society/majority defined binary buckets. </p>]]></content:encoded></item></channel></rss>