<?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: Megha Pathak</title>
    <description>The latest articles on DEV Community by Megha Pathak (@megha_pathak_).</description>
    <link>https://dev.to/megha_pathak_</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%2F370131%2F050360fe-6299-4dca-9fae-50a47ee05f80.jpg</url>
      <title>DEV Community: Megha Pathak</title>
      <link>https://dev.to/megha_pathak_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/megha_pathak_"/>
    <language>en</language>
    <item>
      <title>5 steps for Making Your First Open Source Contribution</title>
      <dc:creator>Megha Pathak</dc:creator>
      <pubDate>Thu, 03 Jun 2021 09:58:36 +0000</pubDate>
      <link>https://dev.to/megha_pathak_/5-steps-for-making-your-first-open-source-contribution-42bl</link>
      <guid>https://dev.to/megha_pathak_/5-steps-for-making-your-first-open-source-contribution-42bl</guid>
      <description>&lt;p&gt;Hey Everyone! Long time.👋🏻&lt;/p&gt;

&lt;p&gt;It's been a long since I wrote something on my personal blog. So if I am resuming it, I will do it in style. &lt;br&gt;
There is a gift for you in this article of mine. By the end of this article, you will make your First Open Source contribution. ✨&lt;/p&gt;

&lt;p&gt;Before we start with the question - &lt;strong&gt;How to make your first contribution to Open Source?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;We should first understand what Open Source  Development is. Anyone who is reading the word Open Source Development for the first time, let me define it for you (because you will encounter this word A LOT in this article). &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5VvMPUUJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622445368843/WcGqUrcPr.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5VvMPUUJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622445368843/WcGqUrcPr.jpeg" alt="6.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Now, let's find your first Open Source Project
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Your interest is the most important thing!
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zBhYuwJQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622445447304/WGBdPhHkO.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zBhYuwJQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622445447304/WGBdPhHkO.jpeg" alt="22.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I couldn't find a bigger font to write this, so you understand the importance of this point is. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;While finding an Open Source project, consider your interests as the foremost thing. Your interest may or may not relate to your day job. It should be something you are really passionate about. It can be anything - Food Softwares, Design tools, Music Softwares, anything that you genuinely appreciate. &lt;/p&gt;

&lt;p&gt;Open-source contributions won't feel like "work" if you take care of this point. &lt;/p&gt;

&lt;h3&gt;
  
  
  2. Figure out how you can help this Open Source project
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HY5BHKbV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622445454789/piYZTw3oj.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HY5BHKbV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622445454789/piYZTw3oj.jpeg" alt="23.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fill out this sentence before you jump to the actual contributions: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I can help you with ____________ .&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You do not necessarily need to contribute to an Open Source Project with code only. Open Source Development and Contributions goes way beyond code too. &lt;/p&gt;

&lt;p&gt;You can help the Open Source project and org with - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation &lt;/li&gt;
&lt;li&gt;Design &lt;/li&gt;
&lt;li&gt;Social Media Writing &lt;/li&gt;
&lt;li&gt;Project Management &lt;/li&gt;
&lt;li&gt;Code Reviews &lt;/li&gt;
&lt;li&gt;Organizing Meetups and Events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the list doesn't end here. You can find your own unique way of helping an Open Source Project. &lt;/p&gt;

&lt;h3&gt;
  
  
  3. Finding an Open Source Organization
&lt;/h3&gt;

&lt;p&gt;There are numerous ways of finding an Open Source Org. Open Source programs like GSoC, GSoD, Hacktoberfest, Linux foundation, etc., act instrumental in this process and make it easier for people to find Open Source orgs. But you don't need to limit yourself till there. Simple searches over the internet can help you find the Open Source Org that inclines with your interests. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7JAM2qeX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622445459175/rzeUd-mQ5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7JAM2qeX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622445459175/rzeUd-mQ5.jpeg" alt="24.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Once you find an Open Source Project, it is important to understand what you are getting into
&lt;/h3&gt;

&lt;p&gt;There will be hundreds of words that you don't know the meaning of. So it's essential to understand what you are getting into. &lt;/p&gt;

&lt;p&gt;There are three best friends you have for this 👇🏻&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W94KvSjg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447037225/qG_23MCBF.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W94KvSjg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447037225/qG_23MCBF.jpeg" alt="25.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But when you go through the codebase, documentation, and community. There will be some common Jargons that you will come across.  Let's try to demystify some common Jargons for you - &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--M6_ES0Ol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447051202/AvdQqyO82.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--M6_ES0Ol--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447051202/AvdQqyO82.jpeg" alt="27.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Issues -&lt;/strong&gt; Issues is a tracking tool that is integrated with the development repository. And as the name suggests, if someone encounters an issue in the project, they can list it using the Issues section. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mailing List -&lt;/strong&gt; Open Source orgs generally use mailing lists as Virtual Committees to talk to their community and contributors. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pull Requests -&lt;/strong&gt; This is a very vital part of Open Source Development. A pull request is a method of submitting contributions to an open development project. A pull request occurs when you ask for changes committed to an external repository to be considered for inclusion in a project's main repository.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contributing -&lt;/strong&gt; These are the guidelines you need to follow if you want to contribute. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ReadMe -&lt;/strong&gt; This carries all the general information about the project, like how to set it up locally, what the project is about, etc. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community -&lt;/strong&gt; This comprises the group of people who are using the project or simply interested in it. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contributor -&lt;/strong&gt; Anyone whose Pull request is merged in the main project is considered as a Code Contributor (but as we discussed above, there are others ways of contributing as well). &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chat Channels -&lt;/strong&gt; Mode of communication where you can discuss your queries about contributing to the project. These are Gitter, IRC, or Slack channels generally. &lt;/li&gt;
&lt;li&gt;**Maintainer - **This can be one or more people who build source code into a binary package for distribution, commit patches, or organize code in a source repository.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Start Contributing without overthinking
&lt;/h3&gt;

&lt;p&gt;The fifth step is simple - You have to stop overthinking that you are competent enough or not for making an Open Source Contribution. &lt;/p&gt;

&lt;p&gt;There will definitely something that you can help with, as long as you are open-minded and willing to explore and learn new stuff. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FJOzfe93--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447106732/aGUDraDB5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FJOzfe93--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447106732/aGUDraDB5.jpeg" alt="37.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I promised to you, by the end of this article, you will make your First Open Source contribution. So let's begin with it 🌟&lt;/p&gt;

&lt;p&gt;We will take help of our above checklist - &lt;/p&gt;

&lt;h3&gt;
  
  
  So, our first step was finding something that Interests you!
&lt;/h3&gt;

&lt;p&gt;Does Hashnode Interest you? &lt;/p&gt;

&lt;p&gt;If yes, then voila! &lt;/p&gt;

&lt;p&gt;✅ Step 1 is done. &lt;/p&gt;

&lt;p&gt;We have &lt;a href="https://github.com/Hashnode/support"&gt;Hashnode Support Docs&lt;/a&gt; Open Sourced for you so that you can contribute to it. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--weL46Qrg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622610051495/mIaaOggpa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--weL46Qrg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622610051495/mIaaOggpa.png" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 was finding your Value Proposition
&lt;/h3&gt;

&lt;p&gt;There are different ways you can contribute to Hashnode Support Docs. Whatever way you choose is totally up to your interest. &lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XkK8qv7C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447071563/6Xnbv42QO.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XkK8qv7C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447071563/6Xnbv42QO.jpeg" alt="30.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Some 0th level contributions can be: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sharing about the Open Source Project (in this case, the Hashnode Support Docs) on the Social Media Channels so that more people can discover it. &lt;/li&gt;
&lt;li&gt;Sharing the Hashnode Support Docs with anyone who has some queries that can be resolved using the docs. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oHbsO3Ui--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447074677/-TDBQvjgY.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oHbsO3Ui--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447074677/-TDBQvjgY.jpeg" alt="31.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Some minor contributions can be: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you see some bug or want to suggest some optimization in the Hashnode Support Docs, then &lt;a href="https://github.com/Hashnode/support/issues/new"&gt;Opening an Issue&lt;/a&gt; for the same. &lt;/li&gt;
&lt;li&gt;Finding and reporting Typos in the Docs. &lt;/li&gt;
&lt;li&gt;You can help people understand the Contribution guidelines of the project. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---SGwg-qd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447078921/7dhVXPCig.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---SGwg-qd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447078921/7dhVXPCig.jpeg" alt="32.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Some major contributions can be: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can contribute guides about any section of Hashnode that can be helpful to Hashnode Users. &lt;/li&gt;
&lt;li&gt;You can contribute to Hashnode Support Docs by adding some new features to the site. &lt;/li&gt;
&lt;li&gt;You can improve the existing documentation by rephrasing it. &lt;/li&gt;
&lt;li&gt;You can do code reviews if you see someone opening a PR and making a code contribution. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3 is already covered, so jumping to Step 4.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4 was understanding what you are getting into.
&lt;/h3&gt;

&lt;p&gt;Once you decide how you want to contribute to the project, it's time to go through the Documentation, Codebase, and Community. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hashnode's Support Docs' &lt;a href="https://github.com/Hashnode/support"&gt;Codebase here&lt;/a&gt;. You can fork this project. &lt;/li&gt;
&lt;li&gt;The documentation you must go through is the &lt;a href="https://github.com/Hashnode/support/blob/main/README.md"&gt;README.md&lt;/a&gt; and &lt;a href="https://github.com/Hashnode/support/blob/main/CONTRIBUTING.md"&gt;CONTRIBUTING.md&lt;/a&gt; of the project. &lt;/li&gt;
&lt;li&gt;The &lt;a href="https://hashnode.com/"&gt;community is here&lt;/a&gt; and we have a &lt;a href="https://discord.gg/TzQVht4g"&gt;discord server&lt;/a&gt; where you can ask your queries. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 5, as suggested above is not to overthink.
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WJGowNG5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447085839/tg7Ec7IcD.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WJGowNG5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447085839/tg7Ec7IcD.jpeg" alt="33.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And once you make your first contribution, remember to keep the loop of contribution and communication alive. By doing this, you will be able to inspire more people to contribute and make the world of Open Source a long-term thing for you. &lt;/p&gt;

&lt;p&gt;Lastly, I want to mention, once you make your contribution, it's essential to have patience. Your contributions will be acknowledged definitely and positively. But like every good thing it takes a little time. 🌟&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gXBIpFYA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447089605/J8iVL2QAs.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gXBIpFYA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1622447089605/J8iVL2QAs.jpeg" alt="34.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can't wait to see your contributions rolling! &lt;/p&gt;

&lt;p&gt;Feel free to comment here if you have any follow-up questions 😊&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Learn concepts of Vanilla JavaScript while building a Privacy Card Game in 5 easy Steps.</title>
      <dc:creator>Megha Pathak</dc:creator>
      <pubDate>Tue, 04 Aug 2020 03:27:52 +0000</pubDate>
      <link>https://dev.to/megha_pathak_/learn-concepts-of-vanilla-javascript-while-building-a-privacy-card-game-in-5-easy-steps-f0j</link>
      <guid>https://dev.to/megha_pathak_/learn-concepts-of-vanilla-javascript-while-building-a-privacy-card-game-in-5-easy-steps-f0j</guid>
      <description>&lt;h2&gt;
  
  
  Is Vanilla JS even important to learn?
&lt;/h2&gt;

&lt;p&gt;VanillaJS is a name to refer to using plain JavaScript without any additional libraries.&lt;/p&gt;

&lt;p&gt;Now you may ask — Is it worth to spend time on learning Vanilla JS when we have so many frameworks around making development process and efficient for us?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If your knowledge is limited only to a single JavaScript framework, you will have a hard time learning a new one. All the JavaScript frameworks and libraries are inevitably based on its Vanilla core. This should convince anyone that knowledge of a pure JavaScript is a must in the long run. — David Kopal&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That said, it is true that investing time in Vanilla JavaScript will pay off in the long run. So keeping this significance of Vanilla JS in mind, let’s dive in this tutorial to understand JavaScript concepts along with creating an interesting game.&lt;/p&gt;




&lt;h2&gt;
  
  
  What are we making?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---ERK3yvn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/Megha-Pathak/Hacket/master/github-resources/HacketDemo2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---ERK3yvn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://raw.githubusercontent.com/Megha-Pathak/Hacket/master/github-resources/HacketDemo2.gif" alt="Hacket - the Privacy Card Game"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hacket.netlify.com/"&gt;Demo&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Story behind this Project
&lt;/h2&gt;

&lt;p&gt;If you are into stories like me, then you might be interested in knowing — How I came up with the idea of this project? (If you are not interested in knowing this story, skip to the next section to understand the Project Structure).&lt;/p&gt;

&lt;p&gt;Some years ago, when I was in school, I attended a seminar about Cyber Security. So when I came across an article about Cybersecurity few months aback, it strikes to me that the whole seminar I attended back in school can be converted to a game to educate kids about Internet Privacy. So Let's Begin. &lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1  - Understanding Project Structure and Setting Up files
&lt;/h2&gt;

&lt;p&gt;I personally use Visual Studio Code, you can use any IDE you like. The first step is to create the following files with the right extension attached to them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--08Zx4rJK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1596450263059/uufoGpYfy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--08Zx4rJK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1596450263059/uufoGpYfy.png" alt="project structure"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2  - Creating skeleton of the project with HTML
&lt;/h2&gt;

&lt;p&gt;Now we will create the basic skeleton of our project using HTML. This file will be called &lt;strong&gt;index.html&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Give your brain time to think, what will constitute to the structure of this game. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--licMEQcF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1596384474362/l94m2kvtF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--licMEQcF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn.hashnode.com/res/hashnode/image/upload/v1596384474362/l94m2kvtF.png" alt="Screenshot_2020-08-02 Hacket.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now start writing down the components - &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You are creating a game, so ofcourse there will be a &lt;strong&gt;game-board&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;Then the game board is divided into &lt;strong&gt;hacker-area&lt;/strong&gt; and &lt;strong&gt;player-area&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;We are also needed to recorded Life value of both Hacker and You, so that we can calculate the winner. Let's say these &lt;strong&gt;stats&lt;/strong&gt;, &lt;strong&gt;hacker-stats&lt;/strong&gt;, &lt;strong&gt;player-stats&lt;/strong&gt;, &lt;strong&gt;life-bar&lt;/strong&gt;, &lt;strong&gt;life-left&lt;/strong&gt;, &lt;strong&gt;life-total&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;We also have cards and text(scenarios) written on them, with certain power as well that is revealed after the player chooses any card. We will call these as, &lt;strong&gt;card&lt;/strong&gt;, &lt;strong&gt;hacker-card&lt;/strong&gt;, &lt;strong&gt;player-card&lt;/strong&gt;, &lt;strong&gt;text&lt;/strong&gt; and &lt;strong&gt;power&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt; We have few buttons such as, &lt;strong&gt;Next&lt;/strong&gt;(to bring the next scenarios to the player), &lt;strong&gt;start-game&lt;/strong&gt; button to start the game. &lt;/li&gt;
&lt;li&gt;Lastly, we have a &lt;strong&gt;winner-section&lt;/strong&gt; to show the &lt;strong&gt;winner-message&lt;/strong&gt; to notify the player, whether s(he) lost or won against the hacker, and the option for playing the game again, restart. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each part we discussed in the above points, will serve as an individual class. We have used classes for dividing the components, so that we can use &lt;code&gt;document.querySelectorAll&lt;/code&gt; for adding behavior to our game. &lt;/p&gt;

&lt;p&gt;You can read more about &lt;code&gt;queryselector&lt;/code&gt; and &lt;code&gt;classes&lt;/code&gt; here -  &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelectorAll"&gt;document.querySelectorAll&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes"&gt;Classes in JavaScript&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we will create the &lt;/p&gt; tag to define the above divisions. Like this -&lt;br&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div class="game-board"&amp;gt;
    &amp;lt;div class="hacker-area"&amp;gt;
        &amp;lt;h1&amp;gt;
          &amp;lt;strong&amp;gt;HACKER CARDS&amp;lt;/strong&amp;gt; &amp;lt;br/&amp;gt; Choose the best card to stop the hackers' attack
        &amp;lt;/h1&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Note - Nest div sections in the right way. Ex - All the other divisions will come under game board, life-bar will come under stats and so on. &lt;/p&gt;

&lt;p&gt;Try yourself to create the whole HTML skeleton like this, you can also refer to the code file &lt;a href="https://raw.githubusercontent.com/Megha-Pathak/Hacket/master/index.html"&gt;here&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  Steps 3 -  Adding Scenarios using a JavaScript Object
&lt;/h2&gt;

&lt;p&gt;Now we will be adding scenarios with a JavaScript Object. There will be 1 hackerCard per scenario and 3 playerCards per scenario. We will write these in the &lt;strong&gt;cards.js&lt;/strong&gt; file. Scenario number 1 will look like this -&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var scenarios = [
  {
    hackerCard : {
      description : "I set up a fake Wi-Fi station to steal people’s email and track them online.",
      power : 4,
    },
playerCards : [
      {
        description : "I never use public wifi networks.",
        power : 5,
      },
      {
        description : "I browse the web, but I never do any personal business on a public wifi network.",
        power : 3,
      },
      {
        description : "I connect to any wifi network I can use in public.",
        power : 1,
      }
    ]
  },
];
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;You can add as many as scenarios you want. I have kept 8 different scenarios, you can refer to them &lt;a href="https://raw.githubusercontent.com/Megha-Pathak/Hacket/master/cards.js"&gt;here&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Read more about Objects in JavaScript &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object"&gt;here&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4  -  Adding behavior to the project with a Script
&lt;/h2&gt;

&lt;p&gt;Our &lt;strong&gt;script.js&lt;/strong&gt; file will contain several functions that will add behavior to our projects. So let's start writing these functions. &lt;/p&gt;

&lt;h3&gt;
  
  
  First things first, set the starting life totals here
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var playerLife = 5;
var hackerLife = 5;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Read more about variable declaration &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Now the Message that will appear when the game is over
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var hackerWinnerMessage = "Game over: You got hacked!";
var playerWinnerMessage = "You defeated the hacker!";
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Game code starts here
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var playerStartLife = parseInt(playerLife);
var hackerStartLife = parseInt(hackerLife);

var roundFinished = false;
var cardSelected = false;

updateScores();

document.querySelector(".game-board").classList.add("before-game");

var allCardElements = document.querySelectorAll(".card");
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Now let's add click handler to all player card elements
&lt;/h3&gt;

&lt;p&gt;for(var i = 0; i &amp;lt; allCardElements.length; i++) {&lt;br&gt;
  var card = allCardElements[i];&lt;br&gt;
  if(card.classList.contains("player-card")) {&lt;br&gt;
    card.addEventListener("click",function(e){&lt;br&gt;
      cardClicked(this);&lt;br&gt;
    });&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;
&lt;h3&gt;
  
  
  We need a function that will execute when a card is clicked
&lt;/h3&gt;


&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function cardClicked(cardEl) {

  if(cardSelected) { return; }
  cardSelected = true;

  cardEl.classList.add("played-card");

  document.querySelector(".game-board").classList.add("card-selected");
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;### To wait 500ms to reveal the hacker power&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  setTimeout(function(){
    revealHackerPower();
  },500)
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Waits for 750ms to reveal the player power
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt; setTimeout(function(){
    revealPlayerPower();
  },800)
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Waits for 1250ms to compare the card scores
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt; setTimeout(function(){
    compareCards();
  }, 1400);
}
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Read more about the set timed out function &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Now we gotta show the power level on the player card
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function revealPlayerPower(){
  var playerCard = document.querySelector(".played-card");
  playerCard.classList.add("reveal-power");
}
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Read more about classList and its functionality &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/classList"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Similarly a function to show the power level on the hacker card
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function revealHackerPower(){
  var hackerCard = document.querySelector(".hacker-card");
  hackerCard.classList.add("reveal-power");
}
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  A function for comparing the cards based on their power value.
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function compareCards(){
  var playerCard = document.querySelector(".played-card");
  var playerPowerEl = playerCard.querySelector(".power");

  var hackerCard = document.querySelector(".hacker-card");
  var hackerPowerEl = hackerCard.querySelector(".power");

  var playerPower = parseInt(playerPowerEl.innerHTML);
  var hackerPower = parseInt(hackerPowerEl.innerHTML);

  var powerDifference = playerPower - hackerPower;

  if (powerDifference &amp;lt; 0) {
    // Player Loses
    playerLife = playerLife + powerDifference;
    hackerCard.classList.add("better-card");
    playerCard.classList.add("worse-card");
    document.querySelector(".player-stats .thumbnail").classList.add("ouch");
  } else if (powerDifference &amp;gt; 0) {
    // Player Wins
    hackerLife = hackerLife - powerDifference;
    playerCard.classList.add("better-card");
    hackerCard.classList.add("worse-card");
    document.querySelector(".hacker-stats .thumbnail").classList.add("ouch");
  } else {
    playerCard.classList.add("tie-card");
    hackerCard.classList.add("tie-card");
  }

  updateScores();

  if(playerLife &amp;lt;= 0) {
    gameOver("Hacker");
  } else if (hackerLife &amp;lt;= 0){
    gameOver("Player")
  }

  roundFinished = true;

  document.querySelector("button.next-turn").removeAttribute("disabled");
}
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  Once the game is over we will use the following function to show the winner message.
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function gameOver(winner) {
  document.querySelector(".game-board").classList.add("game-over");
  document.querySelector(".winner-section").style.display = "flex";
  document.querySelector(".winner-section").classList.remove("player-color");
  document.querySelector(".winner-section").classList.remove("hacker-color");

  if(winner == "Hacker") {
    document.querySelector(".winner-message").innerHTML = hackerWinnerMessage;
    document.querySelector(".winner-section").classList.add("hacker-color");
  } else {
    document.querySelector(".winner-message").innerHTML = playerWinnerMessage;
    document.querySelector(".winner-section").classList.add("player-color");
  }
}
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  When the Start button is clicked, this function will Start the game
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function startGame() {
  document.querySelector(".game-board").classList.remove("before-game");
  document.querySelector(".game-board").classList.add("during-game");
  playTurn();
}
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  This function updates the displayed life bar and life totals
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function updateScores(){

  // Update life totals for each player
  document.querySelector(".player-stats .life-total").innerHTML = playerLife;
  document.querySelector(".hacker-stats .life-total").innerHTML = hackerLife;

  // Update the player lifebar
  var playerPercent = playerLife / playerStartLife * 100;
  if (playerPercent &amp;lt; 0) {
    playerPercent = 0;
  }
  document.querySelector(".player-stats .life-left").style.height =  playerPercent + "%";

  // Update the hacker lifebar
  var hackerPercent = hackerLife / hackerStartLife * 100
  if (hackerPercent &amp;lt; 0) {
    hackerPercent = 0;
  }
  document.querySelector(".hacker-stats .life-left").style.height =  hackerPercent + "%";
}
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  For shuffling the set of 3 player cards at each run we will use this shuffleArray function
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function shuffleArray(a) {
  var j, x, i;
  for (i = a.length; i; i--) {
    j = Math.floor(Math.random() * i);
    x = a[i - 1];
    a[i - 1] = a[j];
    a[j] = x;
  }
  return a;
}
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Read more about Math.random &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Plays one turn of the game
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function playTurn() {

  roundFinished = true;
  cardSelected = false;

  document.querySelector(".game-board").classList.remove("card-selected");

  // Remove "ouch" class from player and hacker thumbnails
  document.querySelector(".hacker-stats .thumbnail").classList.remove("ouch");
  document.querySelector(".player-stats .thumbnail").classList.remove("ouch");

  // Hides the "next turn" button, will show again when turn is over
  document.querySelector(".next-turn").setAttribute("disabled", "true");

  for(var i = 0; i &amp;lt; allCardElements.length; i++) {
    var card = allCardElements[i];
    card.classList.remove("showCard");
  }

  setTimeout(function(){
    revealCards();
  }, 500);
}
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  For revealing cards to the player
&lt;/h3&gt;



&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function revealCards(){
  var j = 0;
  var cardIndexes = shuffleArray([0, 1, 2]);

  // Get scenario cards
  console.log("scenarios.length == " + scenarios.length);

  var randomScenarioIndex = Math.floor(Math.random() * scenarios.length);
  var scenario = scenarios[randomScenarioIndex];
  console.log(scenario.hackerCard.description);

  scenarios.splice(randomScenarioIndex, 1);

  console.log("scenarios.length after splice == " + scenarios.length);

  var hackerCard = scenario.hackerCard;
  var hackerCardEl = document.querySelector(".hacker-area .card");

  // Contents of the player cards
  var playerCards = scenario.playerCards;

  for(var i = 0; i &amp;lt; allCardElements.length; i++) {
    var card = allCardElements[i];

    card.classList.remove("worse-card");
    card.classList.remove("better-card");
    card.classList.remove("played-card");
    card.classList.remove("tie-card");
    card.classList.remove("prepared");
    card.classList.remove("reveal-power");

    // Display the payer card details
    if(card.classList.contains("player-card")) {
      card.querySelector(".text").innerHTML = playerCards[cardIndexes[j]].description;
      card.querySelector(".power").innerHTML = playerCards[cardIndexes[j]].power;
      j++;
    }

    // Reveal each card one by one with a delay of 100ms
    setTimeout(function(card, j){
      return function() {
        card.classList.remove("prepared");
        card.style.display = "block";
        card.classList.add("showCard");
      }
    }(card,i), parseInt(i+1) * 200);
  }

  // Display the hacker card
  hackerCardEl.querySelector(".text").innerHTML = hackerCard.description;
  hackerCardEl.querySelector(".power").innerHTML = hackerCard.power;
}
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Read more about innerHTML &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  You can access to my *&lt;em&gt;scripts.js *&lt;/em&gt; file &lt;a href="https://raw.githubusercontent.com/Megha-Pathak/Hacket/master/scripts/script.js"&gt;here&lt;/a&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Step 5 - Styling the Project
&lt;/h2&gt;

&lt;p&gt;Congratulations! You have covered a big chunk of work till now, give yourself a pat on the back. &lt;br&gt;
Now we will be adding styling to our project. &lt;/p&gt;
&lt;h3&gt;
  
  
  Styling that can be customized
&lt;/h3&gt;

&lt;p&gt;First we have the customize.css file, that have the basic colors and background images that can be changed anytime to change the whole appearance of the project.&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* Change the colors in this stylesheet to customize the game. */ 

/* Player Styles */

.player-color {
  background-color: #2a79d0;
}

.player-area {
  background-color: #0d3158;
  background-image: url(images/chip.svg);
}

.player-card .power {
  background-image: url(images/shield.svg);
}

/* Hacker Styles */

.hacker-color {
  background-color: #ce3d20;
}

.hacker-area {
  background-color: #3c1912;
  background-image: url(images/chip.svg);
}

.hacker-card .power {
  background-image: url(images/skull.svg);
}
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Note - The changes made to the customize.css file doesn't affect the functionality. &lt;br&gt;
You can access the images required for the styling from &lt;a href="https://github.com/Megha-Pathak/Hacket/tree/master/images"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Styling that adds to the functionality
&lt;/h3&gt;

&lt;p&gt;You can try styling all the elements by using class selectors and the reveal animations by yourself, or you can simply take help of this &lt;a href="https://raw.githubusercontent.com/Megha-Pathak/Hacket/master/styles/style.css"&gt;file&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;If you have followed this article till now, you surely would be able to pull of the creation of whole game successfully. If you encounter any problem you can always refer to my code &lt;a href="https://github.com/Megha-Pathak/Hacket/"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;If you liked this tutorial, share it with your friends and help them in creating there first JavaScript Project. &lt;/p&gt;

&lt;p&gt;Stay tuned until the next simplified bomb of knowledge lands to your feed. &lt;/p&gt;

&lt;p&gt;Keep Exploring! Keep Coding! &lt;/p&gt;

</description>
      <category>javascript</category>
      <category>gamedev</category>
      <category>vanillajs</category>
      <category>basics</category>
    </item>
    <item>
      <title>Why Product thinking is essential for Developers and how to apply it?</title>
      <dc:creator>Megha Pathak</dc:creator>
      <pubDate>Sun, 17 May 2020 17:44:41 +0000</pubDate>
      <link>https://dev.to/megha_pathak_/why-product-thinking-is-essential-for-developers-and-how-to-apply-it-51la</link>
      <guid>https://dev.to/megha_pathak_/why-product-thinking-is-essential-for-developers-and-how-to-apply-it-51la</guid>
      <description>&lt;p&gt;While developing a software product, product thinking is really important. There is a significant amount of considerations that must happen before an application reaches the market (and even if you are building a Personal Product/Project). &lt;/p&gt;

&lt;p&gt;Product thinking is a critical process we should take into account as a first step, even before you think about your application's interface. So, the big question first- &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What exactly Product Thinking is?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Product thinking allows you to create features that matter for the users of your products. It lets you see the product in context and not as a combination of features and design efforts.&lt;/p&gt;

&lt;p&gt;And you know very well that Context is essential even in small Personal Projects. Because at the end of the day all want to make sure that they are tackling meaningful problems. &lt;/p&gt;

&lt;p&gt;Now, you may ask - &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between Product Thinking and Project Thinking?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Project-oriented mindset (Project thinking) has been around for a long time and was indeed good at what was required of it. The Project Triangle includes - Project Scope, time, and budget. The project itself includes every component of development — from the idea to bug testing and release. Project thinking still works incredibly well, just on a different level than it used to.&lt;/p&gt;

&lt;p&gt;But, project thinking alone is not enough for a significant market victory?&lt;/p&gt;

&lt;p&gt;Why - &lt;/p&gt;

&lt;p&gt;Because, as mentioned above it easy for developers to get bogged down in developing features. It’s not that features aren’t important but that they are often secondary to the reason a customer or user buys our product. That reason is simple; the user buys the product to solve a real world problem for themselves.&lt;/p&gt;

&lt;p&gt;It is important to acknowledge that project thinking becomes much less useful when it comes to broader success. &lt;/p&gt;

&lt;p&gt;Product thinking is not about local, but about global and grand.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Innovation clashed with legacy and product steadily takes the place of the project. - inVerita&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Product thinking = Problem Solving. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, What is a Problem?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first step of product thinking is to determine the problem that your users are looking to solve. That’s the reason that they will buy your product (or even give feedback about on your product).&lt;/p&gt;

&lt;p&gt;If the problem you choose doesn’t actually exist or the solution you propose doesn’t actually solve the problem – your products are going to be worthless to users.&lt;/p&gt;

&lt;p&gt;Sure, there’s the possibility that if you get the solution wrong – you can fix it but if you solve a problem that doesn’t exist; there’s little you can do about that. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Structure of Product Thinking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You begin with the user and determine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What the problem is that you need to solve&lt;/li&gt;
&lt;li&gt;The audience that you’re going to solve the problem for&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then you look at the job to be done:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why are you doing this? (Vision)&lt;/li&gt;
&lt;li&gt;How will we do this? (Strategy)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally you reach your outputs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What exactly will you achieve? (Goal)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Therefore, developers should think in products first and features second. A smart combination of the project thinking and the product thinking is an optimal strategy for dominating your niche and reaching the set target on time.&lt;/p&gt;

&lt;p&gt;Do you have any questions about Product thinking? Ask them in the discussion below. &lt;/p&gt;

</description>
      <category>product</category>
      <category>dev</category>
      <category>development</category>
      <category>software</category>
    </item>
  </channel>
</rss>
