<?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[Code Hangar - Rapid Minimum Viable Software Development for Startups]]></title><description><![CDATA[Code Hangar is an Orlando-based web development company that builds custom full-stack JavaScript web applications. Let's build something together.]]></description><link>https://codehangar.io/</link><image><url>https://codehangar.io/favicon.png</url><title>Code Hangar - Rapid Minimum Viable Software Development for Startups</title><link>https://codehangar.io/</link></image><generator>Ghost 1.0</generator><lastBuildDate>Wed, 22 Apr 2026 19:14:12 GMT</lastBuildDate><atom:link href="https://codehangar.io/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Afraid Your Team Isn’t Working? Discover How Agile Methodologies Can Improve Your Team’s Effectiveness]]></title><description><![CDATA[<div class="kg-card-markdown"><p><img src="https://codehangar.io/content/images/2020/03/woman-in-green-top-using-macbook-beside-group-of-people-1595392.jpg" alt="woman-in-green-top-using-macbook-beside-group-of-people-1595392"></p>
<p>Agile is more than just a fancy buzz word thrown around to make software development sound cool.   As a startup founder, it’s important to understand the intention of the Agile Methodology to fully realize the value.   The good news is, this may be easier to understand and apply than</p></div>]]></description><link>https://codehangar.io/agile-methodologies-improve-team-effectiveness/</link><guid isPermaLink="false">5e5ffeb911b0260650ee8198</guid><dc:creator><![CDATA[Code Hangar]]></dc:creator><pubDate>Wed, 04 Mar 2020 19:26:43 GMT</pubDate><media:content url="https://codehangar.io/content/images/2020/03/woman-in-green-top-using-macbook-beside-group-of-people-1595392-1.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2020/03/woman-in-green-top-using-macbook-beside-group-of-people-1595392-1.jpg" alt="Afraid Your Team Isn’t Working? Discover How Agile Methodologies Can Improve Your Team’s Effectiveness"><p><img src="https://codehangar.io/content/images/2020/03/woman-in-green-top-using-macbook-beside-group-of-people-1595392.jpg" alt="Afraid Your Team Isn’t Working? Discover How Agile Methodologies Can Improve Your Team’s Effectiveness"></p>
<p>Agile is more than just a fancy buzz word thrown around to make software development sound cool.   As a startup founder, it’s important to understand the intention of the Agile Methodology to fully realize the value.   The good news is, this may be easier to understand and apply than you think!  In fact, you are probably already applying agile concepts without even knowing.</p>
<p>Do you create cross-functional teams to develop your products? Agile!</p>
<p>Do you meet regularly as a group to discuss progress? Agile!</p>
<p>Do you gather feedback from end-users early and adjust design? Agile!</p>
<h1 id="theoriginofagile">The Origin of Agile</h1>
<p>Almost two decades ago, a group of software developers frustrated with the ineffectiveness and inefficiencies of traditional development methods got together for a weekend to define a new framework.  Their intent was to establish a framework that satisfies customer needs while:</p>
<ul style="list-style: unset;">
<li>Reducing the burden of documentation </li>
<li>Increasing collaboration and the value placed on people </li>
<li>Establishing a continuous feedback loop that allows for iterative development of applications</li>
</ul>
<p>These thinkers understood that if you build a team of highly motivated individuals, deliver quality software frequently, gather user feedback sooner, and eliminate waste from re-designs or downtime, your chances of success will increase.  As a result of the meeting, these concepts were documented through twelve principles published in under 200 words and titled “<a href="https://agilemanifesto.org">The Agile Manifesto</a>.”</p>
<h1 id="realizingsuccesswiththeagilemethodology">Realizing Success with the Agile Methodology</h1>
<blockquote>
<p>“Ultimately, the goal of modern software development is to reduce the size and increase the frequency of installs or releases while improving the overall quality of the product delivered to the customer.”</p>
</blockquote>
<p>The authors of the Agile Manifesto provided experience-based recommendations on how a company can be more successful with their software development. Since being published, agile concepts are taught in schools and implemented by companies large and small around the globe.</p>
<p>Many companies apply a blended approach of traditional and agile methodologies for software development.  On the flip side, some new methods based on agile concepts have branched out.  There have also been attempts to further simplify the concepts of agile, efforts to expand the scope beyond software development, and in some instances, attempts to create more prescribed approaches based on the original principles.</p>
<p>Ultimately, the goal of modern software developments to reduce the size and increase the frequency of installs or releases while improving the overall quality of the product delivered to the customer.   While agile isn’t one-size-fits-all, startup founders who understand the principles are able to scale agile development principles to fit their business needs and collaborate more effectively with developers.</p>
<h1 id="puttingagileintoaction">Putting Agile into Action</h1>
<p>Developing software using agile methods involves teams of designers, developers, product owners, and other specialists.  Requirements for a new or modified product feature are defined and developers work with their product owners to determine the criteria for acceptable completion of each.  Once a feature is developed, testing against the acceptance criteria is performed, changes are made as needed, and finally, the feature is launched into production based on scheduled release dates.</p>
<p>At Code Hangar, agile methods are applied from ideation to implementation leveraging agile-based 2-week sprints.  These sprints effectively allow for quick changes to design based on customer feedback.  At the beginning of a project, we work with our clients to set expectations and develop a roadmap that is broken down into two-week sprints.</p>
<p>During each sprint, we meet with our clients to review what was completed in the previous sprint and discuss intentions for the upcoming release. Over the course of a sprint, our clients can expect to review progress, verify intentions, and discuss opportunities to adjust strategy based on customer feedback, identified risks, or potential delays.  To learn more about sprints read our blog post titled “<a href="https://codehangar.io/why-sprints-are-key-to-successful-app-development/">Why Sprints are Key to Successful App Development</a>.”</p>
<p>Startup founders are using agile methods every day to create successful products.  Knowledge of the Agile Methodology makes it easier for developers to turn ideas into reality. As companies have become more comfortable with the concepts and expectations of agile methods, the focus has shifted on reducing the size of a product feature being developed while eliminating release schedules and allowing for real-time delivery.</p>
<p>Whether you are just getting started or you’ve worked through several releases, now is as good a time as ever to review your processes and find new ways to apply the agile principles.  We’d love to talk to you about how we can partner with your startup. Feel free to contact us if you want to learn more about our approach to application development or the benefits of our services.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Infinite Diversity in Infinite Combination (or Why Diversity Matters to Us)]]></title><description><![CDATA[Intentionally building a company that values diversity takes concerted effort, but the benefits are worth it — and not just for us, but for our team, our clients, and for society at large.]]></description><link>https://codehangar.io/diversity_matters/</link><guid isPermaLink="false">5d1b52d945e2c91dd315b263</guid><dc:creator><![CDATA[Code Hangar]]></dc:creator><pubDate>Wed, 03 Jul 2019 18:34:55 GMT</pubDate><media:content url="https://codehangar.io/content/images/2019/07/black-collaboration-cooperation-943630.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2019/07/black-collaboration-cooperation-943630.jpg" alt="Infinite Diversity in Infinite Combination (or Why Diversity Matters to Us)"><p>The Vulcans had it right with their saying “infinite diversity in infinite combination.” Because when you don’t limit your scope of potential combinations, the possibilities are endless.</p>
<p>To be the best at what we do, we want to build a company that values diversity. While discussing diversity can too often seem like a superficial corporate initiative, it’s very significant to us.</p>
<p>At Code Hanger, we believe <strong>it is important to be intentional about surrounding ourselves with diverse groups of people.</strong> It’s not just going to happen on it’s own.</p>
<p>Most importantly, the biggest reason we think it’s important to be inclusive and foster diversity, is <strong>it’s just the right thing to do</strong>. Everyone has a right to exist in this world with the same opportunities and freedoms as the next person regardless of their gender, race, sexual orientation, or religion. This is the world we believe in and want to live in, so it’s only natural we would do what we can to foster that within our own company.<br><br>
<img src="https://codehangar.io/content/images/2019/07/adult-business-people-businessmen-1243524.jpg" alt="Infinite Diversity in Infinite Combination (or Why Diversity Matters to Us)"></p>
<p>It is reasonable to feel most attracted to like-minded people who look like us, and it’s difficult not to build a self-reinforcing echo chamber because of that tendency. To combat that, we know we have to intentionally surround ourselves with people we don’t automatically understand or relate to. Otherwise you just get yes men and stagnant traditional processes.</p>
<p>Intentionally building a company that values diversity takes concerted effort, but the benefits are worth it — and not just for us, but for our team, our clients, and for society at large. Here are just some of the most impactful ways we know that diversity benefits our company’s performance directly.</p>
<h2 id="diversityfosterscreativityandinnovation">Diversity Fosters Creativity and Innovation</h2>
<p>Teams that have a more diverse staff are measurably more creative and innovative. Homogeneous groups will tend to have overly similar points of view. Their spheres of knowledge will overlap, backgrounds and skill sets will be comparable which can lead to the same strength or weaknesses in a team. They can also share unconscious biases or normative presumptions of how the world works. Therefore, they will often reach similar conclusions.</p>
<p>In contrast, when there is a significant diversity of perspectives based on different lived experiences, teams can find a wider array of solutions to the problems they’re trying to solve.</p>
<p>This is because more perspectives lead to more ideas. When there are more ideas shared collectively, people are better able to tap into more innovative and creative approaches to problem solving as they connect new and interesting possibilities.</p>
<p>Exposure to only limited experiences and points of view can stifle ideas and stultify business processes — and, by extension, creativity — in employees over time. Of course it’s important to continually get stronger at various core skills or specialized areas of expertise. However, it’s also important to continually take in new ideas and ways of thinking and apply them in ways that can help us grow as professionals.</p>
<p>When there are a lot of varied perspectives on our team, we become better able to collectively see problems differently. We can mix and remix solutions proposed by different people and find ways to better serve more diverse <a href="https://codehangar.io/the-importance-of-releasing-early-and-often-in-app-development/">customer bases</a>. We collectively share our ideas with each other. This allows us to more efficiently pool them together in order to find creative solutions that hadn’t previously occurred to us.</p>
<h2 id="diversitybuildscompanyconfidencewithengagedemployees">Diversity Builds Company Confidence with Engaged Employees</h2>
<p>We know that we all will do better collectively if we have a team of engaged individuals who work together towards our goals. That’s why we value transparency and openness at Code Hangar. However, in order to foster that transparency, we need to create a team where everyone feels like they have a voice.</p>
<p>One of the most important reasons for keeping an eye on fostering diversity on our team is to avoid echo chamber traps. When a company builds a culture of limited perspectives, it creates a space conducive for everyone to uncritically agree and validate each other, perpetuating status quo practices whether they’re as effective as they could be or not.</p>
<p>Yes, we all love that awesome feeling you get when you are validated. However, it doesn’t always lead to superior quality work. We want to offer the best solutions to our clients.</p>
<p>When everyone who surrounds you isn’t able to offer any significantly different perspectives because theirs are mostly the same as yours, it’s easy to assume that how things have traditionally or recently been done in the past must remain correct or adequately optimal. However, an echo chamber isn’t representative of the entirety of the real world or concerning any potential customer-base. Serious problems can too often result if incorrect assumptions are made in either business or personal relationships.</p>
<h3 id="disagreementsarentabadthing">Disagreements aren’t a bad thing!</h3>
<p>Differences are important and often offer crucial perspectives regarding more diverse ways to see and engage with the world. When we automatically choose to reject or exclude opposing points of view, this leads to ignorantly presumptuous and limited thinking.</p>
<p>Instead, we want our team members to feel confident that their points of view are valuable to the success of the team. When employees know their perspectives will be listened to and considered seriously, even if they’re not always agreed with. This way, they’ll feel much more able to be open and share potentially innovative ideas freely.</p>
<h2 id="diversityattractsbettertalentandbuildsabetterteam">Diversity Attracts Better Talent and Builds a Better Team</h2>
<p>It’s really important for us to build a company that values the people who work for it. However, we also want to attract the best talent we can in order to serve our customers as efficiently and effectively as possible. However, these two ideas are connected rather than at odds.</p>
<p>Hiring a new team member gives us the opportunity to bring a new voice onto the team. These new perspectives help remind us that there is more going on in the world than just what we see in our everyday bubbles.</p>
<p>A big benefit of diversity that affects Code Hangar directly right now is our team’s diversity of location. We have team members scattered all over the country and even the world. Because of this, we are able to see outside of our Central Florida and even America-centric bubble to provide a more global perspective to the work we do, and even our personal lives.<br><br>
<img src="https://codehangar.io/content/images/2019/07/bump-collaboration-colleagues-1068523.jpg" alt="Infinite Diversity in Infinite Combination (or Why Diversity Matters to Us)"></p>
<p>What these varied perspectives help remind us is that social issues don’t play out identically everywhere in the world. Costs of living, culture and customs, and even values vary. These perspectives are valuable and can strengthen our team when a new member joins.</p>
<p>New perspectives can push teams to grow. When we face differences in perspectives, we can become more self aware of our own behavior and how it might affect others. This allows everyone to build better relationships by becoming more empathetic regarding differences between us as well as overarching similarities across cultures.</p>
<p>This also means we always remain open to finding the best talent anywhere — so we don’t limit our searches due to misguided preconceived notions regarding who a new hire needs to be like.</p>
<h2 id="diversitysolvesproblemsfaster">Diversity Solves problems Faster</h2>
<p>People with different backgrounds bring more varied ideas to the table. When a diverse staff is in a meeting trying to problem-solve solutions, different perspectives help more efficiently spot flaws with proposed solutions to problems or superior alternative approaches we might not have initially anticipated.</p>
<p>This can include big and obvious things like a new feature idea that helps significantly improve a product. But it can also include more subtle things like having better understandings of the current market or how users might more ideally interact with a piece of technology in ways that might have otherwise gone unnoticed and underserved.</p>
<p>Homogeneous ideas lead to greater possibilities of missing more ideal solutions a problem. In reality, it’s not just that diverse teams are preferable because of an ethic of diversity; they’re preferable because they’re more likely to come up with superior solutions to problems at hand more quickly.</p>
<p>This means that we can build stronger apps faster. Otherwise, a lot of extra time could be wasted releasing limited or presumptuous ideas to the market and waiting on feedback from a diverse group of users. Instead, a more diverse staff can better catch flaws or defects well before significantly more time would need to be invested in building features that ultimately don’t work as well as they should and finding out via customer feedback.</p>
<h2 id="adiverseteamcanavoidmistakesbasedonlackofperspective">A Diverse Team can Avoid Mistakes Based on Lack of Perspective</h2>
<p>A cautionary tale in this regard that always sticks out to us is the mistake and PR nightmare that <a href="https://www.theverge.com/2014/9/25/6844021/apple-promised-an-expansive-health-app-so-why-cant-i-track">HealthKit (produced by Apple)</a> caused because they lacked adequate diversity on their team. While the HealthKit allowed users the ability to track health indicators like steps, height, and blood-alcohol content, it lacked a basic menstruation tracker. This missing feature in the design of their product left out a crucial health indicator for a huge percentage of the population, which meant that they weren’t being offered a product by Apple that actually met their needs as promised.</p>
<p>And the biggest reason for this hugely problematic oversight in design? It was because there wasn’t adequate representation of a diversity of people in the design phase of the project.</p>
<p>An important lesson can be learned from Apple’s public mistake where they lost out on potential customers due to such a glaringly missing product feature. While the mistake might seem obvious to some, it wasn’t when they designed the product. However, if Apple had better prioritized putting together a diverse design team, they wouldn’t have been in danger of producing a one-sided solution.</p>
<h2 id="awidercustomerbaseisservicedbetterbydiverseteams">A Wider Customer Base is Serviced Better by Diverse Teams</h2>
<p>We believe diversity is important: not just at Code Hangar, but in all of society, when it comes to better problem solving. It’s important to not deny the needs and viewpoints of marginalized people — or presume that the only important or most profitable priority is to serve what might be considered the normative point of view.</p>
<p>To us, it’s not good to build systems around edge cases or situations that don’t occur often. On a homogenous team, marginalized voices could be seen as these edge cases that don’t need to be addressed. Instead, on a diverse, open team, their points of view are valued as part of a broader and more pluralistically representative normative point of view where they also need to be centered.</p>
<h2 id="itmakesthemostbusinesssensetobuildadiversecompany">It Makes the Most Business Sense to Build a Diverse Company</h2>
<p>The simplest and most straightforward answer regarding why diversity is valued at Code Hangar we saved for last. Honestly, it makes the most financial sense to value and build a diverse team.</p>
<p>We highlighted this earlier by pointing out how time can be saved by avoiding onerous and costly mistakes — and how a stronger <a href="https://codehangar.io/why-sprints-are-key-to-successful-app-development/">app can be built faster</a> by having a wider variety of perspectives to offer creativity and innovation.</p>
<p>However, we also know that more diverse companies have tended to be more profitable, overall — especially those companies which have a lot of diversity among directors and other high level management positions.<br><br>
<img src="https://codehangar.io/content/images/2019/07/approval-correct-diverse-1282270.jpg" alt="Infinite Diversity in Infinite Combination (or Why Diversity Matters to Us)"></p>
<p>With more diverse ways to get the job done considered, discovered, and implemented when warranted, we can learn how to be much more efficient in the work that we do. We can more easily access a wider pool of the best and brightest ideas and apply them to our company’s practices and technology stacks. We can design superior workflows and iterate toward all the best increasingly efficient techniques and approaches we can find.</p>
<p>That means we’re able to be more flexible, more effective, and to respond better and faster than the competition. This is a straightforward win for everyone: including our customers, our employees, and Code Hangar as a company.</p>
<p>Want to get started working with a software team that values diversity and transparency in order to build stronger products for you that can reach and appeal to a wider base of potential customers? Check out our <a href="https://codehangar.io/8-week-mvp/">8-week MVP program</a> or get a <a href="https://codehangar.io/contact/">custom quote</a> for a project today!</p>
</div>]]></content:encoded></item><item><title><![CDATA[Our Company Values and the Culture it Fosters for Our Team]]></title><description><![CDATA[<div class="kg-card-markdown"><p>Code Hangar started as an idea between Ian and I to bring together a collective of developers who could leverage their expertise as needed. However, over the years we’ve figured out our core strengths as a company and the clients we serve best. Today we specialize in <a href="https://codehangar.io/8-week-mvp/">rapid minimum</a></p></div>]]></description><link>https://codehangar.io/our-company-values-and-the-culture-it-fosters-for-our-team/</link><guid isPermaLink="false">5cf14bc65076e43ec71406d6</guid><dc:creator><![CDATA[Cassandra Wilcox]]></dc:creator><pubDate>Wed, 19 Jun 2019 18:42:00 GMT</pubDate><content:encoded><![CDATA[<div class="kg-card-markdown"><p>Code Hangar started as an idea between Ian and I to bring together a collective of developers who could leverage their expertise as needed. However, over the years we’ve figured out our core strengths as a company and the clients we serve best. Today we specialize in <a href="https://codehangar.io/8-week-mvp/">rapid minimum viable app development</a> for growth stage tech startups.</p>
<p>At the heart of our company is still that vision for a collective culture of developers working towards similar goals. However, as we have grown, we’ve decided to structure our company differently than our original vision of independent developers working together. As we hired on <a href="https://codehangar.io/about/">team members</a>, it’s been really important to us to build a work culture at Code Hangar that gets the job done for a clients but is also a company our employees want to work and grow with.</p>
<p>Values are important to us and we do what we can to build a company we would want to work for. We believe building a better company culture will build us a strong and loyal team. Our team is our greatest asset and we want to treat them as such.</p>
<h3 id="atcodehangarwehaveafewcorevaluesthathelpguideourdecisionmaking">At Code Hangar, we have a few core values that help guide our decision making.</h3>
<ul>
<li>We value transparency</li>
<li>We value a fun communal work environment</li>
<li>We value experimentation and iteration</li>
<li>We value a company culture that allows employees focus on their lifestyles and personal growth, not just work</li>
</ul>
<p>To be transparent, as our first value states, we are also a young company. As we celebrate three years, we have four full time employees and a team of contractors we work with regularly. The policies we have in place now might change and evolved over the years as we grow.</p>
<p>However, we want to share where we are today with our company policies and culture. Get to know us so you can learn a little more about who those developers are behind the computer screens.</p>
<h2 id="wevaluetransparency">We Value Transparency</h2>
<p>Code Hangar is totally remote. We love it that way and it allows our team to prioritize lifestyle. Currently, we have four employees who can work from anywhere in the world and in fact, two are in Bulgaria at the time of writing this blog!</p>
<p>Because we have a team who works remotely, it’s important that we’re transparent both with our team and our clients. It’s a huge part of our culture. We decided early on we would be open with our team about:</p>
<ul>
<li>Monthly Revenue &amp; Costs</li>
<li>Company Goals &amp; OKRs</li>
<li>Company Calendar</li>
<li>Transparent Salary Tiers</li>
</ul>
<p>Yes! It can feel scary to be this transparent with our employees. However, we know it builds trust amongst our team. This is especially true with salaries. Because we have transparent tiers, all employees know where they stand which eliminates the need for a salary negotiation process and ultimately reduces toxic competition between team members.</p>
<p>We also see skillsets of employees differently than other software development companies. Some skills require more mental and emotional loads than others. We don’t want to take that work for granted so salaries reflect that in some positions. So conceptual work from a designer is as important to the finished product for us as the technical work a developer will contribute.</p>
<p>Transparency extends to the revenue and expenses of our company too. We want everyone at Code Hangar to be invested in our company goals. The more involved and invested our team is in our success, the more they feel a sense of trust, freedom, and flexibility with us. They’ll also work more autonomously.</p>
<p>We’ve seen inequality in the offic can derail a company from reaching its goals. Being transparent allows us to have a company culture where our team feels appreciated, seen, empowered to come to work, get the job done, and get on with their lives.</p>
<h2 id="wevalueacommunalfunworkenvironment">We Value a Communal Fun Work Environment</h2>
<p>With a remote staff that oftentimes is traveling the world, we have to get really creative in how we foster camaraderie amongst our team. Luckily we’re a technology company full of creative and fun individuals and we don’t take ourselves too seriously most of the time (we save all the seriousness for the results we provide our clients).</p>
<h3 id="communicationstyle">Communication Style</h3>
<p>Daily communication is done through Slack channels. Team members check in each day to report what they worked on the previous day and what they’ll be working on that day. This daily communication is also where we encourage the team to ask for help if they need it.</p>
<p>We love using Slack because of the relaxed style of communication. This is where the daily chatter happens and inside jokes and memes run wild. To keep us in line though, our dearly disturbed Slackbot, Goldenboy, who was lovingly created by a member of our team, keeps a “swear jar” for us. Goldenboy doesn’t always get things quite right which can lead to unexpected laughs and face-palms.</p>
<p><img src="https://codehangar.io/content/images/2019/05/Screen-Shot-2019-05-08-at-6.07.41-PM.png" alt="Screen-Shot-2019-05-08-at-6.07.41-PM"><img src="https://codehangar.io/content/images/2019/05/Screen-Shot-2019-05-08-at-6.04.27-PM.png" alt="Screen-Shot-2019-05-08-at-6.04.27-PM"></p>
<p>If we need to correspond verbally, we’ll hop on Zoom. This gives us an opportunity to chat directly with team members one on one. And because sometimes the technology we use is just too fun not to play with, we goof around with each other using fun filters and background to mask the boring backgrounds of our home offices.</p>
<p><img src="https://codehangar.io/content/images/2019/05/Screen-Shot-2019-05-10-at-10.37.09-AM.png" alt="Screen-Shot-2019-05-10-at-10.37.09-AM"></p>
<h2 id="wevalueexperimentationanditeration">We Value Experimentation and Iteration</h2>
<p>The tech world moves fast. It’s important to think on your feet. You have to get comfortable with failing and making mistakes because it’s built into you business process. This helps us find the right solutions for our clients.<br><br>
We echo this approach with our company culture too. We’re not afraid to change and pivot our processes in order to work better together.</p>
<p>However, we can’t always see the problems in our own process, so it’s important that al ofl our employees are invested and empowered to share how to improve our company procedures. In fact, we expect this from our team members. Everyone brings a different expertise and perspective. We need to listen to everyone from the bottom up in order to make stronger decisions for the company.</p>
<p>We encourage this both in formal sessions with twice monthly retros. But we also highly encourage the team to bring issues up when they arise through informal means so we can address and fix a problem as a team on the spot.</p>
<h3 id="wecelebratesuccessestogetherbutdonthidefromourfailures">We celebrate successes together but don’t hide from our failures</h3>
<p>In order to have a team that openly communicates with each other, it’s important that we don’t punish failure. We have to experiment in tech to see what works. This means we will inevitably fail at some point. If we want our team members to try new things and push limits, we need to make space for that failure to happen.</p>
<p>Because failure is an inherent part of our business model, we also know that it’s crucial to celebrate our successes along the way. It’s important to keep company moral up when the work is hard and demanding.</p>
<p>While we do offer twice annual bonuses based on company net profits, little rewards along the way are powerful for moral. Because our team is remote, we can’t just throw a pizza party and call it a day, instead we have to be more creative.</p>
<p>For this we turn to the team when we reach big milestones like completing an 8-Week MVP. We brainstorm together on something we would all enjoy. Some of the incentives the team has recently earned are things like Amazon gift cards, Quip Toothbrushes, and cookies.</p>
<p>When we let everyone be a part of celebrating small wins, team comradery soars. Even when we’re thousands of miles apart.</p>
<h2 id="wevalueacompanyculturethatallowsemployeesfocusontheirlifestylesandpersonalgrowthnotjustwork">We value a company culture that allows employees focus on their lifestyles and personal growth, not just work.</h2>
<p>Can a tech company be a lifestyle company? Because that is exactly what we consider ourselves. Our team is what makes Code Hangar what it is. We also know that those people have fulfilled lives to get to outside of work.</p>
<p><img src="https://codehangar.io/content/images/2019/05/Screen-Shot-2019-05-10-at-11.29.22-AM.png" alt="Screen-Shot-2019-05-10-at-11.29.22-AM"></p>
<p>In order to have our team at work fully engaged, we make sure we have a minimal company culture that focuses on the work and how we can achieve it together. That way, our team can show up to work, get the job done, and still have energy to focus on the important parts of life like family and friends.</p>
<p>Yes, we actually want our team to leave the office and unplug.</p>
<p>Being a remote company inherently allows us to attract people who also want work to be a part of their life and not have their life be about their work.</p>
<h3 id="atminimumweknewwewouldofferbenefitslike">At minimum, we knew we would offer benefits like:</h3>
<ul>
<li>Health Insurance</li>
<li>Retirement Accounts</li>
<li>Continuing Education and Learning Resources</li>
<li>Paid Vacation</li>
</ul>
<p>However, we went a bit further and thought about ways to help our team develop professionally and personally while also taking care of their personal needs.</p>
<h3 id="supportpersonalgrowth">Support Personal Growth</h3>
<p>Personal growth is important for professional development. We want to offer educational resources to help team members achieve goals around their own personal growth.</p>
<h3 id="unlimitedvacationpolicy">Unlimited Vacation Policy</h3>
<p>We love our time off and value it highly, it’s also super important to avoid burnout. We offer unlimited paid vacation days and encourage everyone to take at least four weeks of vacation a year. The time off work gives people time to recharge so they can return more focused and ready to tackle the job ahead.</p>
<p>Open communication and transparency is required to make this work and trust the team. In exchange for the time off, we only ask that we can find a way to cover their projects while they’re gone.</p>
<h3 id="commitmenttothecommunity">Commitment to the Community</h3>
<p>Communities are important to personal growth. We feel a responsibility to support the communities we belong to and proudly allocate a portion of our company’s profits to communities that promote learning and diversity in tech.</p>
<p>We also encourage our team to give back to their communities too, in whatever way they can. They can do this through public speaking, mentoring, volunteering, and contributing to open source projects.</p>
<p>Code Hangar is a company with values and a culture we are proud of. It’s important to keep the commitment to stay transparent, offer progressive values to enhance the lifestyle of our employees, and to foster an environment that is fun to show up to and work at.</p>
<p>As we bring on new team members as we grow our company, we take extra care to find people who can match in both skillset and cultural fit to our company values, goals, and objectives. If you are interested in joining our team, checkout our job board to see if there are any open positions available.</p>
</div>]]></content:encoded></item><item><title><![CDATA[The Importance of Releasing Early and Often in App Development]]></title><description><![CDATA[<div class="kg-card-markdown"><p>One of the most important aspects of maximally effective app development is to release software features early and often. No matter what stage of app development you’re in, the sooner you can get essential feedback from your target users, the stronger the product you will ultimately build.</p>
<p>Releasing early</p></div>]]></description><link>https://codehangar.io/the-importance-of-releasing-early-and-often-in-app-development/</link><guid isPermaLink="false">5c9d1081d4ff295b917bae7b</guid><dc:creator><![CDATA[Code Hangar]]></dc:creator><pubDate>Thu, 18 Apr 2019 16:01:40 GMT</pubDate><media:content url="https://codehangar.io/content/images/2019/03/adult-app-developer-business-1181244--1--1.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2019/03/adult-app-developer-business-1181244--1--1.jpg" alt="The Importance of Releasing Early and Often in App Development"><p>One of the most important aspects of maximally effective app development is to release software features early and often. No matter what stage of app development you’re in, the sooner you can get essential feedback from your target users, the stronger the product you will ultimately build.</p>
<p>Releasing early and often is an iterative process wherein repeated cycles of agile operations work toward continuously refining and enhancing the user's experience using your software. With each iteration, development moves forward by achieving incremental benchmark goals within each cycle. We accomplish this at Code Hangar through <a href="https://codehangar.io/why-sprints-are-key-to-successful-app-development/!%5Badult-app-developer-business-1181244--1-%5D(/content/images/2019/03/adult-app-developer-business-1181244--1-.jpg)">sprints that typically last two weeks </a>.</p>
<p>This process is best facilitated by regular feedback at each stage of development, even beginning stages when you may only have a prototype. We encourage start-ups to test every assumption with potential customers at every stage of the process — even if, at first, that might be through initial feedback from founders, potential investors, or friends and family.<br><br>
<img src="https://codehangar.io/content/images/2019/03/chairs-developer-development-1181376.jpg" alt="The Importance of Releasing Early and Often in App Development"></p>
<p>The goal is to create a feedback loop that allows you to test whether your assumptions are actually on target. If they are not, your company can more easily pivot and adjust priorities as quickly as possible, or as soon as the next sprint begins. This allows the development process to be ongoing without wasting time building and rebuilding features which ultimately costs a lot more money and doesn’t serve your customers' needs as well.</p>
<h2 id="releaseyourmvpquickly">Release Your MVP Quickly</h2>
<p>Once you’re ready to build your app, it’s critically important to get a Minimum Viable Product into the hands of your customers as quickly as possible. At Code Hangar, we specialize in rapid design and development of version zero software applications for lean tech startups. We accomplish this through iterative sprint cycles of agile development — and our most popular specialty is our 8-Week MVP package.</p>
<p>In just eight weeks, we produce a release-ready full-stack application with common features like user accounts and profile management, plus one or two high-impact customized user workflows. Within eight weeks, the product is ready to be used to gather initial feedback from users.</p>
<p>We believe that releasing an app as an MVP at the earliest possible iteration is crucially important. Once feedback is received from actual users, augmented feature updates and timely bug fixes can be much more efficiently focused.</p>
<p>This process allows the development team to more effectively leverage users’ feedback to determine what work most urgently needs to be done in the next sprint. We know from experience that this ultimately builds a better app at lower costs than more traditional methods.</p>
<p><img src="https://codehangar.io/content/images/2019/03/analysis-business-coffee-1549702.jpg" alt="The Importance of Releasing Early and Often in App Development"></p>
<h2 id="regularreleaseschedulesestablishimpressivecustomerserviceexpectationsearlyandbuildauthoritywithusers">Regular release schedules establish impressive customer service expectations early and build authority with users.</h2>
<p>App development is never completely finished because applications are not static. Apps are usually seen as tools to help users accomplish something in a new or more effective way. You want users to happily return to your app over and over again. When you release early in the development process, you’re able to gain valuable feedback from your most active users, many of whom are savvy power users for your app — and can help you better understand the long term needs your app can solve for them.</p>
<p>When you’re able to create new features and fix the most pressing problems identified by your most vocal customers in a timely manner, they’ll trust that they will be able to enjoy using your app for years to come.</p>
<p>The efficiency of this process is a crucial customer service benchmark. Because your users will see that you’re continually working to refine and enhance your product and taking their feedback into consideration to make something that is tailored for them, you will better earn and keep their trust and confidence.</p>
<p>One of the most important things you can do as a start-up is to quickly build this sort of relationship with your user base. To do this, you need to rapidly deliver targeted solutions based on the most pressing needs or wishes they express to you. Then, continue listening to them to provide even greater enhancements and build an app comprehensively designed with their feedback and experiences in mind. This creates efficiently constructive feedback loops that will help much more rapidly build a network of customers who love your app and enthusiastically recommend it to others.<br><br>
<img src="https://codehangar.io/content/images/2019/03/american-casual-cellphone-1484566.jpg" alt="The Importance of Releasing Early and Often in App Development"></p>
<p>Releasing updates early and often allows you to create positive feedback loops that consistently communicate to your customers that you’re actively listening and rapidly responding to their needs and preferences. The best way to do this is by releasing the highest impact features as quickly as possible. By doing this, you show your most loyal customers that you value them. In turn, they’ll continue to use and share your app at higher rates — becoming your most effective and authentic cheerleaders and spokespeople.</p>
<p>In conclusion, we hope we’ve helped you understand why testing your assumptions with real market feedback early and often in the development process is so important. Ultimately, being able to test your assumptions with real users earlier will allow you to build a stronger product in less time, and with a smaller budget.</p>
<p>If you’re ready to get your app released to market as quickly as possible, check out our <a href="https://codehangar.io/8-week-mvp/">8-week MVP</a> service! Or we can help you plan a <a href="https://codehangar.io/full-service/">customized development package</a> to fit your needs.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Why Sprints are Key to Successful App Development]]></title><description><![CDATA[An agile framework of software development that focuses on sprint cycles allows startups to leverage limited resources in smart ways and stay competitive. ]]></description><link>https://codehangar.io/why-sprints-are-key-to-successful-app-development/</link><guid isPermaLink="false">5c7ffbbc1e17967eafbf803b</guid><dc:creator><![CDATA[Code Hangar]]></dc:creator><pubDate>Thu, 07 Mar 2019 13:50:18 GMT</pubDate><media:content url="https://codehangar.io/content/images/2019/03/architect-businesswoman-composition-313691.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2019/03/architect-businesswoman-composition-313691.jpg" alt="Why Sprints are Key to Successful App Development"><p>Startups need to stay competitive and use their limited resources in smart ways. We believe that is best accomplished through an agile framework that takes an iterative approach and develops software incrementally. Because the software development process is an ongoing one, sprint cycles create that agile framework that allows teams to pivot much more easily in order to respond to a number of changing priorities.</p>
<p>However, a sprint based pricing model versus a project based price for development can be confusing if you are not familiar with it. Project based pricing may seem more straightforward because you can define all the software development features you will recieve for a fixed price. At the end of the project, you would ideally receive exactly what you envisioned and paid for.</p>
<p>Project based prices are easy to understand. However, they can be too rigid for maximally efficient and agile modern software development. Luckily, sprint cycles can accomodate the needs of modern ongoing software development.</p>
<h2 id="whysprintcyclesareabetterinvestment">Why Sprint Cycles are a better investment.</h2>
<p>At Code Hangar, we encourage our clients to release value-creating software as early and as often as possible. This approach is based on <a href="https://www.mindtools.com/pages/article/build-measure-learn.htm">Lean Startup Methodologies</a> and what has worked best with our clients. This way, stakeholders and developers can test their assumptions about the app much earlier, get feedback from users, and pivot or scrap misguided priorities if the original plan doesn’t quite ideally suit the needs of the users it serves in actual practice.<br><br>
<img src="https://codehangar.io/content/images/2019/03/adult-app-developer-business-1181244.jpg" alt="Why Sprints are Key to Successful App Development"></p>
<p>This degree of flexibility and adaptability isn’t possible with longer-timeline traditional “waterfall” project scopes and releases. With project large scopes, delays or changing requirements at any stage of the process can compound and impact subsequent stages. This can lead to extended release dates and longer periods without market feedback.</p>
<p><strong>More importantly, financial resources could be wasted on building features that customers never actually use.</strong></p>
<p>Instead, with sprints, agile teams are able to respond to market needs quickly and create a service model that allows their most valuable users to feel heard. In turn, this interaction facilitates the development of an overall better product more quickly and at a lower cost than would be possible with traditional project based approach.</p>
<h2 id="whatisasprint">What is a 'sprint'?</h2>
<p>According to <a href="https://www.scrum.org/resources/what-is-a-sprint-in-scrum">Scrum.org</a>, a sprint is:</p>
<blockquote>
<p>“A time-box of one month or less during which a ‘Done,’ useable, and potentially releasable product increment is created. Sprints have consistent durations during a development effort. A new sprint starts immediately after an old sprint.”</p>
</blockquote>
<p>At Code Hangar, we have found a two week sprint cycle to be ideal for most projects. This ensures that app users get a steady stream of new features, updates, and <a href="https://codehangar.io/how-to-successfully-navigate-an-existing-code-base-as-a-n00b/">bug fixes</a>.</p>
<p>We determine what work will be done and delivered by the end of the sprint before we start the cycle. In order to provide the most value, the requested features and enhancements are broken down and prioritized into one of four categories:</p>
<ul>
<li>Priority 1: High Impact, low effort investment</li>
<li>Priority 2: High Impact, high effot investment</li>
<li>Priority 3: Low impact, low effort investment</li>
<li>Priority 4: Low impact, high effort investment</li>
</ul>
<p>Large workflows and features can be planned out over multiple sprint cycles<br><br>
while simultaneously working to deliver smaller features at the end of every sprint. This way, even if a larger feature takes three or four sprints to accomplish, we never let too much time pass before a value-creating feature or enhancement is released to users.</p>
<p>For clients who only have a <a href="https://codehangar.io/take-your-app-idea-to-a-prototype-in-5-easy-steps/">prototype</a> and have no software yet, we plan out multiple sprint cycles that will build a Minimum Viable Product (MVP) as quickly as possible, <a href="https://codehangar.io/how-we-launched-florida-pycons-conference-app-for-ios-and-android-in-just-8-weeks/">usually within 8-weeks</a>. This way, founders can begin to test the market regarding assumptions they made with the initial design and build a user base ASAP.</p>
<p>We invite founders, or whoever is closest to customers, to participate in our regular sprint reviews and planning meetings as they will offer valuable perspectives. In the early stages of a startup, founders are often closest to customers and can offer feedback at those stages. As the customer base grows, we will also address that feedback in sprint reviews.</p>
<h2 id="whywesprintatcodehangar">Why We Sprint at Code Hangar.</h2>
<p>Sprints are best suited for ongoing development where it is difficult or unfavorable to define what “done” looks like. With a regular release schedule, feedback can be gathered from users and new design features can easily be scheduled into future sprints to respond to arising needs. This also allows much greater flexibility to pivot toward unexpected priorities if the market demands it.</p>
<p>In contrast, longer project scopes delay releasing new or updated features to customers. This also delays gathering invaluable customer feedback to inform ongoing development.</p>
<p>However, in sprint-based development, each sprint represents the smallest scope that can viably be released to customers in a short period of time. This ensures development is closely aligned with customer needs.</p>
<h2 id="purposeofsprintreviewplanning">Purpose of Sprint Review &amp; Planning</h2>
<p>It’s important for sprint cycles to include review and planning meetings with the development team and founders or stakeholders. Meetings will review design and development deliverables from the most recent sprint. With feedback discussed in the meeting, adjustments to deliverables in the upcoming sprint can be made.</p>
<p><img src="https://codehangar.io/content/images/2019/03/agenda-concept-development-7376.jpg" alt="Why Sprints are Key to Successful App Development"><br><br>
As features are delivered to customers, their feedback will often be surprising, and founders may learn things they didn’t originally anticipate. In sprint planning meetings, we’re able to constructively discuss what we have learned from user feedback. That information will either confirm that our plan for the next sprint is on target. Or we will adjust if priorities have changed.</p>
<h2 id="howsprintreviewandplanningprocessworksatcodehangar">How Sprint Review and Planning Process Works at Code Hangar</h2>
<p>Sprint Review and Planning is typically a one hour meeting that happens at the end of one sprint and prior to the beginning of the next sprint. These meetings are not only valuable for sprint cycle review, but it also keeps communication open between us and the start-ups we work with. With a sprint model, stakeholders are guaranteed to have an in depth discussion about ongoing app development worked into their pricing structure about every two weeks.</p>
<p>We hope this gives you a better understanding about the benefits of our agile model for app development using sprint cycles. We work exclusively in this model because we believe that it provides the best value to our customers’ long term investment needs.</p>
<p>Plus, unlike traditional project scope pricing that requires large deposits (sometimes 50% of the total cost) up front before work can begin, sprint pricing is billed to clients after every sprint. This way, the customer actually pays for both work performed and development that is maximally useful to their users and responsively prioritized.</p>
<p>Are you ready to dive into your first sprint with us? Contact us about our <a href="https://codehangar.io/8-week-mvp/">eight-week</a> to MVP or <a href="https://codehangar.io/full-service/">custom development packages</a>. We’d love to talk to you about how we can partner with your startup.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Take Your App Idea to a Prototype in 5 Easy Steps]]></title><description><![CDATA[<div class="kg-card-markdown"><p>A software prototype is a necessity for anyone who is in the early stages of an <a href="https://codehangar.io/successfully-build-app-every-stage-business/">app development process</a>. It will help you understand your own product better which will allow you to communicate your vision more effectively to software developers, future users, and even potential investors. In this blog,</p></div>]]></description><link>https://codehangar.io/take-your-app-idea-to-a-prototype-in-5-easy-steps/</link><guid isPermaLink="false">5c6efed03f1413390a41c361</guid><dc:creator><![CDATA[Code Hangar]]></dc:creator><pubDate>Fri, 22 Feb 2019 17:00:00 GMT</pubDate><media:content url="https://codehangar.io/content/images/2019/02/blur-cellphone-close-up-196646.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2019/02/blur-cellphone-close-up-196646.jpg" alt="Take Your App Idea to a Prototype in 5 Easy Steps"><p>A software prototype is a necessity for anyone who is in the early stages of an <a href="https://codehangar.io/successfully-build-app-every-stage-business/">app development process</a>. It will help you understand your own product better which will allow you to communicate your vision more effectively to software developers, future users, and even potential investors. In this blog, we’ll break down the five steps needed to take your idea for an app to a clickable digital prototype.</p>
<h2 id="1definetheappsusers">1. Define the App’s Users</h2>
<p>The first step in early app development work is to define the core users of the app. While you might have a long term vision to help a large general audience, at first, you need to define who the early users are and why they need your app. It’s also important to think about how they’ll find out about your app and the steps they’ll take to use it.</p>
<p>Even large companies like Facebook and Amazon started with a small defined goal. Facebook wanted to create an online college database of student profiles while Amazon created a digital bookstore. They were only able to grow and expand to a larger audience because they first designed a product for a narrowly defined group. Only later did they expand their target users.</p>
<p>Just like those big companies solved a narrowly defined problem at first, you also need to define a specific problem your app will solve for the core users you want to serve.</p>
<p>There are two categories of users your app might support: either providers or consumers. A provider is someone who offers a product or service through your app. A consumer is someone who uses the tools or services or buys product from the app. Some apps will connect providers and consumers to each other. However, your app might only be a tool for one type or the other.</p>
<p>However, some apps might need to be a tool to both types of users, even from the beginning. If that’s the case, both types of users will have different goals and needs the app will need to address.</p>
<p>For example, Etsy has both providers and consumers. Consumers have certain screens they can search for and purchase products. Providers screens will include ways to post products and interact with customer questions.</p>
<h2 id="2definethegoalfortheappsusers">2. Define the Goal for the App’s Users</h2>
<p>Once you know who the users are, define the goal they want to achieve with your app. This will be the problem they want your app to solve for them.</p>
<p>If you have multiple users, each user type might have a different goal. In the Etsy example above, the consumer’s goal is to buy a one of a kind handmade piece. While the provider’s want to find an audience who will buy their artisan wares.</p>
<p>The app is the tool to help the users meet their goal. In the next step you will map out the steps to make that possible with your app.</p>
<h2 id="3identifyhowtheuserflowsthroughyourapp">3. Identify how the user flows through your app</h2>
<p>Now that you have defined your users and their goals, you will need to map out how your app will achieve them. To do that, you will need to write out each step the user takes through your app until they reach their ultimate goal.</p>
<p>To think about each step more concretely, think about each screen a user will navigate through. Screens depict the actual visual front-end part of your app. However, each screen will have functional aspects, like buttons and menus, that help navigate each user to their goal.</p>
<p>The visual design of the screens is not important in this stage, instead it’s more important to design the process the user will take and what the function of each screen will serve. Typical screens will include login, profile, or checkout.</p>
<p>Here's an example of Code Hangar's profile screen on Instagram<br><br>
<img src="https://codehangar.io/content/images/2019/02/Screenshot_20190118-162519.png" alt="Take Your App Idea to a Prototype in 5 Easy Steps"></p>
<p>The simplest way to write out this process is to create a bullet list of screens the app needs to achieve the user’s goal. If there are multiple users types, you will need to consider what screens each type of user will need and how they are connected to each other.</p>
<p>As an example, if you made a list of a popular app like Instagram, the home screen for your bulleted list might look like this.</p>
<ul>
<li>Home screen</li>
<li>Direct messaging button</li>
<li>Add to your story button</li>
<li>Instagram stories from other users</li>
<li>Feed of regular posts from other users</li>
<li>Home button</li>
<li>Search button</li>
<li>Add new photo or video button</li>
<li>Notifications button</li>
<li>Profile Button</li>
</ul>
<p>Each subcategory in the above list will lead to a new screen that will have its own elements to define also in it’s own bulleted list. The next step will help you define how each screen is connected to each other.</p>
<h2 id="4createaproductmapwithrelevantscreensyouwillneedtomake">4. Create a product map with relevant screens you will need to make</h2>
<p>After you create your bulleted lists, it’s time to create a product map or a wireflow. This is now the time to start connecting visual aspects with the functionality of each screen.</p>
<p>A wireflow connects the visual aspects of each screen with how they are all connected within the app. At the end of this process, the wireflow will be your visual blueprint that you will eventually hire a software developer to build.</p>
<p>Use your bulleted list from the previous step to help lay out the visuals of each screen. Remember elements that will be on every page such as menu bar and logo. Next, identify each functional aspect of the screen that will lead someone to another screen. Then draw out how you imagine that screen will look. Connect screens with arrows to show how a user will go from one screen to the next one.</p>
<p>Below is a drawing of a wire frame from a previous project we did for <a href="https://codehangar.io/how-we-launched-florida-pycons-conference-app-for-ios-and-android-in-just-8-weeks/">Florida's Pycon Conference</a>. <img src="https://codehangar.io/content/images/2019/02/IMG_20190118_160013_2.jpg" alt="Take Your App Idea to a Prototype in 5 Easy Steps"></p>
<p>You can see how both the visual aspects of each screen is shown along with where each button will lead the user and what they can do. It can easily help you visualize what a finished paper prototype would look like. Of course, you could create this on a computer too if you would rather use design software.</p>
<p>Wireflows will most likely include some decision trees too that might give users multiple results depending on the user’s action. For example, on a login screen, if the user types in the wrong information, instead of taking the user to their home screen, it will take them to a forgotten password screen.</p>
<p>Remember, at this stage the paper prototype doesn’t need to be perfect. In fact, it doesn’t even have to look that pretty! With an ugly prototype, you can <a href="https://codehangar.io/13-questions-to-ask-app-development-team-before-you-hire-them/">reach out to developers</a> who can help you realize your vision in a working app. The next step in the process will allow you to add design elements to your wireflow in order to build a more visually appealing prototype.</p>
<h2 id="5designagraphicrepresentationoftheapp">5. Design a graphic representation of the app</h2>
<p>The final step in your prototyping process is to create a clickable graphic representation of your app. This will allow others see what your finished product will eventually look like.</p>
<p>The simplest way to make a clickable prototype is to create a powerpoint slide for each screen from your paper prototype. Use internal links to connect slides to give the impression of what it will be like to use the eventual app.</p>
<p>A few other prototyping tools we recommend and require no coding are Sketchapp, Invisionapp, and Bubble. With each of these tools, you can build various slides that will have some design elements and clickable buttons to give the prototype some frontend functionality.</p>
<p>Going the extra step to create a clickable prototype will help you more easily convey your app’s vision to the eventual developers you work with. With it you can also start testing the market with your targeted users and pitch investors to raise capital to build the app.</p>
<p>We hope this helps you to better define your idea and create an app that has a strong foundation. Once you have your clickable prototype, we would love to know more about your project. We can help you build an app with our <a href="http://codehangar.io/8-week-mvp/">8-weeks to MVP</a> or a <a href="https://codehangar.io/full-service/">customize ongoing package</a>. <a href="https://codehangar.io/contact/">Contact us</a> so we can learn more about the project you want to build.</p>
</div>]]></content:encoded></item><item><title><![CDATA[13 Questions to Ask an App Development Team Before You Hire Them]]></title><description><![CDATA[<div class="kg-card-markdown"><p><img src="https://codehangar.io/content/images/2018/11/adults-business-computer-1181371-1.jpg" alt="adults-business-computer-1181371-1"><br><br>
You’ve reached the stage in your startup where you need to hire a software development company. The developer you work with will build the foundation of your app which will dictate decisions possibly for the life of your company. Plus, it’s easily one of the largest first expenses</p></div>]]></description><link>https://codehangar.io/13-questions-to-ask-app-development-team-before-you-hire-them/</link><guid isPermaLink="false">5c0038418e38587df99d427d</guid><category><![CDATA[Startup]]></category><category><![CDATA[MVP]]></category><category><![CDATA[Business]]></category><dc:creator><![CDATA[Cassandra Wilcox]]></dc:creator><pubDate>Thu, 29 Nov 2018 20:51:58 GMT</pubDate><media:content url="https://codehangar.io/content/images/2018/11/adults-business-computer-1181371.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2018/11/adults-business-computer-1181371.jpg" alt="13 Questions to Ask an App Development Team Before You Hire Them"><p><img src="https://codehangar.io/content/images/2018/11/adults-business-computer-1181371-1.jpg" alt="13 Questions to Ask an App Development Team Before You Hire Them"><br><br>
You’ve reached the stage in your startup where you need to hire a software development company. The developer you work with will build the foundation of your app which will dictate decisions possibly for the life of your company. Plus, it’s easily one of the largest first expenses for a startup which means you need to choose who you decide to work with carefully.</p>
<p><a href="https://codehangar.io/about/">Ian and I</a> founded Code Hangar because we understand the important partnership between development companies and startups. That’s why we really want to develop good working relationships with the companies we partner with. We like the transparency because it helps everyone to achieve the goals as one team once the project starts.</p>
<p>It’s also why we encourage you to take extra time and consideration before you hire a software development company.  The team you hire needs to communicate with you effectively and help you deliver results in order to show progress to your investors. Most importantly, though, they will build an app that can continue to grow well past your working relationship.</p>
<h2 id="beforeyouhireanappdevelopmentteam">Before you Hire an App Development Team</h2>
<p>When you search for a development company, it’s important to find one that meets your needs. This includes the technical aspects, communication style, and that they understand your overall vision. All these components will help build a strong relationship that will help you meet your technical and business objectives.</p>
<p>Before you start your search for the ideal software developer, make sure you consider the following first:</p>
<h3 id="giveyourselfenoughtime">Give yourself enough time</h3>
<p>Start your search for a dev team early. Don’t wait until you have investor timelines to meet. Give yourself at least three months before you need to start the project. This will give you time to really evaluate different companies and make a well-formed decision instead of a rushed one.</p>
<h3 id="shopwithanexpert">Shop with an expert</h3>
<p>If you don’t have a technology background, it might be hard to know what technical offer is best for you. Not every technology works for every problem.<br><br>
A developer’s job is to understand the client’s needs and recommend the best way to build your app. This might mean they even recommend another company that specializes in the coding language that would be the most effective. However, not every company might be that transparent.</p>
<p>So, if you don’t know how to determine what coding language is best for your project, find someone you trust who does. This can be a friend or family member. A mentor from an <a href="https://codehangar.io/technology-incubator-programs-in-orlando/">incubator program</a> would be a good resource too. Whoever it is, find a person who will look out for your best interests.</p>
<h3 id="shoparoundandmeetmultipletimeswiththerightpeople">Shop around and meet multiple times with the right people</h3>
<p>When you start your search months in advance, you give yourself enough time to meet multiple times with potential dev teams. This gives you the ability to ask questions over time as they come to you before you begin work.</p>
<p>You’ll also want to meet with all the team members who will work on your project. If the team your meeting with needs to refer to another team member to answer a question, request an additional meeting with that person included.</p>
<p>Be wary if a company is reluctant to meet with you more than once before you invest. Consider what your working relationship might be like. This is a big investment and a large component of your business.</p>
<h3 id="digdeeperthanthesuccessstoriesandasktheuncomfortablequestions">Dig deeper than the success stories and ask the uncomfortable questions</h3>
<p>Everyone can easily share a success story. However, the companies that are willing to be transparent in how they conduct business, deal with conflict, and grow from mistakes will paint a clearer picture of who they are.</p>
<p>However, to get there, you’ll need to ask hard uncomfortable questions in the interview process. Don’t be afraid to ask companies questions they would rather not answer, especially if it could affect your final decision.</p>
<p>Now, what exactly are some of the questions you should ask potential software development companies before you hire them? Here is a list of questions we suggest you take to your meetings.</p>
<p><img src="https://codehangar.io/content/images/2018/11/blackboard-business-chalkboard-355988.jpg" alt="13 Questions to Ask an App Development Team Before You Hire Them"></p>
<h1 id="13questionstoaskappdevelopmentcompanies">13 Questions to Ask App Development Companies:</h1>
<h2 id="1whatdoesyouridealprojectlooklike">1. What does your ideal project look like?</h2>
<p>Make sure you find out what kind of projects the dev team wants to do. Does that sound like what you need? If not, you might not be happy with what you get from that company. Usually, their ideal project will give you an idea of the type of work a company wants to do or is good at.</p>
<p>For example, imagine you need to build a communication app but you interview a company that specializes in apps for banks and the financial sector. Because of that company’s knowledge base, they might not be able to service your needs as well.</p>
<h2 id="2whatdoesyouridealclientlooklike">2. What does your ideal client look like?</h2>
<p>Ask this question for similar reasons to the last one. If a development team usually works with small businesses, but you are a large scale entreprise, the team might not be familiar with the needs of an organization the size of yours. Try to find a company who’s ideal client aligns as closely as possible to your business to help reduce friction and learning curves.</p>
<h2 id="3whatdoesprojectmanagementlooklike">3. What does project management look like?</h2>
<p>There are a lot of moving pieces in app development and organization is vital.  Learn how potential dev teams manage the overall project from big goals to small details. Make sure you find out how they communicate goals, get approvals, send you information, and even how quickly they’ll answer you back.</p>
<h2 id="4howwillwecommunicate">4. How will we communicate?</h2>
<p>Technology is awesome and it allows us to communicate in a million different ways. However, the communication method needs to work for both you and the dev team.</p>
<p>Varying aspects of the project might need to be communicated differently. Quick questions might go through informal channels while formal requests are put into a project management system and email communications.<br><br>
<img src="https://codehangar.io/content/images/2018/11/laptop-digital-tablet-and-mobile-phone-on-wooden-table.jpg" alt="13 Questions to Ask an App Development Team Before You Hire Them"></p>
<p>For example, at Code Hangar, because we work in sprints, we communicate with our clients constantly and have goals laid out for each sprint. Some of the communication tools we use are:</p>
<p><strong>Slack</strong> - Real time, daily communication. We also integrate with code repositories to send out notifications anytime we push a code update.<br><br>
<strong>Email</strong> - Formal communication and requests.<br><br>
<strong>Trello</strong> - Task tracking.<br><br>
<strong>Invision</strong> - Design feedback.</p>
<p>There is no right or wrong way to manage communication but it is important to make sure that you are getting all the information that you need in a way that is easy for you to keep track of.</p>
<h2 id="5whatwouldthedaytodaylooklikewhenweworktogether">5. What would the day to day look like when we work together?</h2>
<p>Ask this question to get some insight to the daily work process of the dev team. You want a team that will be transparent in their work process. It gives you greater insight into how they’ll work on your app with you and whether they are capable or interested in adapting to your needs.</p>
<h2 id="6whatisyourdevelopmentstack">6. What is your development stack?</h2>
<p>This question refers to the type of coding languages, libraries, and services your app will be built with. The development stack you choose can have a big impact on the future health of your product.</p>
<p>However, it is up to you to decide the development stack for your project. Eventually, you will need to hire an in-house development team that will need to know the technologies your app is built with.</p>
<p>Questions you might want to ask yourself are; is there longevity in the language? Or are software developers with the skills in this language easy or hard to find? The languages you build with can determine the price of development. For example, if you want native iOS development, costs are expensive, whereas web development tends to be cheaper.</p>
<p>At Code Hangar we use the <a href="https://codehangar.io/how-to-successfully-navigate-an-existing-code-base-as-a-n00b/">React Ecosystem</a> on the front end which is a popular framework maintained by Facebook. On the backend we use typically use <a href="https://codehangar.io/how-to-build-a-slack-bot-integration-with-node/">Node.js</a> + Postgres, or Firebase which is maintained by Google, depending on the needs of the project.</p>
<h2 id="7describeyourmostsuccessfulproject">7. Describe your most successful project.</h2>
<p>It’s important to deliver results to your investors. This question lets you find out what success looks like for different dev teams. Are their successes what you want to achieve when you work with them?</p>
<h2 id="8describearecentunsuccessfulproject">8. Describe a recent unsuccessful project.</h2>
<p>This is a difficult and uncomfortable questions to ask. That’s okay, in fact, that’s the whole point. When you ask uncomfortable questions you start to see how the development team might handle stress and conflict.</p>
<p>A good team will have insight into where things went wrong. They will also give solutions on how they’ve worked to fix those problems since then. This can give you insight into the potential weaknesses of the team you choose.</p>
<h2 id="9whatifweneedtopivotmidproject">9. What if we need to pivot mid-project?</h2>
<p>Projects don’t go perfectly and in the world of technology startups, pivots happen. However, the way pivots are dealt with can vary between dev teams.</p>
<p>Ask potential developers if they have a process for pivoting. Don’t be afraid to request an example. How they responded previously will give you a clue of what it might be like on your project.</p>
<p>For example, we like to work in 2-week sprint cycles here at Code Hangar. This allow us flexibility with goals and long-term deliverables. If we need to pivot, we try to do so at the beginning of a sprint cycle. However, if it needs to be sooner, we will explain all the implications the pivot will have on the project. That way our clients can make the best decision for their company and investors.</p>
<h2 id="10doyouchargeaboveorbelowmarketpriceforyourserviceswhy">10. Do you charge above or below market price for your services? Why?</h2>
<p>Prices for dev teams can vary wildly. Which can make it hard to know if the price you’re being quoted is fair.</p>
<p>The way around this is to ask the potential software developer to be transparent about their business model by explaining their pricing. Yes, this is another uncomfortable questions but will tell you a lot.</p>
<p>At Code Hangar, we are very open about our pricing model with our clients. This gives many of them a chance to see what pricing looks like for development, possibly for the first time. Because we appreciate how important the investment for our work is, we want our clients to know they made the best decision for themselves when they choose to work with us.</p>
<h2 id="11howdoesbillingwork">11. How does billing work?</h2>
<p>Development projects can be priced in a variety of ways. There is no real standard, but common arrangements include hourly, sprint-based, or project-based pricing. You might even consider joint ventures or profit-share.</p>
<p>A project-based price is usually set around a defined goal. However, this can make pivoting harder since needs can change in the middle of a project. Plus, once the goal is met, you might have to work out another contract with the developer which could unintentionally lead to delays in continued development.</p>
<p>At Code Hangar, our preference is a sprint-based model. Product development is never truly done and a sprint-based model assumes that the work will be ongoing. This model allows us to set up a development pace and billing cycle that will work within a clients budget, and most importantly, allows us to change priorities with your business as you gather new feedback and insights from your customers.</p>
<p><img src="https://codehangar.io/content/images/2018/11/code-coding-computer-574071.jpg" alt="13 Questions to Ask an App Development Team Before You Hire Them"></p>
<h2 id="12whatdoeshandofflooklike">12. What does handoff look like?</h2>
<p>This should help you be flexible. You don't want to get stuck in a situation where your intellectual property is held hostage. A good app dev team understands this and has a process in place to handoff the project to you when they are no longer involved in the build. At Code Hangar, we give our clients full ownership of all code and assets from day one. This helps us build relationships based on quality and trust.</p>
<h2 id="13howdoyouknowwhenarelationshipwithaclientorpartnerisover">13. How do you know when a relationship with a client or partner is over?</h2>
<p>Another hard question but you need to talk about how the business relationship will end at the very beginning. Eventually, you will need to build an in-house team. Or, you may simply outgrow the type of work the development company specializes in. You’ll want to find a company that is prepared to release you when it is time for you to move on, even if that is years down the line.</p>
<p>At Code Hangar, we are great at working with startups in the beginning phases of their app development. Our goal is to build software that helps businesses grow. Once a business has matured to the point that an in-house team is needed, we proudly help founders train their own team to take over development as we transition out of the project.</p>
<p>So, are you ready to start the search for the perfect dev team? Contact Code Hangar today about our <a href="https://codehangar.io/8-week-mvp/">8-week MVP</a> or <a href="https://codehangar.io/full-service/">Full Service</a> packages and we’ll answer all these questions for you (even the hard ones) to see if we’re the right team for your project.</p>
</div>]]></content:encoded></item><item><title><![CDATA[Technology Incubator Programs in Orlando]]></title><description><![CDATA[<div class="kg-card-markdown"><p><img src="https://codehangar.io/content/images/2018/10/adult-american-board-1157859.jpg" alt="adult-american-board-1157859"></p>
<p>Orlando has a vibrant startup community and there are many organizations in Central Florida that are integral in providing resources for the community. Luckily, one of those resources are incubator programs which help tech startups who have little money but need access to resources like mentorship, coworking spaces, staff that</p></div>]]></description><link>https://codehangar.io/technology-incubator-programs-in-orlando/</link><guid isPermaLink="false">5bd30ac98e38587df99d4262</guid><category><![CDATA[Business]]></category><category><![CDATA[Startup]]></category><category><![CDATA[incubators]]></category><dc:creator><![CDATA[Code Hangar]]></dc:creator><pubDate>Fri, 26 Oct 2018 18:30:00 GMT</pubDate><media:content url="https://codehangar.io/content/images/2018/10/adult-american-board-1157859-1.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2018/10/adult-american-board-1157859-1.jpg" alt="Technology Incubator Programs in Orlando"><p><img src="https://codehangar.io/content/images/2018/10/adult-american-board-1157859.jpg" alt="Technology Incubator Programs in Orlando"></p>
<p>Orlando has a vibrant startup community and there are many organizations in Central Florida that are integral in providing resources for the community. Luckily, one of those resources are incubator programs which help tech startups who have little money but need access to resources like mentorship, coworking spaces, staff that can help with business models, intellectual property laws, and advice on funding and building teams.</p>
<p>While there are multiple programs to choose from, they all offer different resources and focus. Some programs are for entrepreneurs who are just in the ideation stage while other programs are geared towards scaling companies that already generate revenue.</p>
<p>If you <a href="https://codehangar.io/successfully-build-app-every-stage-business/">already have seed funding</a> and are ready to move towards your first fundraising round (series A), a better option would be to hire a development company like ours at <a href="https://codehangar.io/contact/">Code Hangar</a> who can be your technical team as you scale your business.</p>
<p>However, if you aren’t ready for that yet, we want to offer you a list of startup incubator programs in Orlando that can help propel you to the next level!</p>
<p><img src="https://codehangar.io/content/images/2018/10/colleagues-working-in-modern-office-1.jpg" alt="Technology Incubator Programs in Orlando"></p>
<h2 id="starterstudio"><a href="https://www.starterstudio.org/">Starter Studio</a></h2>
<p>Starter Studio is located in downtown Orlando. It actually has two incubator programs. The first program is the Ideation Stage Accelerator which will help companies go from nothing to an MVP.</p>
<h3 id="ideationstageaccelerator">Ideation Stage Accelerator:</h3>
<ul>
<li>Full-time 12-week program offered twice a year in the Fall and Spring</li>
<li>Coworking space at Canvs</li>
<li>Demo day for companies to pitch to local leaders and business owners</li>
<li>Mentorship</li>
</ul>
<p>The Seed Stage Accelerator focuses on early stage growth, capturing market share, and getting companies investment ready.</p>
<h3 id="seedstageaccelerator">Seed Stage Accelerator:</h3>
<ul>
<li>Part-time six month program</li>
<li>Mentorship lead</li>
<li>Free program</li>
<li>Invests between $25,000 and $225,000 in each company accepted into the program</li>
<li>Investor showcase at end of program</li>
</ul>
<h2 id="venturescaleup"><a href="http://www.venturescaleup.com/">Venture ScaleUP</a></h2>
<p>Venture Scale up is run out of Catalyst and is geared towards companies that already have a viable MVP in place along with some paying customers.</p>
<ul>
<li>Part-time with two programs a year in Fall and Spring</li>
<li>Mentorship community</li>
<li>Coworking space in Catalyst</li>
<li>Investor pitch event at end</li>
<li>One-on-one sessions with seed and early-stage investors</li>
</ul>
<h2 id="ucfbusinessincubator"><a href="http://incubator.ucf.edu/">UCF Business Incubator</a></h2>
<p>The UCF Business Incubator program concentrates on building companies that can build long-term employment opportunities in Central Florida. The incubator program is for companies who already have proof of concept, however they do also offer a preincubation program if you’re in the ideation phase.</p>
<ul>
<li>Full time program up to three years</li>
<li>Mentorship</li>
<li>Access to UCF’s network of resources</li>
<li>Lease options at a nominal fee or small monthly fee for off-site companies</li>
</ul>
<h2 id="upstarts"><a href="https://cel.ucf.edu/upstarts5/">Upstarts</a></h2>
<p>Upstarts is the incubator program offered through Blackstone at UCF. This program is exclusively for UCF students (unlike the UCF incubator program which is open to all businesses in the region). Student companies must be revenue generating for at least six months and have a minimum of two UCF student team members.</p>
<ul>
<li>Part-time program that goes throughout the academic school year</li>
<li>Mentorship</li>
<li>Access to UCF Business Incubator for successful upstarts</li>
<li>Up to three credit hours offered for time spent</li>
</ul>
<p><img src="https://codehangar.io/content/images/2018/10/adult-bar-brainstorming-1015568.jpg" alt="Technology Incubator Programs in Orlando"></p>
<h2 id="burnoutgameventures"><a href="https://www.burngameven.com/">Burnout Game Ventures</a></h2>
<p>Burnout Game Ventures helps video game, simulation, and VR/AR companies scale. The program is free but asks for revenue sharing to market the game via their own network and resources.</p>
<ul>
<li>Industry specific mentoring</li>
<li>Development costs covered</li>
<li>Education and industry specific resources</li>
</ul>
<h2 id="goldsteinaccelerator"><a href="http://www.goldsteinaccelerator.com/">Goldstein Accelerator</a></h2>
<p>The Goldstein Accelerator is an incubator program located in Oviedo. Their incubation program works with companies who have less than two million dollars raised. Their focus is to help startup teams who want to be acquired within 18 months.</p>
<ul>
<li>Part-time six-month program offered in fall and spring</li>
<li>Mentorship</li>
<li>Coworking space provided in Oviedo</li>
<li>Provides access to $100,000 in seed funding</li>
</ul>
<h2 id="guidewellinnovationcenter"><a href="http://www.guidewellcenteratlakenona.com/">Guidewell Innovation Center</a></h2>
<p>Guidewell is an incubation program in Lake Nona that will serve the healthcare tech startup community. This is a new program in Orlando but Guidewell is partnered with UCF, the City of Orlando, and Florida Hospital amongst other companies interested in economic development.</p>
<ul>
<li>Access to office and wet lab space</li>
<li>Mentorship</li>
</ul>
<p><img src="https://codehangar.io/content/images/2018/10/blond-board-coworker-1065705.jpg" alt="Technology Incubator Programs in Orlando"></p>
<h2 id="seminoletechnologybusinessincubationcenter"><a href="https://www.seminolestate.edu/cbd/bip/">Seminole Technology Business Incubation Center</a></h2>
<p>The Seminole Technology Business Incubation Center, located in Sanford, offers a long-term incubation program to companies that are already revenue generating but needs access to resources and space in order to accelerate the business’s growth.</p>
<ul>
<li>Full-time long-term program</li>
<li>Mentorship</li>
<li>On-site training</li>
<li>On-site office space available for rent</li>
<li>Quarterly goal setting and benchmark evaluations</li>
</ul>
<p>If these programs don’t seem like the right fit for but you’re ready to take your app to the next level, contact us about our <a href="https://codehangar.io/8-week-mvp/">8-week to an MVP</a> or <a href="https://codehangar.io/full-service/">full service</a> packages.</p>
</div>]]></content:encoded></item><item><title><![CDATA[How to Successfully Build an App at Every Stage of Your Business]]></title><description><![CDATA[<div class="kg-card-markdown"><p><img src="https://codehangar.io/content/images/2018/09/american-casual-cellphone-1262971.jpg" alt="american-casual-cellphone-1262971"><br><br>
So you’ve just thought of the perfect app, great! Once you have an awesome idea for an app, you’re going to have to actually build it. However, there are a lot of challenges you might face in this endeavor as a startup company such as <a href="https://codehangar.io/from-lone-wolf-to-team-player-5-community-resources-for-developers/">limited access to</a></p></div>]]></description><link>https://codehangar.io/successfully-build-app-every-stage-business/</link><guid isPermaLink="false">5ba3b45f8e38587df99d4242</guid><category><![CDATA[Product Development]]></category><category><![CDATA[MVP]]></category><dc:creator><![CDATA[Code Hangar]]></dc:creator><pubDate>Fri, 21 Sep 2018 14:11:22 GMT</pubDate><media:content url="https://codehangar.io/content/images/2018/09/american-casual-cellphone-1262971-1.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2018/09/american-casual-cellphone-1262971-1.jpg" alt="How to Successfully Build an App at Every Stage of Your Business"><p><img src="https://codehangar.io/content/images/2018/09/american-casual-cellphone-1262971.jpg" alt="How to Successfully Build an App at Every Stage of Your Business"><br><br>
So you’ve just thought of the perfect app, great! Once you have an awesome idea for an app, you’re going to have to actually build it. However, there are a lot of challenges you might face in this endeavor as a startup company such as <a href="https://codehangar.io/from-lone-wolf-to-team-player-5-community-resources-for-developers/">limited access to resources</a>, multitasking many different types of work in early stages as a founder or solopreneur, limited funds, lacking extensive technical experience with at least some aspects of your build-stack, etc. — all of which can feel like a lot to overcome on your own.</p>
<p>Luckily, an effective app development process will ideally be tied to your fundraising efforts. This way, you can build your app in stages as your available funds allow. Below is our guide to help you navigate this process while simultaneously raising money to finance your development:</p>
<h1 id="howtobuildanappstageone">How to Build an App — Stage One</h1>
<p><strong>App Development: Envision your Prototype<br><br>
Fundraising: Self-Funded</strong><br><br>
<img src="https://codehangar.io/content/images/2018/09/blur-businesswoman-close-up-407237.jpg" alt="How to Successfully Build an App at Every Stage of Your Business"></p>
<p>You don’t have to have money at the <a href="https://codehangar.io/product-development-design-ideation-to-building-a-prototype/">first stage of a successful app development process</a> — but you should definitely at least start your research efforts as soon as possible. Then test the market and start to build out a prototype app yourself. By doing this, you’ll be able to better communicate your idea’s potential to entice future developers or investors.</p>
<p>Programs like <a href="http://invisionapp.com">invisionapp.com</a> will allow you to easily create clickable images so you can design the initial look and flow of your app. Even without a technical background, and without writing a single line of code, you’ll be able to easily prototype a conveniently accessible and presentable visual representation of your future app.</p>
<p>As soon as you can, at this stage, you should start to gather constructive feedback and test the market. You’ll want to see if there is widespread support or an already existing or prospective customer base for the app you want to create before you or others can confidently invest in it. The app will probably change a lot from your initial conceptions as you get helpful feedback from the marketplace or experienced developers, and that’s okay! During this phase, you should think carefully and fundamentally about what needs your app means to fulfill; plan out “user stories” describing its core functionalities and prioritize which of these are the most crucially important and which could be eventual stretch-goals or enhancements that would be nice to have but are not absolutely necessary.</p>
<h1 id="howtobuildanappstagetwo">How to Build an App — Stage Two</h1>
<p><strong>App Development: Software Prototype<br><br>
Fundraising: Self-Funded</strong><br><br>
<img src="https://codehangar.io/content/images/2018/09/app-apple-hand-3718.jpg" alt="How to Successfully Build an App at Every Stage of Your Business"><br><br>
Now it’s time to invest some money into your app and develop the first coded demo of your app. If you aren’t an experienced developer, hire a freelancer who can develop the app further. In fact, this freelancer could turn into a valuable team member as you grow your company and need an in-house technical team.</p>
<p>Eventually, your app will need both front-end and back-end development. However, in this phase you’ll probably only need to develop the front-end side of the app — which is the client facing side and deals more with the visual presentation and aesthetics. Connections to servers and databases are back-end features and can be saved for future stages or temporarily mocked with placeholder “data” for initial demos.</p>
<p>Don’t worry if you have to eventually throw away this entire version of your app in the next stage. You need to have something to show in the early phases for investment and marketplace testing even if its UI/UX ends up looking and flowing completely differently later on.</p>
<p>With a minimally functional but hopefully polished looking demo in hand, you can present your idea to investors to attract seed money for phase three. Continue to release to customers if you can manage some alpha or beta releases for research purposes and get their feedback too, as this will only help you develop a stronger app long term.</p>
<h1 id="howtobuildanappstagethree">How to Build an App — Stage Three</h1>
<p><strong>App Development: Fully Functional MVP<br><br>
Fundraising: Seed Funded</strong><br><br>
<img src="https://codehangar.io/content/images/2018/09/app-apps-cellphone-461452.jpg" alt="How to Successfully Build an App at Every Stage of Your Business"><br><br>
Congratulations, you’ve reached the point where you have some seed money thanks to a few investors who understand your vision and recognize its potential! Now you’re ready to build a fully functional minimum viable product (MVP) on a single platform such as <a href="https://codehangar.io/career-fair-plus-transform-native-mobile-app-responsive-web/">the web</a> (or perhaps whichever mobile platform it was initially developed for if you focused in that direction).</p>
<p>Once you’ve written the code for your app at this stage, it’s not a throwaway or hardcoded product. You’re building the permanent and dynamic infrastructure of your app. This means that you’ll not only have client facing front-end features but also back-end features that persistently save, store, and recall users’ data — but that customers don’t interact with directly.</p>
<p>One freelance developer probably isn’t enough, at this stage, because of the expanded skill set needed to achieve a finished product of this sort, unless you can afford an extremely talented full-stack developer. So, you’ll want to hire a development company at this stage, like Code Hangar.</p>
<p>A Development company will get you a technical team quickly and help you understand what it’s like to work with one. Plus, they can help you navigate who will serve you best in your eventual in-house team you will need as you continue to grow.</p>
<p>You will still need to release early and often at this stage so you can continue to test the market and get feedback. How quickly you can develop a full-stack app depends on your development company and how well they know how to leverage modern DevOps technologies — but, at Code Hangar, <a href="https://codehangar.io/how-we-launched-florida-pycons-conference-app-for-ios-and-android-in-just-8-weeks/">we can build an MVP for you in just eight weeks</a>!</p>
<p>Once your MVP is in hand, you can reach out to venture capital companies and start your fundraising rounds (series A, B, and C).</p>
<h1 id="howtobuildanappstagefour">How to Build an App — Stage Four</h1>
<p><strong>App Development: Continued Feature Enhancements<br><br>
Fundraising: Series A, B, or C</strong><br><br>
<img src="https://codehangar.io/content/images/2018/09/achievement-agreement-arms-1068523.jpg" alt="How to Successfully Build an App at Every Stage of Your Business"><br><br>
While this is the final stage of the app development process, it is never truly finished. That’s because, at this stage, you’ll inevitably be in some type of continuous release operations and maintenance mode with options to build out new features and expanded functionalities. It’s also time, at this point, to think about scalability and maximizing the security and cryptographic rigor of the app (if you haven’t already).</p>
<p>It’s best to release updates in sprint cycles of 1-2 weeks. Sprints allow you to fix bugs and add features as you respond to continuous customer feedback at an agile pace.</p>
<p>Using your initial VC funding, start to invest in your in-house team. This lets current and future investors know you are serious and you want to build a company that is in it for the long haul.</p>
<p>Typically, successful small-scale in-house software teams consist of a project manager, designer, front-end developer, back-end developer, and quality assurance (QA) tester. Remember, it’s also important to build a strongly collaborative culture of teamwork within your organization. The most successful teams are ones where open communication, at least some cross-training and shadowing, and constructive feedback are valued — and cross-functional teams set agile goals to increase velocity when sprinting toward larger milestones.</p>
<p>Finally, you want to recreate your success by establishing repeatably effective processes over the long term. Then you can continue to reliably release work in efficient sprint cycles as you scale, fix bugs quickly to keep your app stable, and address continuous feedback from your customers in a timely manner.</p>
<p>No matter what stage of the app development process you’re in, it’s important to remember that you should release updates early and often in order to get feedback from both users and investors. This allows you to develop a stronger app over time that responds to the marketplace and features introduced by any competing apps quickly.</p>
<p>If you have an app that you’re ready to take to the next stage of development and need to bring on a talented and experienced development team, Code Hangar can help you. <a href="https://codehangar.io/contact/">Contact us</a> to learn more about our <a href="https://codehangar.io/8-week-mvp/">eight-week to MVP</a> or <a href="https://codehangar.io/full-service/">full-service packages</a>!</p>
</div>]]></content:encoded></item><item><title><![CDATA[How we Launched Florida Pycon's Conference App for iOS and Android in Just 8 Weeks]]></title><description><![CDATA[<div class="kg-card-markdown"><p><img src="https://codehangar.io/content/images/2017/11/FL-Pycon-App-sm.png" alt="FL-Pycon-App-sm"></p>
<p>In October 2017, the first-ever <a href="http://flpy.org/">Florida PyCon</a> Conference was hosted in Orlando, FL. With 4 tracks, 20 speakers, and about 200 attendees Florida’s first and only regional Python language conference was a smashing success.</p>
<h1 id="goalschallenges">Goals &amp; Challenges</h1>
<p>Being a multi-track conference, FL PyCon organizers realized as conference day approached</p></div>]]></description><link>https://codehangar.io/how-we-launched-florida-pycons-conference-app-for-ios-and-android-in-just-8-weeks/</link><guid isPermaLink="false">5a1dbc7f080d7c67fa083919</guid><dc:creator><![CDATA[Cassandra Wilcox]]></dc:creator><pubDate>Tue, 28 Nov 2017 20:33:13 GMT</pubDate><media:content url="https://codehangar.io/content/images/2017/11/FL-Pycon-App.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2017/11/FL-Pycon-App.png" alt="How we Launched Florida Pycon's Conference App for iOS and Android in Just 8 Weeks"><p><img src="https://codehangar.io/content/images/2017/11/FL-Pycon-App-sm.png" alt="How we Launched Florida Pycon's Conference App for iOS and Android in Just 8 Weeks"></p>
<p>In October 2017, the first-ever <a href="http://flpy.org/">Florida PyCon</a> Conference was hosted in Orlando, FL. With 4 tracks, 20 speakers, and about 200 attendees Florida’s first and only regional Python language conference was a smashing success.</p>
<h1 id="goalschallenges">Goals &amp; Challenges</h1>
<p>Being a multi-track conference, FL PyCon organizers realized as conference day approached that it would be super helpful if attendees could easily find out which talks were happening when and where. While the full Florida PyCon schedule was posted on the FLPY website, experienced event organizers know that you can never rely on stable WiFi access at conferences and the PyCon organizers wanted to make certain that attendees could access the information they were looking for. In addition, they thought it would be great if attendees could build their own personalized FL PyCon schedule and take notes on the talks they attended.</p>
<p>For these reasons, FL PyCon Organizers asked Code Hangar if they could build an app that attendees could use to access the conference agenda and cache it for offline use in the case of poor internet. We were happy to donate our design and development services for the cause.</p>
<h1 id="process">Process</h1>
<p>With only a few weeks until the conference, we knew we would need to work quickly and efficiently. We also knew that the conference organizers were already super busy organizing the conference (in addition to working regular day jobs), so we would need to be as flexible and proactive as possible to work with their schedules.</p>
<p>We decided to build these apps using React Native so that we could maintain a single code base and deploy to both iOS and Android app stores.</p>
<h2 id="designux">Design &amp; UX</h2>
<p>Within a few days we outlined the user flow for the MVP and got it approved by organizers.</p>
<p><img src="https://codehangar.io/content/images/2017/11/Screen-Shot-2017-11-28-at-15.20.30.png" alt="How we Launched Florida Pycon's Conference App for iOS and Android in Just 8 Weeks"></p>
<p>We quickly translated these flows into high fidelity layouts based around the Native Base UI Kit for React Native. This saved us a lot of design time and reduced most unknowns around layout development feasability.</p>
<p><img src="https://codehangar.io/content/images/2017/11/Screen-Shot-2017-11-28-at-15.22.14.png" alt="How we Launched Florida Pycon's Conference App for iOS and Android in Just 8 Weeks"></p>
<h2 id="development">Development</h2>
<p>As mentioned above, we decided to build this project using React Native so that we could easily deploy to both iOS and Android while maintaining a single code base, and because we have been building web applications using React since we began our company in 2015 so it just made sense.</p>
<p>A bonus that came with using a tool called Expo for React Native, is that we were able to push UI updates to both platforms without needing to go through the app store update submission process. This meant that we could remain flexible and push out updates on the day of the conference if needed without requiring users to manually update the app.</p>
<h1 id="outcomes">Outcomes</h1>
<p>After the conference we checked the download numbers for iOS and Android. We had about 200 downloads, indicating that nearly every Florida PyCon attendee downloaded the app. Conference organizers were extremely pleased with the outcome, sharing their excitement and gratitude on Twitter.</p>
<div style="text-align:center">
<style>
.twitter-tweet { display: inline-block !important }
</style>
<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">We are ssssso in love with the FLPY App made by our friends <a href="https://twitter.com/codehangar?ref_src=twsrc%5Etfw">@codehangar</a>. Be sure to download it to plan your FLPY experience! <a href="https://t.co/yFfKo1PBjd">pic.twitter.com/yFfKo1PBjd</a></p>— Florida PyCon (@flpycon) <a href="https://twitter.com/flpycon/status/916336014058278913?ref_src=twsrc%5Etfw">October 6, 2017</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div>
<p>Community tech events hold a special place in our hearts here at Code Hangar and we are so honored to have had the opportunity to contribute to make Florida PyCon a success.</p>
<p>Download the Florida PyCon app for <a href="https://itunes.apple.com/us/app/fl-pycon/id1287404908?mt=8">iOS</a> and <a href="https://play.google.com/store/apps/details?id=io.codehangar.flpycon_app&amp;hl=en">Android</a> to see an example of what we could build for you.</p>
<section class="se-section primary-bg">
    <div class="container-fluid">
        <div class="row text-center">
            <h3>Ready to delight your users with an amazing app?</h3>
            <p>Book a free consultation with us and see what we can build for you.</p>
            <a class="btn se-btn-black btn-rounded" onclick="ctaEvent('Case Study CTA', 'FL Pycon');" href="https://codehangar.io/contact">Talk to us
            </a>
        </div> <!-- end row -->
    </div> <!-- end container -->
</section>
<br><br></div>]]></content:encoded></item><item><title><![CDATA[ReQLPro 0.2.1 Release Notes - Now with Keychain Support for Passwords]]></title><description><![CDATA[<div class="kg-card-markdown"><p><img src="https://codehangar.io/content/images/2017/08/reql-0.2.1-sm.png" alt="reql-0.2.1-sm"></p>
<p>ReQLPro is a desktop RethinkDB GUI Client for Mac OS X, Windows, and Linux. If you’re not sure what RethinkDB is, check out their website to learn more about what makes it “<a href="https://rethinkdb.com/">the open-source database for the realtime web.</a>”</p>
<p><a href="http://reqlpro.com/" class="button success expand">Download ReQLPro</a></p>
<h3 id="whatsnewinthisrelease">What’s New in this Release?</h3>
<h6 id="persistingconnectionpasswordsandsslcerts">Persisting Connection</h6></div>]]></description><link>https://codehangar.io/reqlpro-0-2-1-release-notes-now-with-keychain-support-for-passwords/</link><guid isPermaLink="false">59a029351890c6405ce6f340</guid><category><![CDATA[ReQLPro]]></category><category><![CDATA[Just Launched!]]></category><dc:creator><![CDATA[Ian Grail]]></dc:creator><pubDate>Mon, 28 Aug 2017 17:12:52 GMT</pubDate><media:content url="https://codehangar.io/content/images/2017/08/reql-0.2.1-1.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2017/08/reql-0.2.1-1.png" alt="ReQLPro 0.2.1 Release Notes - Now with Keychain Support for Passwords"><p><img src="https://codehangar.io/content/images/2017/08/reql-0.2.1-sm.png" alt="ReQLPro 0.2.1 Release Notes - Now with Keychain Support for Passwords"></p>
<p>ReQLPro is a desktop RethinkDB GUI Client for Mac OS X, Windows, and Linux. If you’re not sure what RethinkDB is, check out their website to learn more about what makes it “<a href="https://rethinkdb.com/">the open-source database for the realtime web.</a>”</p>
<p><a href="http://reqlpro.com/" class="button success expand">Download ReQLPro</a></p>
<h3 id="whatsnewinthisrelease">What’s New in this Release?</h3>
<h6 id="persistingconnectionpasswordsandsslcerts">Persisting Connection Passwords and SSL Certs</h6>
<p>While ReQLPro has had the ability to add connections with passwords and SSL Certificates for a while, we haven't been persisting them to the filesystem. We wanted to wait until we had a secure method of saving passwords first, and now that is here!  Passwords and SSL Certs will now be saved and persisted via:</p>
<ul>
<li><strong>Keychain</strong> on Mac OSX</li>
<li><strong>Credential Manager</strong> on Windows 10</li>
<li><strong>Passwords &amp; Keys</strong> on Ubuntu.</li>
</ul>
<p>NOTE: We found have saving passwords with the Linux build to have mixed results on different systems. If ReQLPro 0.2.1 is not saving passwords for you please let us know your Linux distro version. Installing <code>libsecret</code> on your system <em>may</em> help.</p>
<h6 id="dataexplorertableviewexpandedobjectcontents">Data Explorer - Table View: Expanded object contents</h6>
<p>For cell whose contents represent an "object", we have replaced the placeholder "{Object...}" string with a JSON.stringify() of the cell contents.</p>
<h6 id="saverecordkeyboardshortcut">Save Record Keyboard Shortcut</h6>
<p>When Adding or Editing a Record: Use <code>Cmd+S</code> or <code>Ctrl+S</code> for quickly saving the record</p>
<h4 id="fixes">Fixes:</h4>
<ul>
<li>Reset pagination and query settings after selecting a new table</li>
</ul>
<p>We hope you enjoy the latest release of ReQLPro! We are always happy to receive <a href="http://reqlpro.com/support/">feedback</a> from our users so please let us know what you think!</p>
<p><a href="http://reqlpro.com/" class="button success expand">Download ReQLPro</a></p>
</div>]]></content:encoded></item><item><title><![CDATA[How We Launched Hobbygoblin's MVP Web App in Just Eight Weeks]]></title><description><![CDATA[<div class="kg-card-markdown"><p><img src="https://codehangar.io/content/images/2017/08/Hobbygoblin-Case-Study-sm.png" alt="Hobbygoblin-Case-Study-sm"></p>
<hr>
“From the start, the Code Hangar team was uncommonly easy to talk to and wanted to know exactly what I was envisioning. They set a detailed course on how to get there and kept me involved in the process throughout. Ultimately, we were able to exceed our initial goals in</div>]]></description><link>https://codehangar.io/hobbygoblin-mvp-web-app-eight-weeks/</link><guid isPermaLink="false">599af9c0ae9f8d63a8d327e6</guid><category><![CDATA[Just Launched!]]></category><dc:creator><![CDATA[Cassandra Wilcox]]></dc:creator><pubDate>Mon, 21 Aug 2017 15:50:23 GMT</pubDate><media:content url="https://codehangar.io/content/images/2017/08/Hobbygoblin-Case-Study.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2017/08/Hobbygoblin-Case-Study.png" alt="How We Launched Hobbygoblin's MVP Web App in Just Eight Weeks"><p><img src="https://codehangar.io/content/images/2017/08/Hobbygoblin-Case-Study-sm.png" alt="How We Launched Hobbygoblin's MVP Web App in Just Eight Weeks"></p>
<hr>
“From the start, the Code Hangar team was uncommonly easy to talk to and wanted to know exactly what I was envisioning. They set a detailed course on how to get there and kept me involved in the process throughout. Ultimately, we were able to exceed our initial goals in a rather short time.”
<br><br>
<strong>-MJ Brick, Founder and CEO of Hobbygoblin</strong>
<hr>
<h2 id="theminimumviableproductandwhyitmatterstostartups">The Minimum Viable Product and Why it Matters to Startups</h2>
<p>App development is almost as much about speed as it is about quality or cost. While it's vital to create an awesome app that represents your business, products, and services in the best possible way, your startup also needs to get it launched, fast. That means getting a minimum viable product (MVP) designed, tested, and delivered.</p>
<p>Speed to market is one of the biggest competitive advantages you can have — whether it's due to competitors in the marketplace, to coincide with your product roadmap, or another external deadline. That’s why we created our <a href="https://codehangar.io/8-week-mvp/">“Eight Week MVP” service offering</a>, designed to get your startup’s app from concept to working product in just two months.</p>
<p>There’s a huge benefit to being first — better promotion, more word-of-mouth, greater uptake, and refocusing resources into other areas. As we’re one of the fastest application development services in the industry, Hobbygoblin decided to work with us to bring their smartphone app to life. Here’s how we went from concept to completion, while ensuring quality and giving Hobbygoblin maximum value.</p>
<p>Read on to see how our <a href="https://codehangar.io/8-week-mvp/">Eight Week MVP service</a> could benefit your business.</p>
<h2 id="theclienthobbygoblinagamingstartup">The Client — Hobbygoblin, a Gaming Startup</h2>
<p>Hobbygoblin is a startup business supporting the board game and roleplaying game hobbies, allowing gamers to find each other, connect, and support their local, friendly, independent gaming store. Games like Magic: The Gathering, Dungeons and Dragons, Pathfinder, Warhammer, and more are becoming increasingly popular. These games are much loved by the people that play them, and these customers tend to be very loyal to independent gaming stores who host events and sell the games.</p>
<p>Hobbygoblin’s aim is to get more gamers into stores and buying games from them, rather than online. It does this by providing an easy way for gamers to connect with each other, build communities, find events, and support their friendly, local gaming shops. This will help to keep the tabletop and roleplaying game industry thriving, for the benefit of gamers, retailers, and suppliers.</p>
<h2 id="thechallengemovingfromconcepttodemoreadymvpinjusteightweeks">The Challenge — Moving from Concept to Demo-Ready MVP in Just Eight Weeks!</h2>
<p>Hobbygoblin had a big ask — get a working, high-quality demo smartphone app ready in time for <a href="http://originsgamefair.com/">Origins Game Fair</a> in less than two months! Here at Code Hangar, we knew we were up to the task. Success would depend on working closely with our client, a rock-solid plan, and fast, agile, precise execution.</p>
<h2 id="theplaneightweeksoffeaturesformandfunction">The Plan — Eight Weeks of Features, Form, and Function</h2>
<p>We got to work straightaway. Here’s how the plan shook out:</p>
<ul>
<li><strong>Concept and collaboration —</strong> working with Hobbygoblin to establish the key functionality and features the app needed to have.</li>
<li><strong>MVP Product Strategy —</strong> understanding exactly what we needed to do at every step.</li>
<li><strong>UI design and layout —</strong> creating an easy to use, appealing, and beautiful user interface (UI) and user experience (UX).</li>
<li><strong>Lead capture pages —</strong> allowing Hobbygoblin to capture vital data from demo app users.</li>
<li><strong>Front end app architecture and backend database and APIs —</strong> interfacing with other parts of the app and supporting platform to provide a fast, responsive, seamless experience.</li>
<li><strong>Responsive web development —</strong> the app needed to look great across any device, operating system, or browser.</li>
</ul>
<p>This was all achieved through using the Lean / Agile project management methodology. This is a rapid, iterative, collaborative development process that involves the client from start to finish. It allows for rapid prototyping, improvements, testing, and development, as part of an ongoing cycle.</p>
<h2 id="discoverywhathobbygoblinwantedfromtheirmvp">Discovery — What Hobbygoblin Wanted from Their MVP</h2>
<p>The first part of any MVP process is to understand exactly what the client needs. Hobbygoblin had a few key requirements:</p>
<ul>
<li>Allow any user or gamer of the app to connect with other game players and retailers.</li>
<li>Filter gamers and stores by location, game type, and game title.</li>
<li>Enable registered gamers to chat with other gamers and setup games.</li>
<li>Have a profile system so other gamers can seek you out.</li>
</ul>
<p>We gathered detailed specifications for each of these areas and built them into our MVP delivery cycle.</p>
<h2 id="wireframesprototypingrequirementsandappscreenflows">Wireframes — Prototyping Requirements and App Screen Flows</h2>
<p>We needed to ensure we were understanding Hobbygoblin’s requirements properly, and the best way to do that is to provide examples and context. That meant building a simple wireframe prototype of the app that simulated what each screen would look like, show how users would move from screen to screen, and demonstrated user interactions, inputs, and outputs.</p>
<p>We went through a couple of iterations to perfect the screen flow and user interactions, then built a bare-bones, mobile-first, web-responsive app in the first week. This early version of the app allowed Hobbygoblin to onboard alpha users early, letting them capture leads from both the gamer and local gaming store marketplaces. This let Hobbygoblin start lead capture while the rest of the app was in development.</p>
<h2 id="designanddevelopmentbringingthemvpapplicationtolife">Design and Development — Bringing the MVP Application to Life</h2>
<p>We worked on perfecting the user interface and design of the app while simultaneously creating the back-end platform. Once we understood the user flows and functional needs of each interface, we could create and implement front-end views, a lean, flexible database, and a comprehensive API to allow for easy integration.</p>
<p>The design of the app was completed using industry best practice for UI and UX. That meant being led by Google’s “Material Design” principles, regular user testing and feedback, and ensuring the app itself was easy to use, intuitive, responsive, and fast.</p>
<div class="row">
    <div class="col-md-4 col-sm-12">
    <img src="https://codehangar.io/content/images/2017/08/MOBILE-Landing-Page--Search-.png" alt="How We Launched Hobbygoblin's MVP Web App in Just Eight Weeks">
    <p><i>Search</i></p>
    </div>
    <div class="col-md-4 col-sm-12">
    <img src="https://codehangar.io/content/images/2017/08/MOBILE-Results--Stores--Logged-In-.png" alt="How We Launched Hobbygoblin's MVP Web App in Just Eight Weeks">
        <p><i>Local Game Stores</i></p>
    </div>
    <div class="col-md-4 col-sm-12">
    <img src="https://codehangar.io/content/images/2017/08/MOBILE-Message.png" <p="" alt="How We Launched Hobbygoblin's MVP Web App in Just Eight Weeks"><i>Real-time Messaging</i><p></p>
    </div>
</div>
<h2 id="milestonereviewsensuringallmvpdevelopmentisalignedwithhobbygoblinsneeds">Milestone Reviews — Ensuring all MVP Development is Aligned with Hobbygoblin’s Needs</h2>
<p>We worked alongside Hobbygoblin throughout by holding weekly milestone reviews. This is a flexible review process that lets us quickly react to changing client needs. This was extremely useful as Hobbygoblin prioritized development of their chat functionality about halfway through the development process. We were quickly able to shift development focus to get the chat part of the application in place.</p>
<hr>
“The biggest challenge on this project was that we had so little time. We had to think fast. The frequent review sessions with Hobbygoblin helped us keep our teams in sync and in the end we launched a solid demo for Origins.”
**-Cassandra Wilcox, Founder and CEO at Code Hangar**
<hr>
<h2 id="deliverybringinghobbygoblinsmvpapptolife">Delivery — Bringing Hobbygoblin’s MVP App to Life</h2>
<p>Despite the short timeframe, we never missed our weekly goals and delivered to Hobbygoblin’s requirements week after week — we even managed to squeeze in a few stretch goals! We deployed the app one week before the Origins Game Convention and used the lead time to make sure everything worked for the official launch at the convention.</p>
<p>The launch was a big success and we received lots of useful user feedback. Hobbygoblin is now one of our full service clients and we are continuing to enhance the app and launch new features based on all of the great customer feedback.</p>
<p>We know that getting an app developed can be daunting. That’s why we always focus on understanding our clients and developing awesome MVPs. We believe that through close collaboration with you, we can learn about your business and needs and deliver amazing, beautiful applications that will delight your users and help your business thrive.</p>
<section class="se-section primary-bg">
    <div class="container-fluid">
        <div class="row text-center">
            <h3>Ready to delight your users with an amazing web application?</h3>
            <p>Book a free 1 hour consultation with us and see what we can build for you.</p>
            <a class="btn se-btn-black btn-rounded" onclick="ctaEvent('Case Study CTA', 'Career Fair Plus');" href="https://codehangar.io/contact">Talk to us
            </a>
        </div> <!-- end row -->
    </div> <!-- end container -->
</section>
<br><br>
</div>]]></content:encoded></item><item><title><![CDATA[How We Helped Career Fair Plus Transform Their Native Mobile App for the Responsive Web]]></title><description><![CDATA[<div class="kg-card-markdown"><p><img src="https://codehangar.io/content/images/2017/08/CFPlus-Case-Study-sm.png" alt="CFPlus-Case-Study-sm"></p>
<hr>
"Code Hangar has been fantastic to work with from design to development. They are organized, knowledgeable and great at communicating. On top of that, Code Hangar’s work output is top notch."
<p><strong>-David Nicol, Founder and CEO of Career Fair Plus</strong></p>
<hr>
<p>When it comes to developing the best mobile applications,</p></div>]]></description><link>https://codehangar.io/career-fair-plus-transform-native-mobile-app-responsive-web/</link><guid isPermaLink="false">59823b5861cd6a6686bf6d02</guid><dc:creator><![CDATA[Cassandra Wilcox]]></dc:creator><pubDate>Thu, 03 Aug 2017 19:05:54 GMT</pubDate><media:content url="https://codehangar.io/content/images/2017/08/CFPlus-Case-Study.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2017/08/CFPlus-Case-Study.png" alt="How We Helped Career Fair Plus Transform Their Native Mobile App for the Responsive Web"><p><img src="https://codehangar.io/content/images/2017/08/CFPlus-Case-Study-sm.png" alt="How We Helped Career Fair Plus Transform Their Native Mobile App for the Responsive Web"></p>
<hr>
"Code Hangar has been fantastic to work with from design to development. They are organized, knowledgeable and great at communicating. On top of that, Code Hangar’s work output is top notch."
<p><strong>-David Nicol, Founder and CEO of Career Fair Plus</strong></p>
<hr>
<p>When it comes to developing the best mobile applications, it's vital that they work across any device, browser, or form-factor. User needs are changing, and native iOS and Android apps aren’t always enough.</p>
<p>That’s why when we were approached by <a href="https://www.careerfairplus.com/">Career Fair Plus</a> to develop their native mobile apps into a fully-optimized, responsive web app, we were ready. Here at Code Hangar, we specialize in creating web-enabled apps to help our clients succeed. On one hand that means cutting-edge technical skills and experience, on the other, it means developing close, collaborative partnerships with our clients.</p>
<p>We developed this case study to show how we work with organizations like yours to open up the development process, involve you every step of the way, and make sure you get a finished app that will delight you and your users.</p>
<p>We’re here to take the mystery out of application development. We know finding the right agency to work with can be tough — it’s why we pride ourselves on putting you and your needs first, then developing an awesome application to help you meet them.</p>
<p>Read on to see how we worked with Career Fair Plus, and how we could work with you.</p>
<h2 id="theclientcareerfairplus">The Client — Career Fair Plus</h2>
<p>Career Fair Plus is a mobile app designed to connect University students with businesses interested in hiring them. It does this by allowing students to research companies, navigate job fairs, and get event alerts from their mobile device.</p>
<p>The app is successful with over 700,000 students signed up, 700 career fairs listed, and over 17,000,000 search queries to companies. The app is used by students from prestigious universities worldwide including Stanford, Tufts, NYU, the University of Oxford, and universities from across the US and around the world.</p>
<p>Their business model relies on providing exposure for the employers listed in the app, so that part of the experience needed to be seamless and friction-free.</p>
<p><img src="https://codehangar.io/content/images/2017/08/Screen-Shot-2017-08-02-at-17.49.52-1.png" alt="How We Helped Career Fair Plus Transform Their Native Mobile App for the Responsive Web"></p>
<h2 id="thechallengetransforminganativesmartphoneappintoafullyresponsivewebapp">The Challenge — Transforming a Native Smartphone App into a Fully Responsive Web App</h2>
<p>Career Fair Plus decided to develop a responsive web version of their native smartphone apps for several reasons:</p>
<p><strong>Greater reach</strong> — Career Fair Plus wanted to reach more students through increasing their “device footprint” — the easiest way to do that was to develop their native mobile apps into a fully responsive web app.</p>
<p><strong>Speed to market</strong> — deployment for responsive web apps is instantaneous. New functionality and features can be added immediately  and the app doesn’t have to go through a lengthy approval process each time it's updated on the Apple or Google Play app stores.</p>
<p><strong>Scalability</strong> — adding capacity and features to responsive web apps is fast and easy.</p>
<p><strong>Responsiveness</strong> — responsive web apps work across all devices, formats, screen sizes, and form factors; they do not need to be specially configured for individual devices.</p>
<p><strong>User experience</strong> — redevelopment into a web app allowed us to offer students an expanded desktop experience they were previously missing in the native iOS and Android apps.</p>
<h2 id="therequirementsenhancingtheformfunctionalityandfeaturesoftheapp">The Requirements — Enhancing the Form, Functionality, and Features of the App</h2>
<p>Career Fair Plus expected an optimized, easy-to-use app that delighted end users. That included:</p>
<p><strong>Beautiful design</strong> — the web-optimized app needed to look perfect across every device.</p>
<p><strong>Effortless navigation</strong> — the app should be intuitive and easy to use.</p>
<p><strong>Built for speed</strong> — getting information into and out of the app should be friction-free.</p>
<p><strong>Easy to maintain</strong> — further development, support, and maintenance should be effortless.</p>
<h2 id="therelationshipworkingtogetherwithcareerfairplus">The Relationship — Working Together with Career Fair Plus</h2>
<p>Naturally, when a business trusts us to develop their web application, it’s vital to nurture that relationship and ensure they get exactly what they need. We did that in several ways:</p>
<p><strong>Using a collaborative development process</strong> — we worked closely alongside the team at Career Fair Plus and gave them complete insight into our transparent development process.</p>
<p><strong>Proactively communicating</strong> — communication is at the heart of trust. That's why we actively communicated throughout the process so Career Fair Plus knew exactly what was going on.</p>
<p><strong>Expert project management</strong> — developing an application is a complex task — concept, requirements gathering, development, client approval, testing, and deployment. Our expert project managers worked hand-in-hand with Career Fair Plus to deliver to their exact needs.</p>
<p><strong>Integration with their team, business, and infrastructure</strong> — working with us is like working with a trusted internal development team. That means complete integration with business processes, team members, stakeholders, and existing infrastructure.</p>
<h2 id="thedevelopmentprocessbuildingtestinganddeployingthecareerfairplusapp">The Development Process — Building, Testing, and Deploying the Career Fair Plus App</h2>
<p>Here’s how we worked together with Career Fair Plus to deliver the perfect responsive web app.</p>
<h3 id="initialengagement">Initial Engagement</h3>
<p>In 2015, Career Fair Plus decided to expand their reach by redeveloping their successful iOS and Android app into a new, fully-responsive web app. They hired us to replicate and enhance their existing user experience and tailor it for the web.</p>
<p>The first step in our process was to work with the Career Fair Plus team to prioritize which features from their native mobile apps were critical for launch and which could be developed post-launch.</p>
<h3 id="planningtheapplicationandproductroadmap">Planning the Application and Product Roadmap</h3>
<p>We worked closely with their leadership team to create a complete product development plan and  charted a roadmap of essential features. We put together a concept for a “minimum viable product” (MVP) so their team and stakeholders had something tangible to look at. We wanted to optimize speed-to-market and get them access to a working beta as quickly as possible.</p>
<p>After agreeing the core set of features and requirements for the MVP, we put together a roadmap of Features, testing, and initial release target dates.</p>
<h3 id="collaborativedevelopment">Collaborative Development</h3>
<p>We worked very closely with their development lead using an “Agile” project management method. That allowed us to deliver a bare-bones application and then iteratively build on it based on their feedback. At every stage we knew our deliveries were aligned with their requirements. This gives us the flexibility to integrate new requests and respond to changes in the priorities of Career Fairs Plus.</p>
<p>During planning meetings we collectively reviewed and modified the roadmap and adjusted to changing priorities. This allowed us to incorporate feedback gathered from the internal team of Career Fair Plus and selected external customers. It also lets us ensure we consistently complete each milestone on time.</p>
<h3 id="userexperienceanduserinterfacedesign">User Experience and User Interface Design</h3>
<p>Whether users are interacting with a web application through their smartphone, tablet, laptop, or desktop monitor, the user experience (UX) is key. The user interface (UI) has to look and feel “right” and flow flawlessly from screen to screen.</p>
<p>In our initial design phase, we focused primarily on the desktop experience to optimize the app for the extra screen space that laptop and desktop screens provide. We used Google's Material Design Principles to build an app layout that organizes everything into one cohesive, robust, intuitive user experience.</p>
<hr>
<p><img src="https://codehangar.io/content/images/2017/08/CFP-Gif-1.gif" alt="How We Helped Career Fair Plus Transform Their Native Mobile App for the Responsive Web"></p>
<p><em>Employer List, Details, and Filters — Desktop View<br><br>
This is the heart of the application and shows the benefits of having a full desktop view.  It allows students to select their filtering options, watch the employer list filter down in real-time, and view the details for a specific employer without having to perform any navigation to separate screens.</em></p>
<hr>
<h3 id="responsivewebdevelopment">Responsive Web Development</h3>
<p>Desktop interfaces don’t work well on tablets and smartphones — there’s just not enough screen real estate. Rather than try to break down and replicate the desktop interface, we completely redesigned the UI to optimize it for mobile.  This means we feature each panel in its own separate mobile view, which is a much better UX. We achieved this by using a development framework to dynamically change page styles, functionality, navigation, and user flows depending upon the screen size.</p>
<hr>
<i>Employer List, Details, and Filters — Mobile View</i>
<div class="row">
    <div class="col-md-4 col-sm-12">
    <img src="https://codehangar.io/content/images/2017/08/Screen-Shot-2017-08-02-at-17.25.23.png" alt="How We Helped Career Fair Plus Transform Their Native Mobile App for the Responsive Web">
    <p><i>Employer List</i></p>
    </div>
    <div class="col-md-4 col-sm-12">
    <img src="https://codehangar.io/content/images/2017/08/Screen-Shot-2017-08-02-at-17.36.36.png" alt="How We Helped Career Fair Plus Transform Their Native Mobile App for the Responsive Web">
        <p><i>Employer Details</i></p>
    </div>
    <div class="col-md-4 col-sm-12">
    <img src="https://codehangar.io/content/images/2017/08/Screen-Shot-2017-08-02-at-17.33.56.png" alt="How We Helped Career Fair Plus Transform Their Native Mobile App for the Responsive Web">
    <p><i>Employer Filters</i></p>
    </div>
</div>
<hr>
<h3 id="choosingtherightdevelopmentframework">Choosing the Right Development Framework</h3>
<p>There are several good options when it comes to front-end web development framework. Among our considerations for the best choice was a framework that Career Fair Plus already had experience with that would also let us convert the existing native mobile application into a responsive web app. The framework should also support Material Design, for a better UX.</p>
<p>We shared information comparing three popular frameworks with Career Fair Plus. Our proposal covered various areas including: overall popularity, render speed, associated tooling, server-side rendering, Material Design integration, and native mobile compatibility. Ultimately, the “React” framework was chosen.</p>
<h3 id="qualityassurancebrowseranddeviceoptimization">Quality Assurance, Browser, and Device Optimization</h3>
<p>Although development is the most essential part of delivering a great application, quality assurance (QA), user testing, and device optimization are vital. Towards the end of the build process we focused strongly on QA, testing, and browser / device bug fixes. We carried out rigorous and thorough testing including unique use cases, automated testing, unit testing, integrations, and more.</p>
<h3 id="deliveryanddeployment">Delivery and Deployment</h3>
<p>The most critical part of any development process is deployment. We worked closely with Career Fair Plus to deliver the app seamlessly, resulting in a smooth transition for all users — students, employers, and people promoting job fairs.</p>
<h3 id="ongoingdevelopmentmaintenanceandsupport">Ongoing Development, Maintenance, and Support</h3>
<p>One principle we use is to always produce beautiful, optimized code. We always write the best, most readable code we can. This makes ongoing maintenance, development, and support much easier. Our developers and coders from other organizations can easily figure out what the code does to make further enhancements fast and easy.</p>
<p>Working with the Career Fair Plus team was a delight and we are honored to have earned their trust and friendship.</p>
<p>We know that hiring an application development team can be daunting. That’s why we always focus on understanding our clients first, and developing awesome applications second. We believe that through close collaboration with you, we can learn about your business and needs and deliver amazing, beautiful applications that will delight your users and help your business thrive.</p>
<p>To find out more about Career Fair Plus, <a href="https://www.careerfairplus.com/">visit their website</a> and take their <a href="https://app.careerfairplus.com/uwplatt_wi">new web app</a> for a spin.</p>
<hr>
<!-- ========== CTA SECTION ========== -->
<section class="se-section primary-bg">
    <div class="container-fluid">
        <div class="row text-center">
            <h3>Ready to delight your users with an amazing web application?</h3>
            <p>Book a free 1 hour consultation with us and see what we can build for you.</p>
            <a class="btn se-btn-black btn-rounded" onclick="ctaEvent('Case Study CTA', 'Career Fair Plus');" href="https://codehangar.io/career-fair-plus-transform-native-mobile-app-responsive-web/contact">Talk to us
            </a>
        </div> <!-- end row -->
    </div> <!-- end container -->
</section>
<hr>
</div>]]></content:encoded></item><item><title><![CDATA[How to Build Your Own Slack Bot Integration with Node.js]]></title><description><![CDATA[Setting up a slackbot is easy, and we will show you how to build your own helpful slackbot in 7 simple steps]]></description><link>https://codehangar.io/how-to-build-a-slack-bot-integration-with-node/</link><guid isPermaLink="false">5974c75e1b3ee01deb8f49c8</guid><category><![CDATA[Tutorial]]></category><category><![CDATA[JavaScript]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[Slack]]></category><dc:creator><![CDATA[Max Jackson]]></dc:creator><pubDate>Thu, 03 Aug 2017 02:56:17 GMT</pubDate><media:content url="https://codehangar.io/content/images/2017/08/slack-bot-tutorial.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2017/08/slack-bot-tutorial.png" alt="How to Build Your Own Slack Bot Integration with Node.js"><p>It’s always nice to have a friend who can help you out once in a while. It’s even nicer to have a friend who can help you out 24 hours a day, who never gets tired or bored or sick, who is focused 100% on helping you do what you need to do.</p>
<p>Slackbots can be such friends for you. Setting up a slackbot is easy, and we will show you how to build your own helpful slackbot in 7 simple steps:</p>
<ol>
<li><a href="https://codehangar.io/how-to-build-a-slack-bot-integration-with-node/#step1getyourslackapikey">Get your Slack API Key</a></li>
<li><a href="https://codehangar.io/how-to-build-a-slack-bot-integration-with-node/#step2addanewbotuser">Add a New “Bot User”</a></li>
<li><a href="https://codehangar.io/how-to-build-a-slack-bot-integration-with-node/#step3setupyourproject">Setup Your Project</a></li>
<li><a href="https://codehangar.io/how-to-build-a-slack-bot-integration-with-node/#step4importdependencies">Import Dependencies</a></li>
<li><a href="https://codehangar.io/how-to-build-a-slack-bot-integration-with-node/#step5handleslackmessages">Handle Slack Messages</a></li>
<li><a href="https://codehangar.io/how-to-build-a-slack-bot-integration-with-node/#step6recognizeusersandthebot">Recognize Users (and the Bot)</a></li>
<li><a href="https://codehangar.io/how-to-build-a-slack-bot-integration-with-node/#step7giveyourbotsomepersonality">Give Your Bot Some Personality</a></li>
</ol>
<p>Let's get started!</p>
<h2 id="step1getyourslackapikey">Step 1: Get your Slack API Key</h2>
<p>The first step in creating a slackbot is to create a new Slack app - Slack apps can do and be a lot of different things (such as be a bot in our case), but all of those things require a Slack API key to function.</p>
<p>To get an API key, first go to the <a href="https://api.slack.com/apps">Slack apps management page</a>.</p>
<p>If you aren’t signed in, click ‘sign in to your Slack account’ to manage your team’s apps.<br><br>
<img src="https://codehangar.io/content/images/2017/07/sign_in_slack.png" alt="How to Build Your Own Slack Bot Integration with Node.js"></p>
<p>Once you’re signed in, click the ‘<strong>Create an App</strong>’ button in the middle of the screen.</p>
<p><img src="https://codehangar.io/content/images/2017/07/create_app.png" alt="How to Build Your Own Slack Bot Integration with Node.js"></p>
<p>(If you’ve created a Slack app before you’ll find the button in the upper-right corner). Give your app a name, such as “Example Bot”, and choose the Slack team where you want it the app installed.</p>
<p><img src="https://codehangar.io/content/images/2017/07/example_bot_name.png" alt="How to Build Your Own Slack Bot Integration with Node.js"></p>
<p>Once you click ‘Create App’, you’re good to proceed! We’ve just generated an API key so that our slackbot can interact with everything that Slack has to offer. The next thing to do is to create an actual bot user, built with the API key we just generated, and add it to our Slack team.</p>
<h2 id="step2addanewbotuser">Step 2: Add a New ‘Bot User’</h2>
<p>To add a new bot user, select ‘Bot users’ under the features heading on the left-hand side navigation of the app configuration page.</p>
<p><img src="https://codehangar.io/content/images/2017/07/pasted-image-0--3-.png" alt="How to Build Your Own Slack Bot Integration with Node.js"></p>
<p>Click the ‘Add a bot user’ button and give it username, such as @example_bot.</p>
<p><img src="https://codehangar.io/content/images/2017/07/pasted-image-0--1-.png" alt="How to Build Your Own Slack Bot Integration with Node.js"></p>
<p>Keep the ‘always appear online’ slider in the off position (we want our slackbot to appear offline if it crashes) and then click the add bot user button.</p>
<p>Finally, we have to give our slackbot access to slack with our API key. Select ‘OAuth &amp; Permissions’ under the features heading on the left-hand side navigation of the app configuration page and click the ‘Install App to Team’ button.</p>
<p><img src="https://codehangar.io/content/images/2017/07/pasted-image-0--2-.png" alt="How to Build Your Own Slack Bot Integration with Node.js"></p>
<p>After you authorize the slackbot, you will then have access to the OAuth tokens - click ‘copy’ next to the slackbot user OAuth token to get the token on your clipboard!</p>
<p>Now we're ready to begin coding!</p>
<h2 id="step3setupyourproject">Step 3: Setup Your Project</h2>
<p>Create a new directory where you’d like to put your code. Open a Terminal (<a href="https://nodejs.org/en/download/package-manager/">be sure to have node.js installed</a>), navigate to this new directory, and run</p>
<p><code>npm init</code></p>
<p>to create a new Node.js project. Then, run the following</p>
<p><code>npm install @slack/client --save</code></p>
<p>to install the necessary dependencies.</p>
<p>Next, in the same directory, create a new JavaScript file called ‘bot.js’ and open it up in your favorite text editor or IDE.</p>
<h2 id="step4importdependencies">Step 4: Import Dependencies</h2>
<p>The first thing we need to do is make sure that we import all the dependencies that our slackbot will need to do what it needs to do. Let’s do so by adding the following lines of code.</p>
<pre><code>const RtmClient  = require('@slack/client').RtmClient;
const WebClient  = require('@slack/client').WebClient;
const RTM_EVENTS = require('@slack/client').RTM_EVENTS;

const bot_token = 'your-token-here';
const rtm       = new RtmClient(bot_token);
const web       = new WebClient(bot_token);
</code></pre>
<p>Here’s what the code above is for:</p>
<p><code>RtmClient</code> is the real time messaging client for slack - we’ll use it to do things like send and receive messages.<br><br>
<code>WebClient</code> is the web client for slack - we’ll use it for api calls that don’t have to do with sending or receiving messages in real time.<br><br>
<code>RTM_EVENTS</code> contains the events that the rtm client will interpret and respond to. We’ll get to examples shortly!<br><br>
<code>bot_token</code> is where you specify the api token that you generated at the beginning of the tutorial.<br><br>
<code>rtm</code> and<code>web</code> are the actual clients that we’ll be using for our slackbot, both initialized with our api token.</p>
<h2 id="step5handleslackmessages">Step 5: Handle Slack Messages</h2>
<p>Let’s take a look at how to handle some messages. Write out the following in the same manner as above:</p>
<pre><code>rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) {});
rtm.start();
</code></pre>
<p><code>rtm.on</code> , the response function, attaches an event handler to the real time message client.<br><br>
<code>RTM_EVENTS.MESSAGE</code> indicates that a message was received, and <code>handleRtmMessage(message)</code> allows you to process and respond to that message.<br><br>
<code>rtm.start()</code> starts the slackbot.</p>
<p>Next let’s flesh out the response function a little bit. Modify the above code to look like the following:</p>
<pre><code>rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) {
    if (message.type === 'message' &amp;&amp; message.text) {
        console.log(message.text);
    }
}
</code></pre>
<p>Now the function will check and make sure that the message is of ‘message’ type (as opposed to a gif or another api call) and that there is text in the message, and if both of these conditions are met then it will log the message to the console.</p>
<p>Right now our slackbot is just logging incoming messages to the console, which isn’t very interactive. Let’s make things more interesting by having the bot echo messages back into the channel.</p>
<pre><code>rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) {
    if (message.type === 'message' &amp;&amp; message.text) {
        rtm.sendMessage('You said: ' + message.text, message.channel);
    }
}
</code></pre>
<p><code>rtm.sendMessage</code> is how the slackbot sends a message to a particular Slack channel. <strong>Remember to invite the bot to the channel you want it to participate in.</strong><br><br>
<code>rtm.sendMessage</code> takes two arguments - the message to send, and the Slack channel to send the message to. The Slack channel can be found in the <code>message.channel</code> property.</p>
<p>For Code Hangar’s Goldenboy, we use colons to specify a command. For example sending a message saying</p>
<blockquote>
<p>issue: goldenboy needs more personality</p>
</blockquote>
<p>will create a Github Issue saying that Goldenboy needs more personality. This is because the slackbot recognizes the colon, reading the text preceding the colon as the command and the text after the colon as the value for the command.</p>
<p>Here’s what that looks like in the code:</p>
<pre><code>const allCommands = ['issue', 'command2'];

function executeCommand(command, args) { // this function processes commands
    console.log(command, args); // for now it just logs them to the console
}

rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) {
    if (message.type === 'message' &amp;&amp; message.text) {
        if (message.text.indexOf(':') !== -1) {
            allCommands.forEach((command) =&gt; {
                if (message.text.indexOf(command) === 0) {
                    const args = message.text.substring(command.length);
                    executeCommand(command, args);
                }
            });
        }
    }
});
</code></pre>
<p>Here we have <code>allCommands</code>, which contains an array of the commands that our slackbot will recognize.</p>
<p>The function <code>executeCommand</code> takes the command, and it's following text as its argument and then does something with that command - for now it just logs it to the console, but you can add logic to it to make it much more interesting.</p>
<p>With <code>message.text.indexOf(':') !== -1</code>, the slackbot checks to see if the message contains a colon (and thus a potential command). If it contains a colon it then checks the full list of commands to see if they are present.</p>
<h2 id="step6recognizeusersandthebot">Step 6: Recognize Users (and the Bot)</h2>
<p>The next thing to do is to make our slackbot self-aware, responding to its name and making sure that it doesn’t respond to messages that it sent itself. Slack assigns users a unique id, and the api uses this id rather than the usernames themselves. So, in order to make it so the bot can recognize users (including itself), we’ll have to get the user ids from the channel and associate them with their respective usernames.</p>
<p>We’ll need some new functions to do this. Add the following functions before your rtm.on function:</p>
<pre><code>let users = [];

function updateUsers(data) {
    users = data.members;
}

function getUsernameFromId(id) {
    const user = users.find(user =&gt; user.id === id);
    return user ? user.name : 'unknown member';
}
</code></pre>
<p>The first function, <code>updateUsers</code>, updates our global <code>users</code> variable from a web api call that we’ll define below.<br><br>
<code>getUsernameFromId</code> takes a user id and gets its associated username from the users variable.</p>
<p>Next, add the following after your rtm.on function and before rtm.start:</p>
<pre><code>web.users.list((err, data) =&gt; {
    if (err) {
        console.error('web.users.list Error:', err);
    } else {
        updateUsers(data);
    }
});
</code></pre>
<p><code>web.users.list</code> is a web api call that lists all of the users in the channel. If successful, it returns a JSON object that gets passed to <code>updateUsers</code>, a function that we wrote.<br><br>
<code>updateUsers</code> assigns this JSON object to a variable so that we can use it within the slackbot itself.<br><br>
Finally, <code>getUsernameFromId</code> is called whenever we need to look up a username that corresponds to a given id.</p>
<p>Let’s see these in action.</p>
<pre><code>const robotName = 'examplebot';

rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) {
    if (message.type === 'message' &amp;&amp; message.text) {
        const userName = getUsernameFromId(message.user);
        if (userName !== robotName) {
            if (message.text.indexOf(':') !== -1) {
                allCommands.forEach((command) =&gt; {
                    if (message.text.indexOf(command) === 0) {
                        const args = message.text.substring(command.length);
                        executeCommand(command, args);
                    }
                });
            }
        }
    }
});

</code></pre>
<p>Here <code>robotName</code> is the name of the slackbot. The code then checks to see if the incoming message was NOT sent by the slackbot, getting the message sender’s username with the <code>getUsernameFromId</code> function specified above.</p>
<h2 id="step7giveyourbotsomepersonality">Step 7: Give Your Bot Some Personality</h2>
<p>Now, we can make it so that the robot gets a little feisty when its name is mentioned.</p>
<pre><code>const robotName = 'examplebot';

rtm.on(RTM_EVENTS.MESSAGE, function handleRtmMessage(message) {
    if (message.type === 'message' &amp;&amp; message.text) {
        const userName = getUsernameFromI'xoxb-138883194769-WyyoRghxFHNhqPs9DVpIk24U'd(message.user);
        if (userName !== robotName) {
            if (message.text.indexOf(robotName) !== -1) {
                rtm.sendMessage('Hey ' + userName + ', I heard that!', message.channel);
            }
            if (message.text.indexOf(':') !== -1) {
                allCommands.forEach((command) =&gt; {
                    if (message.text.indexOf(command) === 0) {
                        const args = message.text.substring(command.length);
                        executeCommand(command, args);
                    }
                });
            }
        }
    }
});
</code></pre>
<p>The new code makes it such that the slackbot will recognize its own name and respond!</p>
<p>Here’s what the code looks like all put together:</p>
<script src="https://gist.github.com/MaxJackson/9f03711b13ab3099ef3034c55c645441.js"></script>
<p>Our Goldenboy operates by these basic principles! To check it out for yourself or to install a full-featured Goldenboy of your own, go to <a href="https://github.com/codehangar/goldenboy-bot">Goldenboy’s Github page</a> and click ‘deploy to Heroku’.</p>
<p>Let us know if you have any questions in the comments below! Thanks for reading!</p>
</div>]]></content:encoded></item><item><title><![CDATA[How to Fix Your First Bug in an Existing React/Redux Project]]></title><description><![CDATA[<div class="kg-card-markdown"><p><img src="https://codehangar.io/content/images/2017/07/01_web_development_sm.png" alt="01_web_development_sm"></p>
<p>When you first join a new dev team or contribute to a new open source project, getting started can be a little daunting. Often times, familiarizing yourself with an existing code base can feel like being thrown right into the deep end of a pool. Your team might give you</p></div>]]></description><link>https://codehangar.io/how-to-successfully-navigate-an-existing-code-base-as-a-n00b/</link><guid isPermaLink="false">59761eb5b85a952dbd3d7467</guid><dc:creator><![CDATA[Max Jackson]]></dc:creator><pubDate>Tue, 25 Jul 2017 12:54:29 GMT</pubDate><media:content url="https://codehangar.io/content/images/2017/07/01_web_development-4.png" medium="image"/><content:encoded><![CDATA[<div class="kg-card-markdown"><img src="https://codehangar.io/content/images/2017/07/01_web_development-4.png" alt="How to Fix Your First Bug in an Existing React/Redux Project"><p><img src="https://codehangar.io/content/images/2017/07/01_web_development_sm.png" alt="How to Fix Your First Bug in an Existing React/Redux Project"></p>
<p>When you first join a new dev team or contribute to a new open source project, getting started can be a little daunting. Often times, familiarizing yourself with an existing code base can feel like being thrown right into the deep end of a pool. Your team might give you a brief tour of the project, and you might have some background knowledge to put to use too, but you still won't really know your way around until you actually dig in for yourself.</p>
<p>In this post I'll candidly describe my experience fixing my first bug in an existing project that was brand new to me. I hope my experience and the techniques I used can be useful to other developers who are likely to find themselves in the same position at some point in their careers.</p>
<h3 id="mytask">My Task</h3>
<p>The project I was walking into for the first time was the code base of <a href="http://reqlpro.com/">ReQLPro</a>, a native desktop app built with <a href="https://facebook.github.io/react/">React</a> and <a href="https://electron.atom.io/">Electron</a>. The app is used to help manage <a href="https://www.rethinkdb.com/">RethinkDB</a> databases, many of which contain tables that have multiple pages, and the bug that I needed to fix was basically a pagination issue. The problem was that if a user navigated to the last page of a table with 10 pages, then switched to a table with only 1 page, it would cause the app to end up in a weird state. I needed to make sure the page of the last table didn't influence the state of the next table.</p>
<h3 id="gettingstarted">Getting Started</h3>
<p>I set out knowing that navigating to a new page in the current table would somehow cause errors when changing tables. Knowing little else about how the database connections were handled, I started out to simply see how ReQLPro was storing the current page number, then figure out what it did with that information when the table was changed. I figured that the first place to look was the display, so I started by looking for strings where the page number was presented to the user and then looked for those strings in the code.</p>
<p>In the ReQLPro app, I dug around the tables that were available to me until I found one with multiple pages. I then used the bottom panel to navigate to another page. I saw the current page number displayed as below:</p>
<p><img src="https://lh5.googleusercontent.com/Ia3jy70eX2upMUgRiBc8eQgxpAIcVQ4i4gprhQalG6HU7lqBFZcElqiSXqrI1Es4reiJ5fCZTwWdOtnN7w4cxv1PP6yr8fUstTF_hOJtSOZdO-NPQWYmyL8xVBXOrkq2MsldDcob" alt="How to Fix Your First Bug in an Existing React/Redux Project"></p>
<p>I figured that the numbers would be variables and couldn’t be directly searched for in the code without knowing their names, so I started by searching for what I figured would be a static string, i.e. <code>“(Page”</code>.</p>
<p>This proved to be a success, leading me to the <code>currentPage</code> variable in <code>ExplorerPagination.js</code></p>
<p><img src="https://lh3.googleusercontent.com/QzVWGLrI3nl5E_fQWicp_nUGGeE7IhslALos561LbPFdOsDMpxG3NLIi8pYfxyFyB5_3qErYdMvovBmnysISowDGBmJfVWoxq_MSH-aLIxAAhNUzuEoJqW3Mo6pZRxff6HzJtHih" alt="How to Fix Your First Bug in an Existing React/Redux Project"></p>
<p>However, <code>currentPage</code> seemed to be taking its value from a variable (<code>table</code>) that wasn’t defined anywhere in that file. I figured that <code>PageDetails</code>, its parent component, was being called from elsewhere and being supplied with the <code>table</code> variable from there. I searched the project for <code>PageDetails</code> to get more information. This just led me back to the same file, where I saw that <code>PageDetails</code> was being called from the <code>ExplorerPagination</code> container which was itself exported and being used elsewhere. So I then searched the project for <code>ExplorerPagination</code>.</p>
<p>This led me to <code>ExplorerFooter.js</code>, which I saw was defining <code>table</code> from the state:</p>
<p><img src="https://lh5.googleusercontent.com/EbAtrvszLtHqyW_mHzXSrq46H4A7vUKd5dwBYwpD2ldM9czWoRCQ9EiN2N5z5RNL-r3EmsFCdv7oetX5k5suiBiRSJfwauZOHIbETQrhbfAn3DQzf3tl6LWEtYFbAagS4LYz3p2q" alt="How to Fix Your First Bug in an Existing React/Redux Project"></p>
<p>I continued the search for <code>selectedTable</code>. This led to a ton of search results, but after some digging I came to <code>setSelectedTable</code> in a file called <code>core.js</code>.</p>
<p><img src="https://lh3.googleusercontent.com/-DsMOwqA9kZqlm--YMhGM9NZnkKMnAzmupfq-ztDcqaG6aHR6Kwn1QHMemxaYMZBKyuhPrrzeJZQRlyVJZ9AsXuFxgszh7iso1qzRn3WCe0GPhLhaeaDOEGRfQndhqUlG0dLN8dS" alt="How to Fix Your First Bug in an Existing React/Redux Project"></p>
<p>It looked to me like calling this function would set the query page to 1 (line 94). I figured that this function was being called when a new table was being selected, but that somehow the query wasn’t getting its page changed.</p>
<p>I searched for <code>setSelectedTable</code> and found it in <code>main.reducer.js</code>.</p>
<p><img src="https://lh5.googleusercontent.com/lgiRKpZQ8ZI3w8ZSXYISy_ouEmpSxd9affTq_J9NAwn5PMW5SsXNIppUrj7hQreTDE1uMAhNdLpqgPysdOTXkqy-qh1ZVVHhmulvoFhtb_W1kSL86w0NFLjlCZPhlb2ZjZ5L8fDD" alt="How to Fix Your First Bug in an Existing React/Redux Project"></p>
<h3 id="nowimontosomething">Now I'm on to something...</h3>
<p>Based on my limited React/Redux experience I figured that <code>SET_SELECTED_TABLE</code> was being used to set the selected table, so I continued the search with that.</p>
<p>I found it <code>DbTable.js</code>.</p>
<p><img src="https://lh4.googleusercontent.com/Ltkj95nOZ4g88sRUCOQ_mZFDM3uSHEo0k1A1l0jdqJmTt7_dPh6bZ1jFFg8ObuhutuP_mAmLWxNxdDa3-bJ7SEE-F1jZZLp9Dqy3dXgTe0TKiNGMPFzdrj_jVnsAoExAKgoN8KnY" alt="How to Fix Your First Bug in an Existing React/Redux Project"></p>
<p>I figured that once the table was clicked on, then <code>SET_SELECTED TABLE</code> would be called. What happened next? It looked like the default query (i.e. setting the query page to 1) would be used only if <code>selectedTable</code> was undefined at the time of the click (in the ‘else’ condition on line 44). If <code>selectedTable</code> was defined then <code>selectedTable.query</code> would be used.</p>
<p>I then figured that the problem was occurring because navigating to another table would use the query from the current table. If the current table query was set to page 2, then the next query would be page 2 as well. The user would have to navigate back to page 1 on the present table before navigating to a smaller table to guarantee that the next table query would be for page 1 itself.</p>
<h3 id="fixingtheissue">Fixing the issue</h3>
<p>I fixed the issue by adding the following to the condition (line 42):</p>
<p><img src="https://lh3.googleusercontent.com/UKImyq9MjX-RNlFcp96usr7mThGC0ENX-QVkfyumwWIwNfoclCYV8hosHijotpxkZNwpfn1P9uIFl9_kUfc5x6HoyMCncJU2isuGzuyOUvR1PZSPZ8h44IxEycFVsz3MUq6cMLSh" alt="How to Fix Your First Bug in an Existing React/Redux Project"></p>
<p>This ensured that the current table query would be used only if the user clicked the same table on the side panel. It did so by checking that the next table name was identical to the current table name - if it is not identical then the default page of 1 would be used for the selected table query. This, as near as I can tell, resolves the reported issue.</p>
<h3 id="insummary">In summary...</h3>
<p>I didn’t encounter any glaring technical faults as I went - my primary challenge was unfamiliarity with the codebase, and I hope that my account here helps elucidate what a new user would encounter as they begin work on this project or any new project.</p>
</div>]]></content:encoded></item></channel></rss>