<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>project &#8211; Hand-Picked</title>
	<atom:link href="https://hand-picked.io/tag/project/feed/" rel="self" type="application/rss+xml" />
	<link>https://hand-picked.io</link>
	<description>Top-notch remote software developers</description>
	<lastBuildDate>Thu, 01 Sep 2022 21:26:34 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.6.16</generator>

<image>
	<url>https://hand-picked.io/wp-content/uploads/2019/04/cropped-logo_512-2-32x32.png</url>
	<title>project &#8211; Hand-Picked</title>
	<link>https://hand-picked.io</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Have you just hired a freelance developer? Read these 9 tips first</title>
		<link>https://hand-picked.io/have-you-just-hired-a-freelance-developer-read-these-9-tips-first/</link>
					<comments>https://hand-picked.io/have-you-just-hired-a-freelance-developer-read-these-9-tips-first/#respond</comments>
		
		<dc:creator><![CDATA[Dante Faricci]]></dc:creator>
		<pubDate>Wed, 16 Jun 2021 00:26:08 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[candidates]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[hire]]></category>
		<category><![CDATA[project]]></category>
		<guid isPermaLink="false">https://hand-picked.io/?p=5931</guid>

					<description><![CDATA[After interviews and tests you took the step, and have just decided to hire a remote freelance developer. So, what&#8217;s next? Whether you are the company&#8217;s CEO, product manager or project leader, you will want to make sure your new hire will be productive from day 1. The following list, made after years of onboarding [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>After interviews and tests you took the step, and have just decided to hire a remote freelance developer. So, what&#8217;s next? Whether you are the company&#8217;s CEO, product manager or project leader, you will want to make sure your new hire will be productive from day 1. The following list, made after years of onboarding in remote teams, will help you check for any blind spots to get the most from your new developer.</p>



<h2>Accesses</h2>



<p>Let&#8217;s take advantage of your new hire from the start. We don&#8217;t want to waste hours in an initial setup when we have the chance to move with anticipation. So in this case, if you need to work with your infrastructure team to grant access to git, VPNs, JIRA, etc, you&#8217;ll need to create your preferred corporate secure email or in case that&#8217;s not available, use the developer&#8217;s email (With Hand-Picked, you can use their @hand-picked.io address for this purpose).</p>



<figure class="wp-block-image size-large"><img width="1024" height="576" src="https://hand-picked.io/wp-content/uploads/2021/06/blog-login-outline-1024x576.jpg" alt="Login example drawing" class="wp-image-5934" srcset="https://hand-picked.io/wp-content/uploads/2021/06/blog-login-outline-1024x576.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/06/blog-login-outline-300x169.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/06/blog-login-outline.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Image by <a href="https://pixabay.com/users/geralt-9301/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=3938430" target="_blank" rel="noopener">Gerd Altmann</a> from <a href="https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=3938430" target="_blank" rel="noopener">Pixabay</a></figcaption></figure>



<p>With the email as a starting point, you can create all other dependant accounts, and just wait for those confirmation or verification clicks on day 1.</p>



<h2>Objectives</h2>



<p>There are always tasks in our backlogs that need to be done that are suitable for onboarding processes. Also there are new features or big changes to implement. It is very important to have both kinds of tasks ready for your new developer, so you can assign them right away.</p>



<h2>Suggest reading material</h2>



<p>Is there any heavy download that the developer may need to start? Is there a way to start doing it before day 1? Sharing a link before starting could make this ready for the project beginning. Also, every project has peculiarities that make it different than the previous one. Maybe you use a novel library, VM or architecture that would need some reading?</p>



<figure class="wp-block-image size-large"><img width="1024" height="682" src="https://hand-picked.io/wp-content/uploads/2021/06/blog-book-study-1024x682.jpg" alt="Studying with book" class="wp-image-5935" srcset="https://hand-picked.io/wp-content/uploads/2021/06/blog-book-study-1024x682.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/06/blog-book-study-300x200.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/06/blog-book-study.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Studying, it never ends &#8211; Image by <a href="https://pixabay.com/users/lum3n-1066559/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=1853677" target="_blank" rel="noopener">LUM3N</a> from <a href="https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=1853677" target="_blank" rel="noopener">Pixabay</a></figcaption></figure>



<p>An enthusiast developer undoubtedly would go and check and study all this new info beforehand.</p>



<h2>Build Instructions</h2>



<p>With projects complexity increasing by the day, build processes also became lengthier and more complex. Be sure that in your company&#8217;s wiki or knowledge base the process is up to date, so that doesn&#8217;t become a problem during the first build for your new hire. Obviously, it could happen that there is no doc available, so anything will help, from an email to a quick chat telling about any quirks in the process. This also includes accesses to any Continuous Integration platforms you may use, at least in the development environment (if every commit or pull request trigger new builds where the developer may need to check for errors).</p>



<h2>Communication</h2>



<p>Development teams spend a substantial amount of time in communication platforms, less than with their IDEs, but a lot nonetheless. As with other accesses, this one is particularly important as generally different teams are in the same platform, which may help with the initial setup (or any greeting or welcome rite you may have).</p>



<h2>Project Tracking</h2>



<p>So you have your objectives, deadlines and user stories. How the new developer will check them out? Let&#8217;s make sure they have access to the tool you use for this purpose.</p>



<figure class="wp-block-image size-large"><img width="1024" height="508" src="https://hand-picked.io/wp-content/uploads/2021/06/blog-trello-everything-1024x508.jpg" alt="Trello everything" class="wp-image-5936" srcset="https://hand-picked.io/wp-content/uploads/2021/06/blog-trello-everything-1024x508.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/06/blog-trello-everything-300x149.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/06/blog-trello-everything.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Photo by <a href="https://unsplash.com/@maguay?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noopener">Matthew Guay</a> on <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noopener">Unsplash</a></figcaption></figure>



<p>Is your project starting from scratch and are you creating a remote team? Start creating boards on <strong>Trello</strong> and analyze it later in case you need an upgrade to Jira or other platform.</p>



<h2>Introduce them to their peers</h2>



<p>Introducing the rest of the team is of key importance as the developer starts working on their assignments. Sooner than later they will interact with designers, QAs, other developers, etc. Be sure you introduced them or let them know those names so they can quickly jump into those needed conversations.</p>



<h2>Anything extra to sign?</h2>



<p>Legal stuff, always important to have them already done so we can let creativity flow. If you need any extra NDAs or contracts, be sure to sign those deals before day 1. If you hire through Hand-Picked, we&#8217;ll be sure to remind you about this.</p>



<h2>Company equipment</h2>



<p>In case your Company workflow involves providing a laptop or equipment that may have already solved many points previously mentioned (already installed VPN, emails accounts already setup, necessary software installed) be sure to ship it at least one week before the initial date with your new developer.</p>



<figure class="wp-block-image size-large"><img width="1024" height="683" src="https://hand-picked.io/wp-content/uploads/2021/06/blog-fedex-plane-1024x683.jpg" alt="FedEx planes" class="wp-image-5937" srcset="https://hand-picked.io/wp-content/uploads/2021/06/blog-fedex-plane-1024x683.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/06/blog-fedex-plane-300x200.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/06/blog-fedex-plane.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Photo by <a href="https://unsplash.com/@sixty7pixels?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noopener">Nick Morales</a> on <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noopener">Unsplash</a></figcaption></figure>



<p>Different countries have different times for their customs processing and anticipating it for at least one week with express shipping carriers -like DHL or FedEx- will make this less of a problem.</p>



<h2>Final thoughts</h2>



<p>What do you think about these points? Many apply to both new in-house developers and contractors, so we hope this guide helped you.</p>



<h2>Hire your next Hand-Picked developer</h2>



<p><a href="https://hand-picked.io/hire-hand-picked-developers/" class="rank-math-link">Hand-Picked developers</a> are motivated from start, so you will find them actively looking to integrate into your team as soon as possible. They will be open to any suggestions even before the contract begins, so you are welcome to communicate even if there is some time left before the project starts.</p>



<p><em>Cover Photo by <a href="https://unsplash.com/@anniespratt?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noopener">Annie Spratt</a> on <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noopener">Unsplash</a></em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hand-picked.io/have-you-just-hired-a-freelance-developer-read-these-9-tips-first/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Why do we challenge our candidates with algorithms tests?</title>
		<link>https://hand-picked.io/why-challenge-our-candidates-with-algorithm-tests/</link>
					<comments>https://hand-picked.io/why-challenge-our-candidates-with-algorithm-tests/#respond</comments>
		
		<dc:creator><![CDATA[Julián Álvarez]]></dc:creator>
		<pubDate>Mon, 17 May 2021 20:57:23 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[algorithms]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[candidates]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[experts]]></category>
		<category><![CDATA[project]]></category>
		<guid isPermaLink="false">https://hand-picked.io/?p=5899</guid>

					<description><![CDATA[“Why do you ask candidates to do algorithms challenges?” It’s a question that usually happens in our interviews. It may appear that most software development jobs are on a category that won’t require you to use advanced algorithms. Tasks like getting data from a&#160;REST API&#160;and showing them to the user in an accessible way, are [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>“Why do you ask candidates to do algorithms challenges?” It’s a question that usually happens in our interviews. It may appear that most software development jobs are on a category that won’t require you to use advanced algorithms. Tasks like getting data from a&nbsp;<strong>REST API</strong>&nbsp;and showing them to the user in an accessible way, are the most common.</p>



<figure class="wp-block-image size-large"><img width="1024" height="683" src="https://hand-picked.io/wp-content/uploads/2021/05/engineers-whiteboard-apis-1024x683.jpg" alt="Female software engineers in discussion in front of whiteboard" class="wp-image-5910" srcset="https://hand-picked.io/wp-content/uploads/2021/05/engineers-whiteboard-apis-1024x683.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/05/engineers-whiteboard-apis-300x200.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/05/engineers-whiteboard-apis.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Photo by <a href="https://unsplash.com/@thisisengineering?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noopener">ThisisEngineering RAEng</a> on <a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noopener">Unsplash</a></figcaption></figure>



<h2>Algorithms and Data Structures, why?</h2>



<p>So let’s approach this question describing when knowledge of algorithms and data structures kick in -in unexpected ways sometimes- into our jobs.</p>



<p>One of the clearest examples is the usage of indexes in databases. It happens that certain queries start being very slow in systems where load and size have increased. Even optimizing the query (tables order, using less data, etc) would not be enough and the need of creating an index arises. Why indexes? Well, basic understanding of data structures make it easy to understand how data access speed is influenced by the data structures enabling it. The most common index in databases are&nbsp;<strong>B-tree&nbsp;</strong>indexes, which enable searches, access, etc in logarithmmic time. So we have it, algorithms and data structures come along again.</p>



<figure class="wp-block-image size-large"><img width="1024" height="768" src="https://hand-picked.io/wp-content/uploads/2021/05/child-water-1024x768.jpg" alt="child playing with water" class="wp-image-5912" srcset="https://hand-picked.io/wp-content/uploads/2021/05/child-water-1024x768.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/05/child-water-300x225.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/05/child-water.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Image by <a href="https://pixabay.com/users/igrow-335413/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=392971" target="_blank" rel="noopener">Mandy Klein</a> from <a href="https://pixabay.com/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=392971" target="_blank" rel="noopener">Pixabay</a></figcaption></figure>



<p>There is something called, “<a href="https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/" target="_blank" rel="noreferrer noopener">The Law of leaky abstractions</a>” or “leaky abstractions” as is. Simply said, we could trust that the database itself will take the query and run it in efficiently. As we said before, this happens to be wrong in the long run. Sooner than later, the developer (or DBA?) will have to get his hands dirty and make that query perform better, regardless of semantics.</p>



<p>How does this all DB&nbsp;<strong>SQL</strong>&nbsp;Query thing relates with algorithmic tests? Well, those tests will reveal if the developer is aware of performance impact on many decisions during development. Unnecessary loops, or extra storage used may show disregard on knowing how things work, or that some knowledge is missing.</p>



<p>In some interviews we could find that developers rely too much on a given language libraries (data structures, strings, etc), to the extent that they think the library does magic and they wouldn’t explain “how they would implement it if they had to”. This kind of shallow knowledge gives us developers that, for example, don’t know how sorting works or why allocating memory for arrays in each write access is not good.</p>



<p>Solutions made by aware developers will always have those performance concerns on the radar, which makes those kind of solutions desirable. Clients know that, and in their search for great developers, most of them will want to be sure that the candidate has what it takes.</p>



<figure class="wp-block-image size-large"><img width="640" height="422" src="https://hand-picked.io/wp-content/uploads/2021/05/eniac-programmers.gif" alt="" class="wp-image-5914"/><figcaption><em>ENIAC Programming</em></figcaption></figure>



<p>That’s the reason why at Hand-Picked we do both automated algorithm tests and live coding interviews. We are interested in knowing that our developers will make the cut and have low chances of obvious performance blunders.</p>



<p>I would like to mention some notes about performance in general, there is a saying</p>



<blockquote class="wp-block-quote"><p>Premature optimization is the root of all evil</p><cite>Credited to Donald Knuth, in a longer sentence</cite></blockquote>



<p>which basically states that acting on performance when it isn’t important, does more harm than good. Will you spend time trying out an idea for your customers to use, or rather seeing if you’ll need a Big Data database to store analytics? Above all, even though algorithmic knowledge is valuable, it is more valuable for the developer to have criteria when taking decisions. So there is also other phrase about priorities.</p>



<blockquote class="wp-block-quote"><p>Make it work, Make it nice, Make it fast</p><cite>This formulation of this statement has been attributed to Kent Beck</cite></blockquote>



<p>We can see that making it work (correct, do what it is intended) and ‘nice’ (which means, making maintainable code in some way) come first. What will you make fast if it doesn’t work at all? Rhetoric question, as it may happen that not making something fast enough, may make the thing NOT WORK AT ALL for a given volume, users quantity or data amount. So always pay attention, it may happen that performance could be of utter importance.</p>



<p>These two phrases and that counter-argument may look contradictory but they are put together here just to show how good criteria must always be on top.</p>



<h2>Conclusion</h2>



<p>As performance is an important point in Software Development, <a href="https://hand-picked.io" class="rank-math-link">Hand-Picked</a> verifies the algorithmic knowledge of its candidates through an Automated Coding Platform and a Live Coding interview. This way we know we are dealing with a candidate that has the proper tools to solve performance problems that may arise during their engagements. But we don’t exaggerate it, solving CS Olympics level problems isn’t a requirement to enter the Hand-Picked network, just a good level of criteria when coding.</p>



<p><em>Cover Photo by&nbsp;<a href="https://unsplash.com/@alvarordesign?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noreferrer noopener">Alvaro Reyes</a>&nbsp;on&nbsp;<a href="https://unsplash.com/s/photos/computer-rubik?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" rel="noreferrer noopener">Unsplash</a></em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hand-picked.io/why-challenge-our-candidates-with-algorithm-tests/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Android Projects Like a Pro (Expert) – Part 2 &#8211; Business oriented</title>
		<link>https://hand-picked.io/android-projects-like-a-pro-part-2/</link>
					<comments>https://hand-picked.io/android-projects-like-a-pro-part-2/#respond</comments>
		
		<dc:creator><![CDATA[Cristian Duarte]]></dc:creator>
		<pubDate>Tue, 02 Mar 2021 19:36:49 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[project]]></category>
		<guid isPermaLink="false">https://hand-picked.io/?p=5668</guid>

					<description><![CDATA[In the first part of this series we saw some architectural aspects of implementing large scale Android projects. In this article, we&#8217;ll focus on the product and business aspects of them. Wireframing / Interface Design So you&#8217;ve come up with an idea. You create a new Activity or Fragment, a layout, some views &#8211;similar to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>In the <a aria-label=" (opens in a new tab)" href="https://hand-picked.io/android-projects-like-a-pro-part-1/" target="_blank" rel="noreferrer noopener" class="rank-math-link">first part of this series</a> we saw some architectural aspects of implementing large scale Android projects. In this article, we&#8217;ll focus on the product and business aspects of them.</p>



<h2>Wireframing / Interface Design</h2>



<p>So you&#8217;ve come up with an idea. You create a new Activity or Fragment, a layout, some views &#8211;<em>similar to this other big App</em>-, so it shouldn&#8217;t be wrong, right? Soon you realize that this approach doesn&#8217;t scale well.</p>



<p>What if you needed to visualize different ideas without spending time compiling? What if a product manager intends to tell you an idea? Will he code? We wouldn&#8217;t expect that from the design team either.</p>



<p>Wireframing is the tool that comes in handy to represent visually your app (or website). Anyone may make a low-detail representation of the intended screen and the user flow. Some say wireframing is the skeletal outline of the app, which is very accurate: You may see that most wireframes are just black lines on a white canvas. Also, this helps in getting feedback about the interface before writing a single line of code.</p>



<figure class="wp-block-image size-large"><img src="https://balsamiq.com/assets/learn/articles/flow.png" alt="Balsamiq Mockups allows focusing on the business side of Android Projects with a simple low-res approach"/><figcaption><a href="https://balsamiq.com/wireframes/" target="_blank" aria-label="Balsamiq Wireframes (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Balsamiq Wireframes</a> fast, handwritten-like approach</figcaption></figure>



<p>Most tools these days offer the collaboration feature, where interfaces can be shared across the team or also might be edited collaboratively in real time. Also these tools may vary in terms of features, some will look more like skeletons (or even like hand-written), others with high-resolution (such tools may offer also exporting resources to use right away in your project), some others may implement &#8220;click-like&#8221; features to navigate the flow as if it were an app, or maybe support large canvases to cover an entire app (navigation flow) in just one screen.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://images.ctfassets.net/1khq4uysbvty/1i7cGmXoeCnP1uhXjmQPyW/8acf2ac8e9bf468208592455ae10318c/Prototyping_01.gif?&amp;w=523" alt=""/><figcaption><a href="https://www.figma.com/prototyping/" target="_blank" aria-label="Figma&#039;s (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Figma&#8217;s</a> prototyping, with interactions and animations</figcaption></figure></div>



<p>You may find some of these tools (and discipline) with different names, that may have a similar meaning: Wireframes, Mockups, Interface Design, Workflow design, UX Design or Screen Design to name a few.</p>



<figure class="wp-block-image size-large"><img src="https://images.ctfassets.net/w6r2i5d8q73s/7EisW4dm8ZlCLrgFN4Gcz/a0612e76550cec84b0f5da422e56f4cf/S_-_Wireframing.png" alt=""/><figcaption>Wireframing in <a href="https://miro.com/features/" target="_blank" aria-label="Miro (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Miro</a></figcaption></figure>



<p>Last but not least, a very and simple tool is always drawing interfaces using just pencil and paper. Before remote came in as a norm (by the way Hand-Picked was already remote before it was cool), teams used to draw interfaces on paper or whiteboards. I guess it will return in some way in the future but you can already use it by yourself if you have that task. Sometimes it&#8217;s kind of refreshing and satisfactory to see how a screen we drew on paper ended up in a final working product.</p>



<figure class="wp-block-image size-large"><img width="1024" height="683" src="https://hand-picked.io/wp-content/uploads/2021/03/wireframe-hand-1024x683.jpg" alt="" class="wp-image-5690" srcset="https://hand-picked.io/wp-content/uploads/2021/03/wireframe-hand-1024x683.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/03/wireframe-hand-300x200.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/03/wireframe-hand.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Wireframing by hand</figcaption></figure>



<p>Note: In many teams the figure of a Product Manager (or Product Owners, or a mixed collaboration with designers) will be in charge of delivering Wireframes as an input for developers. Developers with wireframes and designs (if such Wireframes are low-res) would then be in charge of following that documentation. This doesn&#8217;t make this practice something exclusive to Product Managers or Designers. Be it your initiative within an existing project or you creating your own app, you will benefit from wireframing ideas before jumping in to your preferred IDE.</p>



<p>Note 2: Always try to make screens that have one important objective for the user. This will end up with simple to use interfaces that even our grandmas will be able to use (tech-savvy grandmas).</p>



<h2>A/B Testing</h2>



<p>We start getting serious, we mean business. What am I talking about? For any project, we (plus the stakeholders) will have an objective. Name it, more users, more engagement, more sales, more usage, it won&#8217;t matter if the software is for an NGO or it&#8217;s profit driven, all the endeavour will have a target to reach.</p>



<p>So in this process, new ideas will come up, and we will decide how to implement them. But, what if the idea has some cons that may happen to hurt the objective? Maybe we need that extra field in the registration screen for marketing purposes (so, more revenue); but will that affect Sign Ups in general with this additional nuisance? (Let&#8217;s face it, in mobile each extra field is kind of an effort for the user). How much will it hurt?</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img width="638" height="359" src="https://hand-picked.io/wp-content/uploads/2021/03/hamburger-no.jpg" alt="" class="wp-image-5693" srcset="https://hand-picked.io/wp-content/uploads/2021/03/hamburger-no.jpg 638w, https://hand-picked.io/wp-content/uploads/2021/03/hamburger-no-300x169.jpg 300w" sizes="(max-width: 638px) 100vw, 638px" /><figcaption>Someone had to measure if changing the Hamburger Menu for a Tab Bar would work.</figcaption></figure></div>



<p>In most cases there will be no other chance to try it out (as you may have different public or business than some other studies, it won&#8217;t be enough to go and check some 3rd party stats). Here it comes, A/B Testing. This &#8216;technique&#8217; allows us to release features to a subset of users before applying it to all of them. So in case we see that the feature was successful, we would have a green light to rollout it to all users. To know if it was successful we&#8217;ll need to have implemented analytics in the app, something explained next in the article.</p>



<figure class="wp-block-image size-large"><img src="https://www.seobility.net/en/wiki/images/2/24/AB-Testing.png" alt=""/><figcaption>AB Testing &#8211; Author: Seobility &#8211; License:&nbsp;<a class="rank-math-link" href="https://www.seobility.net/en/wiki/Creative_Commons_License_BY-SA_4.0" target="_blank" rel="noopener">CC BY-SA 4.0</a></figcaption></figure>



<p>In Android A/B Testing could be as simple as toggling features by asking for remote configurations (per user maybe). The backend code may support this or we may use Android utilities like &#8220;Firebase Remote Config&#8221; and <a href="https://developer.android.com/distribute/best-practices/develop/in-app-a-b-testing" class="rank-math-link" target="_blank" rel="noopener">Google Analytics for Firebase</a>. The new <a href="https://firebase.google.com/docs/ab-testing" class="rank-math-link" target="_blank" rel="noopener">Firebase A/B Testing</a> service has it all integrated, so it is also a well suited alternative if our target phones will have all Google Apps.</p>



<p>There are also approaches to take in case of having a Clean Architecture, where we could switch Views the behaviour based on what we configure in <a href="https://firebase.google.com/docs/remote-config/" class="rank-math-link" target="_blank" rel="noopener">Firebase Remote Configuration</a>, which is retrieved from the <code>FirebaseRemoteConfig</code> class. There is a good tutorial about <a aria-label="AB Testing in a Clean Architecture project (opens in a new tab)" href="https://medium.com/@burkedamian/a-b-testing-on-android-with-a-clean-architecture-c66c6bfd2131" target="_blank" rel="noreferrer noopener" class="rank-math-link">AB Testing in a Clean Architecture project</a>.</p>



<h2>Analytics</h2>



<p>We&#8217;ve talked about A/B Testing as one of the tools to improve and make our app successful. In other cases, to have new ideas, it is precise to know where will those have the most impact. For example, knowing what are the screens or features users use more frequently. Or where users have navigation issues or slow downs.</p>



<p>Integrating an analytics system in the app is of utter importance to have visibility about our app performance (business-wise).</p>



<figure class="wp-block-image size-large"><img width="1024" height="576" src="https://hand-picked.io/wp-content/uploads/2021/03/GooglAnalytics-1024x576.png" alt="" class="wp-image-5674" srcset="https://hand-picked.io/wp-content/uploads/2021/03/GooglAnalytics-1024x576.png 1024w, https://hand-picked.io/wp-content/uploads/2021/03/GooglAnalytics-300x169.png 300w, https://hand-picked.io/wp-content/uploads/2021/03/GooglAnalytics.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Google Analytics for <a href="https://www.youtube.com/watch?v=8iZpH7O6zXo" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Firebase</a> (promo)</figcaption></figure>



<p>In general, the process involved in most systems is as follows:</p>



<ul><li>Setup the library for the specific analytics service</li><li>Log events (or screens and information) in particular parts of the app that you need to measure</li><li>Debug events and see reports. Most platforms give flexibility for reporting, even with SQL-like filters.</li><li>Iterate with new events and continue measuring</li></ul>



<p>What services options are there? <a href="https://firebase.google.com/products/analytics" target="_blank" aria-label="Google Analytics for Firebase (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Google Analytics for Firebase</a> might be the go-to option for Android, but as Google Analytics was first made for Web, it may be missing some points. It is also said that it&#8217;s a bit slow to update. Something interesting is that it can log events but also track screens, with integration with what are screens in Android, Activities. For the moment, Google Analytics for Firebase is free without quotas nor paid tiers. Time will tell in the future.</p>



<p>There are also two options that try to innovate in the analytics scene, <a aria-label="Amplitude (opens in a new tab)" href="https://amplitude.com/" target="_blank" rel="noreferrer noopener" class="rank-math-link">Amplitude</a> and <a aria-label="Mixpanel (opens in a new tab)" href="https://mixpanel.com/" target="_blank" rel="noreferrer noopener" class="rank-math-link">Mixpanel</a>. Among so many features, both provide incredible visualizations and charts, and advanced querying capabilities.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img src="https://amplitude.com/wp-content/uploads/2021/02/mersure-img2.png" alt=""/><figcaption><a href="https://amplitude.com/" target="_blank" aria-label="Amplitude (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Amplitude</a> (promotional) Dashboard</figcaption></figure></div>



<p>I want to note something that is not an analytics service per se, but something to govern them all. You will find that if you need to use multiple services, you will have to have your own layer that logs events in those different services. Or at least, to be a bit agnostic of the service, you would prefer to have that layer. Additionally, it will happen that the Product team will have their requirements for analytics and from that point until having those reports in production (with your LogEvent calls in the middle) some mistakes will occur.</p>



<p>So there is where a tool like <a aria-label="Avo (opens in a new tab)" href="https://www.avo.app/" target="_blank" rel="noreferrer noopener" class="rank-math-link">Avo</a> comes forward. Avo allows Product Managers, Developers and Data Scientists to work together on the same analytics plan. Said simply, while a Product Manager may define what information they require for different events, Avo has the capability to manage &#8216;branches&#8217; and generate code. Imagine a PM creating a &#8220;CONFIRM_PURCHASE&#8221; event with some info required like &#8220;DATE&#8221;, &#8220;PRODUCTS&#8221;. Well, Avo will generate the method to call: <code>Avo.confirmPurchase(date, products)</code>, amazing uh?</p>



<figure class="wp-block-image size-large"><img src="https://assets.website-files.com/5ec440af4659932990a1020c/5ee0ca30419db01182c33bed_integrations-diagram.png" alt=""/><figcaption><a href="https://www.avo.app/how-it-works" target="_blank" aria-label="Avo integration  (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Avo integration </a>at a glance</figcaption></figure>



<p>Avo might look like something advanced, but it has proven to make the analytics code development easier in large multidisciplinary teams.</p>



<h2>There is more…</h2>



<p>This second part focused more on the business side of the project. Far from being over, the next part will go back to the code side of things when making Professional Android Apps!</p>



<p><em>Cover photo: Photo by&nbsp;<a href="https://unsplash.com/@alvarordesign?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">Alvaro Reyes</a>&nbsp;on&nbsp;<a href="https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">Unsplash</a></em></p>



<p><em>Wireframing by hand: Photo by <a href="https://unsplash.com/@kellysikkema?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">Kelly Sikkema</a> on <a href="https://unsplash.com/s/photos/wireframe-sketch?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener nofollow" class="rank-math-link">Unsplash</a></em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://hand-picked.io/android-projects-like-a-pro-part-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Android Projects Like a Pro (Expert) &#8211; Part 1</title>
		<link>https://hand-picked.io/android-projects-like-a-pro-part-1/</link>
					<comments>https://hand-picked.io/android-projects-like-a-pro-part-1/#respond</comments>
		
		<dc:creator><![CDATA[Cristian Duarte]]></dc:creator>
		<pubDate>Tue, 02 Feb 2021 21:19:41 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[project]]></category>
		<guid isPermaLink="false">https://hand-picked.io/?p=5573</guid>

					<description><![CDATA[Having a working Android App is not enough. More users, revenue and traffic need an engineering approach. Have you recently managed to earn an Android Developer Certification? Or maybe just finished your first personal project? Being in charge of an Android app that has gained quite a market share? Or the team has just grown [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Having a working Android App is not enough. More users, revenue and traffic need an engineering approach.</p>



<p>Have you recently managed to earn an Android Developer Certification? Or maybe just finished your first personal project? Being in charge of an Android app that has gained quite a market share? Or the team has just grown due to upcoming new features to make?</p>



<p>The next decisions and steps to take will have to tackle scalability and make you and your team Android Pros.</p>



<p>This guide is a summary of some tools and aspects the project will have to cover besides Fragments and Views.</p>



<h2>Architecture</h2>



<p>When an app becomes increasingly complex, with more features and aspects, making changes starts being problematic. Code duplication, newly introduced bugs, difficulty to change parts become common occurrences that hinder progress.</p>



<p>One of the steps for preparing for it, is establishing a good architecture, that takes into account modularity prospects of how much of a scope the project will have.</p>



<p>Is it a card game? Will you have to add different games afterwards? Is it a delivery app? What about adding pharmacies to it? How will you attach prescriptions? Is it a chat app? What about adding payments to it?</p>



<p>We may not predict the future but with some idea of the scope we will be able to think about how to modularize the project.</p>



<figure class="wp-block-image size-large"><img width="1024" height="768" src="https://hand-picked.io/wp-content/uploads/2021/02/architecture-plane-1024x768.jpg" alt="" class="wp-image-5579" srcset="https://hand-picked.io/wp-content/uploads/2021/02/architecture-plane-1024x768.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/02/architecture-plane-300x225.jpg 300w, https://hand-picked.io/wp-content/uploads/2021/02/architecture-plane.jpg 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Also, architecture can take care of possible bugs and stability (for example, if we go the Google route, using their components that take care of configuration changes, stability issues, concurrency, etc), and make testing easier.</p>



<p>You can take a look at Google&#8217;s <a href="https://developer.android.com/jetpack/guide" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">recommendation for apps architecture</a>.</p>



<p>Not taking Google&#8217;s as a last word, you can also check out <a href="https://www.techyourchance.com/netflix-shows-the-future-of-android-architecture/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">concepts and approach about MVP (Model-View-Presenter) by Netflix</a>.</p>



<h3>Modules</h3>



<p>While &#8220;module&#8221; sounds like an abstract concept for separation of concerns or sub-units of code, in Android projects it can be the concrete concept of Modules. Those parts in which an Android Project can be composed of.</p>



<p>We may have one only module for the entire app (not bad if we are just starting and trying out an idea) but it will become more evident the need to divide the code.</p>



<p>Separation of concerns, from a functional or non-functional point of view can both work: We can separate layers (UI, Data, Network, etc), features (Auth, BigFeature1, BigFeature2, Commons, etc) or a mix.</p>



<p>In case of having multiple teams for different parts of the app (imagine a supermarket app where electronics appliances screens are totally different from the groceries ones), different modules may provide a natural separation among teams as well. This is useful as well in <a href="https://hand-picked.io/evaluating-remote-software-development-nearshore-outsourcing-is-the-answer-post/" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">remote and distributed teams</a>.</p>



<p>Here a bit more conceptual in-depth presentation about modules.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Build a modular Android app architecture (Google I/O&#039;19)" width="780" height="439" src="https://www.youtube.com/embed/PZBg5DIzNww?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<h3>Demo Apps</h3>



<p>The bigger the app, the more it will take to build, it is kind of a fact.</p>



<p>What if we want to (manually) test a part of the app we are working on? What if building takes 15 minutes? This WILL happen, sadly. In this case, modularizing among features may help as you may add mini-apps, maybe called &#8220;demos&#8221; or feature &#8220;Activities&#8221;, which will make it possible to have fast cycles for your features development.</p>



<figure class="wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Android at Scale @Square" src="https://player.vimeo.com/video/380843878?dnt=1&amp;app_id=122963" width="780" height="439" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p><a href="https://www.droidcon.com/media-detail?video=380843878" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">In an Square talk they tell about one approach to have fast builds and development with this kind of architecture (video above)</a>.</p>



<h3>Dependencies</h3>



<p>It will become prevalent that different modules, will end up connecting, or said better, depending upon themselves.</p>



<p>Just imagine your &#8220;Auth&#8221; module being asked for sessions from multiple parts of the app. Dependency Injection will come to the rescue for this and for easier Testing as well.</p>



<p>You won&#8217;t see any big Android project without a kind of Dependency Injection applied to it. Currently on Android, Hint is taking the position from Dagger as the recommended standard to follow (pushed by Google).</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Hilt - Android Dependency Injection" width="780" height="439" src="https://www.youtube.com/embed/B56oV3IHMxg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<h2>Testing</h2>



<p>Putting the religion aspect aside, more automated Testing will help the project. At least, avoiding to have the same bug twice.</p>



<p>The battery of tests will go from testing code/behavior one class at a time up to end to end tests that follow user paths in the app (for example, from login until saving changes in the app).</p>



<p>There is a Testing Pyramid that graphically explains three testing categories.</p>



<figure class="wp-block-image size-large"><img src="https://developer.android.com/images/training/testing/pyramid.png" alt="Android Testing Pyramid"/></figure>



<p>Some things we&#8217;ll have to consider:</p>



<ul><li>The need of implementing Dependency Injection in the project is inevitable. (At least, it will help with mocking features that are not meant to be tested in certain Unit Tests. It will also have a performance impact on Testing as well. Let&#8217;s avoid accessing the database or network when running a logic test.)</li><li>Small tests should be fast and generally only test Kotlin/Java code. Large tests, may need to run on real devices or emulation. That&#8217;s why some companies have phone farms or use services like AWS Device Farm or Firebase Test Lab.</li></ul>



<p><a href="https://developer.android.com/training/testing/fundamentals" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">The Fundamentals of Testing (for Android) can be seen here in the Android Developer site</a>.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Test-driven development on Android with the Android Testing Support Library (Google I/O &#039;17)" width="780" height="439" src="https://www.youtube.com/embed/pK7W5npkhho?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<p>Another aspect of testing that appears is how much of our app we are testing. This can be reflected by Code Coverage. Nowadays Android Studio has a built-in feature that allows you to run code with code coverage. Use it at your own &#8216;risk&#8217;, do not try to reach 100% without a second thought. Some parts in the code will be much more critical than others, focus on them first.<br><a href="https://developer.android.com/studio/test#view_test_coverage" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">Android Studio: how to run tests with code coverage</a>.</p>



<h2>Continuous Integration</h2>



<p>How we can reduce the chances of delivering new bugs into production after making a new bunch of code (new features, fixes, etc)? What about having builds ready for QA? Or.. how will all those tests run when integrating code in our Master branch?</p>



<figure class="wp-block-image size-large"><img width="1024" height="683" src="https://hand-picked.io/wp-content/uploads/2021/02/blog-making-instrument-1024x683.jpg" alt="" class="wp-image-5582" srcset="https://hand-picked.io/wp-content/uploads/2021/02/blog-making-instrument-1024x683.jpg 1024w, https://hand-picked.io/wp-content/uploads/2021/02/blog-making-instrument-300x200.jpg 300w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Here is when Continuous Integration takes their role in the project. Basically (but not restricted to) at least all new commits in our main branch (Master? but it could also be made for every feature branch) will trigger a new build. That build will itself be tested, both automatically and manually by our QA team (if we have any, please have one). It may also deliver those builds, making them accessible to anyone interested (QA, ourselves, Product management, etc).</p>



<p>Nowadays Jenkins CI is one of the most used, but some other tools can be used as well, Bitrise, Github Actions or even Gitlab CI.</p>



<p>In general it will be duty of one of the developers (or maybe a delivery manager?) to configure the platform and project with the steps to execute when integrating. Obviously we will want to run tests and make the build. Additionally many actions in this article series will end up running from CI as we want every &#8220;health&#8221; check for our project to be run automatically.</p>



<p>Check out this <a href="https://www.raywenderlich.com/10562143-continuous-integration-for-android" target="_blank" aria-label=" (opens in a new tab)" rel="noreferrer noopener" class="rank-math-link">practical introduction to Android Continuous Integration</a>.</p>



<h2>There is more..</h2>



<p>That&#8217;s all for this first part of the series. I promise, there is a lot more to cover when making Scalable Professional Android apps!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://hand-picked.io/android-projects-like-a-pro-part-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
