<?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: Daniel Gregory</title>
    <description>The latest articles on DEV Community by Daniel Gregory (@mrmadhat).</description>
    <link>https://dev.to/mrmadhat</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%2F137238%2F858d48cb-f9fc-4838-bc3e-c26bd0900e18.jpg</url>
      <title>DEV Community: Daniel Gregory</title>
      <link>https://dev.to/mrmadhat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mrmadhat"/>
    <language>en</language>
    <item>
      <title>How to launch your side project in less than a day</title>
      <dc:creator>Daniel Gregory</dc:creator>
      <pubDate>Mon, 27 Apr 2020 16:12:24 +0000</pubDate>
      <link>https://dev.to/mrmadhat/how-to-launch-your-side-project-in-less-than-a-day-1alk</link>
      <guid>https://dev.to/mrmadhat/how-to-launch-your-side-project-in-less-than-a-day-1alk</guid>
      <description>&lt;h2&gt;
  
  
  Process overview
&lt;/h2&gt;

&lt;p&gt;The process I follow includes many of the standard pillars of software&lt;br&gt;
development and can be seen in both waterfall and agile methodologies. The basic outline of the process I follow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Plan&lt;/li&gt;
&lt;li&gt;Reduce scope&lt;/li&gt;
&lt;li&gt;Design&lt;/li&gt;
&lt;li&gt;Build&lt;/li&gt;
&lt;li&gt;Launch&lt;/li&gt;
&lt;li&gt;Review&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I’m going to take you through this process step-by-step using my latest project,&lt;a href="https://hangman.mrmadhat.com"&gt;multiplayer hangman&lt;/a&gt; as an example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Planning
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Idea
&lt;/h3&gt;

&lt;p&gt;The idea for my latest project came after playing &lt;em&gt;Cards Against Humanity&lt;/em&gt; with my family through a site called &lt;a href="https://allbad.cards/"&gt;allbad.cards&lt;/a&gt;. The site allows multiple people on different devices to play the popular game together from any location. I was interested in learning about how real-time communication works in web apps and wanted to build something that would help me learn. I decided to recreate the classic game of hangman but a multiplayer version that allows people to play together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic Requirements
&lt;/h3&gt;

&lt;p&gt;Once I had the basic idea I then spent some time planning out how I wanted the game to work by writing a list of steps involved during a typical session:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Host creates a game session&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Host provides username to be used during the session&lt;/li&gt;
&lt;li&gt;A unique link is generated for the session that can be shared with other players&lt;/li&gt;
&lt;li&gt;Players join using the link: Username required to join&lt;/li&gt;
&lt;li&gt;Host starts game once all players have entered&lt;/li&gt;
&lt;li&gt;player order is decided here and doesn't change throughout the session&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Game&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;setup&lt;/li&gt;
&lt;li&gt;Word to guess is chosen at random&lt;/li&gt;
&lt;li&gt;The group of players (team) is assigned a number of lives&lt;/li&gt;
&lt;li&gt;The player to go first is randomly chosen&lt;/li&gt;
&lt;li&gt;Each player is shown n blank spaces representing the letters of the word&lt;/li&gt;
&lt;li&gt;Turn&lt;/li&gt;
&lt;li&gt;Player whose turn it is is shown a collection of letters to choose from

&lt;ul&gt;
&lt;li&gt;1 letter of the collection is in the word and the rest are not&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Player chooses a letter

&lt;ul&gt;
&lt;li&gt;If correct the letter is revealed&lt;/li&gt;
&lt;li&gt;If not a life is deducted from the game&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Player attempts to guess the word

&lt;ul&gt;
&lt;li&gt;If correct game ends and a new game starts&lt;/li&gt;
&lt;li&gt;If not two lives are deducted&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also drew some sketches to further clarify my thoughts about how I wanted the game to work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aqOYUkZv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ckvburk6xqz513nyyjf6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aqOYUkZv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ckvburk6xqz513nyyjf6.jpg" alt="sketches outlining steps of hangman app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reduce scope
&lt;/h2&gt;

&lt;p&gt;Reducing the scope of work required is the most important part of my development process. It's at this point I ask myself “What can be removed that means I can launch by the end of the day?” this question is critical because it allows me to focus on the most important features whilst postponing the less critical.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“What can I removed that means I can launch by the end of the day?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I like to use a day as a timescale because it means that the risk of failure is reduced. As long as I've been realistic with what I think I can accomplish I should be able to build it in a day. Even when I've underestimated the work required the project generally overruns by days rather than months. The shorter development cycle also means I can get the product in front of users quicker and gain valuable feedback which can then direct further development.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I removed
&lt;/h3&gt;

&lt;p&gt;In the case of the hangman project I removed the majority of the features and decided my first iteration would focus purely on the core game without&lt;br&gt;
multiplayer functionality. Yes, the purpose of creating the game is to explore real-time communication but that can only happen once there is a game that can be played.&lt;/p&gt;

&lt;p&gt;Plus, don't forget that we're talking in terms of days not months. Tomorrow I can work on adding multiplayer functionality if I want to and I can do so knowing that the core functionality of the game is taken care of and I don't need to worry about it.&lt;/p&gt;

&lt;p&gt;I took my sketches and narrowed them down to just one main sketch with slight variations for user notification, such as when the user guesses wrong. I also rewrote my functionality tasks to narrow down the steps needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design
&lt;/h2&gt;

&lt;p&gt;In previous side-projects I would skip the design initially and end up paying for it later. Completing the design first not only saves time but also removes headaches because design and development decisions aren't mixed. The less context switching the better.&lt;/p&gt;

&lt;p&gt;I created a main design housing the major components then made some additional copies that included other essential features. Here’s the designs:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--C5K1xEhh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5l39tp1of8492fcbmill.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--C5K1xEhh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5l39tp1of8492fcbmill.png" alt="Hangman game designs"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Build
&lt;/h2&gt;

&lt;p&gt;With the bulk of the thought process completed for the game and the design in hand the build is really straight forward. I took my reduced "steps of the game" that I wrote when I reduced the scope and began thinking about each item in more detail:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Game

&lt;ul&gt;
&lt;li&gt;Setup&lt;/li&gt;
&lt;li&gt;Word to guess chosen at random&lt;/li&gt;
&lt;li&gt;Initial number of lives given&lt;/li&gt;
&lt;li&gt;Player shown n blank spaces representing the letters of the word&lt;/li&gt;
&lt;li&gt;Turn&lt;/li&gt;
&lt;li&gt;If player has lives remaining

&lt;ul&gt;
&lt;li&gt;Generate and display letters to choose from&lt;/li&gt;
&lt;li&gt;Player makes letter choice&lt;/li&gt;
&lt;li&gt;Correct: the letter is revealed&lt;/li&gt;
&lt;li&gt;Incorrect: a life is taken&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;If player doesn't have lives remaining

&lt;ul&gt;
&lt;li&gt;Show "Better luck next time" message and restart game button&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;If all letters are known

&lt;ul&gt;
&lt;li&gt;Show "Congratulations!" message and restart game button&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also sourced a list of &lt;a href="https://github.com/first20hours/google-10000-english"&gt;common english words&lt;/a&gt; for use within the app and setup my project to use &lt;a href="https://github.com/typicode/husky"&gt;husky&lt;/a&gt; to run tests and lint my code before being committed. Lastly, I built out the game in React using &lt;code&gt;create react app&lt;/code&gt;, view the source &lt;a href="https://github.com/mrmadhat/hangman-game"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Launch
&lt;/h2&gt;

&lt;p&gt;In practically no time the game was ready to be deployed. I want the process of deployment to be automatic and I want to spend the least amount of time thinking about it as possible.&lt;/p&gt;

&lt;p&gt;For this project I chose github pages for the deployment, whenever I want to deploy I just type &lt;code&gt;npm run deploy&lt;/code&gt; and latest changes will automatically be published. One change I would like to make to this workflow is to setup a github action that will automatically deploy whenever there is a commit on the master branch. Another, arguably simpler option would be to move the hosting to netlify where deploys would automatically happen on push to the master branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review and feedback
&lt;/h2&gt;

&lt;p&gt;Overall I’m happy with how the first iteration of the game turned out. I shared it with my friends and family to get some initial feedback, they said that the game is quite difficult and would be better if it was easier. Another piece of feedback I received was that the game should show the word when the player runs out of lives.&lt;/p&gt;

&lt;p&gt;This feedback is invaluable, if I was building the game as something to generate profit then this initial feedback would allow me to quickly add improvements to the game that users actually want. This all comes back to the speed of delivery, you should constantly strive to strip anything that’s unnecessary and build the most important thing first then iterate quickly based on real-world feedback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Hopefully this article has been helpful, if it has and you'd like to hear read more stories from me please consider subscribing to my mailing list.&lt;/p&gt;

</description>
      <category>efficiency</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Hack COVID-19: Come together to help the worlds vulnerable</title>
      <dc:creator>Daniel Gregory</dc:creator>
      <pubDate>Sat, 21 Mar 2020 11:44:48 +0000</pubDate>
      <link>https://dev.to/mrmadhat/hack-covid-19-come-together-to-help-the-worlds-vulnerable-3i37</link>
      <guid>https://dev.to/mrmadhat/hack-covid-19-come-together-to-help-the-worlds-vulnerable-3i37</guid>
      <description>&lt;p&gt;This event has been created to bring together developers and other creative individuals to create solutions that will support vulnerable people and key workers throughout this time of need.&lt;/p&gt;

&lt;p&gt;If you are in the tech/creative industry you have the skills to help people in your local community and the world at large. This hackathon will bring teams together to build creative solutions that can help people who are in need.&lt;/p&gt;

&lt;p&gt;Who's this event for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers&lt;/li&gt;
&lt;li&gt;Designers&lt;/li&gt;
&lt;li&gt;Project Managers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have experience organising hackathons and would like to help please get in touch with me as I have not organised many events in the past and your help is greatly appreciated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://join.slack.com/t/hackcovid-19/shared_invite/zt-ctt76nqr-dX2e2j6~f1o4aIBQq9tJPw"&gt;Slack channel&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.eventbrite.co.uk/e/hack-covid-19-hackathon-to-help-vulnerable-people-tickets-100614269990"&gt;Eventbrite Link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, please share this event, it will really help.&lt;/p&gt;

</description>
      <category>covid</category>
      <category>event</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>Building digital products: What I’ve learnt so far</title>
      <dc:creator>Daniel Gregory</dc:creator>
      <pubDate>Thu, 27 Feb 2020 20:43:04 +0000</pubDate>
      <link>https://dev.to/mrmadhat/building-digital-products-what-i-ve-learnt-so-far-5ban</link>
      <guid>https://dev.to/mrmadhat/building-digital-products-what-i-ve-learnt-so-far-5ban</guid>
      <description>&lt;p&gt;At the end of last year I wrote a post about how my main goal for the year was to work on developing and releasing digital products. This article is the first review of my progress towards that goal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Always reduce scope
&lt;/h2&gt;

&lt;p&gt;I started with an idea and began thinking about the initial feature set for the MVP. A lesson learnt the hard way, everything but the most essential features should be considered tasks for later iterations. This has been my biggest mistake so far, I thought about multiple features that would be required by the end user and built ‘aspects’ of the features that were mutually required. The idea being that this would serve as a base that features could be built from. For example, users of my app can invite other users into a shared ‘space’. The problem, however, users can’t (currently) do anything in the shared space 🤦🏼‍♂️ If I was to start over I would focus on building just one feature that gives the user value and launch with that. &lt;/p&gt;

&lt;p&gt;The real life impact of this error is that the product launch is delayed longer than it has to be. No launch means no customers and no feedback. I’m still in a position where I don’t actually know if what I’m building will serve the people I’m creating it for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning and personal development
&lt;/h2&gt;

&lt;p&gt;Over the last few months my skill as a web developer has increased substantially. My day to day work has benefited from the app development as I’m able to complete the same tasks faster. I’m putting this down to an improvement in my problem solving skills, I’m working on complex problems and constantly pushing myself outside of my comfort zone.&lt;/p&gt;

&lt;p&gt;I’m also starting to think a lot more about how to build relationships with potential customers. The app I’m building is B2B so I’ve been spending a lot of time on LinkedIn researching potential customers. To my surprise I’ve actually started reaching out to these potential customers, sending messages to the people I’ve connected with. I would never usually message someone out of the blue, in fact I’m not the type of person to message full stop but I’m determined to succeed in building a product that people love and that means finding out what people want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding how to ask for feedback
&lt;/h2&gt;

&lt;p&gt;When I first started ‘cold messaging’ people I was doing it completely wrong. I was being too direct “Hey, we’ve never spoken before have you got any pain points?” I quickly realised this is not a good type of message to send someone who you’ve never spoken to. This forced me to start thinking about the aspects of what I’m building and how it is relevant to the people I’m messaging. My messages turned into “I’m researching X problem area with the intention of making people’s lives less stressful, is this something you’d consider having a chat about?’ So far this approach has worked far better and I’m in the process of arranging my first meeting, hopefully it’ll go well!&lt;/p&gt;

&lt;h2&gt;
  
  
  You need to guard your time furiously
&lt;/h2&gt;

&lt;p&gt;I lead an extremely full life, I have 2 children, I’m training for iron man and constantly working on my side project on top of my full time job. I learnt very quickly that there’s only so much one person can achieve in a given day. The pursuit of my goals has meant that I have very little time for simple things in life like watching TV. It may seem like Iron Man and building a business are two things that shouldn’t be done in tandem and yes that probably is true. However I would argue that my training is forcing me to look after my body which in turn is helping my mind complete the work that it needs to do. It’s just a shame that there’s not another five hours in each day!!&lt;/p&gt;

&lt;h2&gt;
  
  
  Lastly I’m thankful
&lt;/h2&gt;

&lt;p&gt;None of what I’m working on this year could be accomplished without the love and support of my wife. At the end of last year we sat down and discussed my plans and she agreed to support me in anyway she could. I wouldn’t have gotten as far as I have if it wasn’t for her. And for that I’m extremely thankful.&lt;/p&gt;

&lt;p&gt;The next time I write a review of my progress I hope to be sharing a link to my MVP but I’m realising more and more that patience and consistency is the key. So even if I don’t haven’t launched within the next three months it’s not the end of the world because eventually ‘brick by brick’ I’ll get there.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>business</category>
    </item>
    <item>
      <title>Learning Roadmap: Creating Software as a Service</title>
      <dc:creator>Daniel Gregory</dc:creator>
      <pubDate>Tue, 05 Nov 2019 22:13:26 +0000</pubDate>
      <link>https://dev.to/mrmadhat/learning-roadmap-creating-software-as-a-service-e19</link>
      <guid>https://dev.to/mrmadhat/learning-roadmap-creating-software-as-a-service-e19</guid>
      <description>&lt;p&gt;Hi Everyone!&lt;/p&gt;

&lt;p&gt;This is my first post on dev.to, I've been working on creating a roadmap to direct my learning for the next year and I'd really appreciate some feedback and ways that I could improve it. I'd also be interested in any articles/resources that cover the topic of creating software as a service and anything else that you think could be useful. Thanks in advance 😀&lt;/p&gt;

&lt;p&gt;Here is what I have so far:&lt;/p&gt;

&lt;p&gt;One of my main focuses for 2020 is to learn how to develop and release Software as a Service (SaaS). This article outlines the process I’m going to take over the course of the year to accomplish that goal. To start, I want to clarify exactly what I mean when I say Software as a Service to narrow the scope of my learning and ensure I remain focused on a single specific objective.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Definition of SaaS
&lt;/h2&gt;

&lt;p&gt;My definition of Software as a Service is a web app–such as trello–whose business model is based on recurring payment in exchange for access to some or all of the software. The software must provide a service to the end user which is valuable, value is created by saving the customer time, money or both. My focus will be to create standalone web apps and as a result software that exists solely to extend other software, such as WordPress plugins, are not included in my definition.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does success look like?
&lt;/h2&gt;

&lt;p&gt;I will know that I have been successful when one or more of the following is true:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I have a working piece of software that is publicly available&lt;/li&gt;
&lt;li&gt;I have a working piece of software that is publicly available that can accept payment in exchange for access to some or all of the features&lt;/li&gt;
&lt;li&gt;The software I create has a paying customer&lt;/li&gt;
&lt;li&gt;The software I create has over 10 paying customers&lt;/li&gt;
&lt;li&gt;The software I create has over 100 paying customers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Success is not all or nothing, it should be looked at as a scale of success. Failure is also expected and welcomed throughout the learning process but recovery should be quick and lessons should be learnt from the failure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approach to learning
&lt;/h2&gt;

&lt;p&gt;My approach to learning will involve understanding just enough theory to be able to put what I want to learn into practice. I will constantly seek out the quickest way to gain a solid understanding about a subject. For example, if I want to learn about agile development I could spend hours reading a book about agile or, I may find a website that explains the topic well, watch some videos and gain enough understanding so that I reach a point where I feel confident enough to put what I’ve learnt into practice quicker. After attempting what I’ve learnt I expect one of three outcomes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What I have learnt is sufficient enough to allow me to complete the task at hand efficiently&lt;/li&gt;
&lt;li&gt;What I have learnt is sufficient but not efficient&lt;/li&gt;
&lt;li&gt;What I have learnt is insufficient, meaning I cannot complete the task&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I imagine item number one will be a rarity but welcomed non the less, items two and three are more probable and in situations where one of them is the outcome I will return to theory to better understand the task I’m trying to complete. I hope this approach to learning will give me a quick feedback loop which will allow me to move forward quickly and efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning Guidelines
&lt;/h2&gt;

&lt;p&gt;The list below is an initial outline of the items I feel I need to learn/get better at to achieve the goals above, I expect this list to change and grow throughout the year:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Development and deployment of robust software for the web

&lt;ul&gt;
&lt;li&gt;Agile software development&lt;/li&gt;
&lt;li&gt;Aspects of SaaS&lt;/li&gt;
&lt;li&gt;Software Architecture&lt;/li&gt;
&lt;li&gt;Languages and frameworks&lt;/li&gt;
&lt;li&gt;Test Driven Development&lt;/li&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Tooling and Productivity&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Business aspects

&lt;ul&gt;
&lt;li&gt;Validating a product&lt;/li&gt;
&lt;li&gt;Identifying opportunities and value&lt;/li&gt;
&lt;li&gt;Marketing the product/software&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The above is an attempt to gain clarity of thought and clearly specify what it is that I want to achieve in the coming year. Although this article seems to take a somewhat set in stone attitude towards my learning process it should be noted that I expect the above to change throughout the year. This is merely the first step in documenting what I want to achieve and is part of a larger plan to document the overall ‘story’. I know that there are many, many people out there who are smarter and more experienced than I am in the area of software development and I welcome your thoughts, feedback and criticism.&lt;/p&gt;

</description>
      <category>learning</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
