<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
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/">
	<channel>
		<title>Author at Infinum</title>
		<atom:link href="https://infinum.com/blog/author/damjan-vujaklija/feed/" rel="self" type="application/rss+xml" />
		<link></link>
		<description>Building digital products</description>
		<lastBuildDate>Thu, 09 Apr 2026 09:24:29 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>36772https://infinum.com/uploads/2023/03/img-pf-hero.webp</url>
				</image>
				<title>The Framework for Making the Best Career Move</title>
				<link>https://infinum.com/blog/career-progression-framework/</link>
				<pubDate>Wed, 22 Mar 2023 11:17:35 +0000</pubDate>
				<dc:creator>Damjan Vujaklija</dc:creator>
				<guid isPermaLink="false">https://infinum.com/?p=36772</guid>
				<description>
					<![CDATA[<p>By creating our custom progression framework, we increased transparency around sensitive career issues and improved employee motivation and performance. </p>
<p>The post <a href="https://infinum.com/blog/career-progression-framework/">The Framework for Making the Best Career Move</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-208"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-36-text js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	You can&#8217;t really know where you are going until you know where you stand.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	Last month, we presented our Progression Framework to the public, who<a href="https://www.linkedin.com/posts/infinum_progression-framework-activity-7028661586714062849-uGl6?utm_source=share&amp;utm_medium=member_desktop" target="_blank" rel="noreferrer noopener"> welcomed it</a>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-99">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-100'
	>
	Developing a clear and systematic framework for our employees&#8217; career progression was, first and foremost, a project of great internal importance. A progression framework became critical for managing employee engagement and performance after reaching a certain company size.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-102">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-103'
	>
	Our company now employs almost 400 people. Establishing the criteria for career advancement on a case-to-case basis is neither sustainable nor justified. It&#8217;s important to communicate what is expected in each role clearly. That way, goals become more easily attainable, and motivation to reach them increases.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-105">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-106'
	>
	You can explore our <a href="https://infinum.com/progression-framework/" target="_blank" rel="noreferrer noopener">Engineering, Design, Quality Assurance, and Management progression frameworks</a> here, or keep reading to learn more about our process of coming up with them.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-108">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-109'
	>
	Motivated by growth and challenged by questions</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-113"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-111">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-112'
	>
	As we grew as a company, we started getting more and more inquiries about career progression. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-115"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-24-text js-typography block-highlighted-text__typography'
	data-id='es-114'
	>
	People need a clear picture of where they are in their career journey, how they can move forward, and what opportunities are available. An established progression framework provides all that information transparently.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-118"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-116">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-117'
	>
	Then in spring 2021, a loose team of seven people with different roles and backgrounds started to get together to discuss how the company would benefit from standardizing expectations for moving forward with one&#8217;s career.&nbsp;</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-121"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-119">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-120'
	>
	Between sessions, we would research and study various publicly available frameworks, from Microsoft and Google to smaller companies. <a href="http://progression.fyi" target="_blank" rel="noreferrer noopener">Progression.fyi</a> proved a great resource here, and recommendations are in order for anyone interested in the topic.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-124"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-122">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-123'
	>
	Interestingly enough, we all independently came to similar conclusions. So slowly we started to develop our ideas about titles and levels further.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-127"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-125">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-126'
	>
	Everything at Infinum is custom-made</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-130"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-128">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-129'
	>
	I don&#8217;t mean to pretend we invented the wheel here. Progression frameworks are nothing new, and neither are the constituent parts that make them. However, you shouldn&#8217;t just settle for the first generic framework that comes up in your Google search. You want a custom one suited to your company&#8217;s and your people&#8217;s needs. Just like the custom digital products that we build.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-133"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-131">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-132'
	>
	So far, we&#8217;ve developed four high-level frameworks – <a href="https://infinum.com/progression-framework/engineering/" target="_blank" rel="noreferrer noopener">Engineering</a>, <a href="https://infinum.com/progression-framework/design/" target="_blank" rel="noreferrer noopener">Design</a>, <a href="https://infinum.com/progression-framework/quality-assurance/" target="_blank" rel="noreferrer noopener">QA</a>, and <a href="https://infinum.com/progression-framework/management/" target="_blank" rel="noreferrer noopener">Management</a>. They consider the specifics of each type of work, but they follow the same model. </p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-136"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-134">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-135'
	>
	Each title and level we’ve defined belongs to one of the three tracks:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-139"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--dot bullet__color--infinum block-bullet__bullet" data-id="es-137">
			<div class="bullet__dot"></div>
		<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-138'
	>
	Individual contributor</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-142"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--dot bullet__color--infinum block-bullet__bullet" data-id="es-140">
			<div class="bullet__dot"></div>
		<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-141'
	>
	Technical lead</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-145"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="bullet bullet--left bullet__type--dot bullet__color--infinum block-bullet__bullet" data-id="es-143">
			<div class="bullet__dot"></div>
		<div class="bullet__content">
		<p	class='typography typography--size-20-text-roman js-typography bullet__paragraph'
	data-id='es-144'
	>
	Management</p>	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-148"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-146">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-147'
	>
	Here, we ventured slightly away from the classical approach that includes individual contributors and management only. Instead, we felt that the tech-lead track works great with our structure and the fact that we&#8217;re a digital design and development agency, not a company that sells ready-made products.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-151"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-149">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-150'
	>
	The track is, in a way, an alternative route for a senior employee who may not want to go down (or up) the management road. It includes a lot of responsibility, organizational tasks, and mentoring but doesn&#8217;t include people management. So it&#8217;s not something that comes in between individual contributors and management, but a career path in its own right.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-154"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-152">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-153'
	>
	Developed in an Agile setup</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-157"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-155">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-156'
	>
	The original team comprised seven people representing management, HR, some engineering teams, and QA. We approached the problem from different angles and contributed with our knowledge and experience.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-159"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-24-text js-typography block-highlighted-text__typography'
	data-id='es-158'
	>
	The early phases of this large project had us working in an Agile setup, as much as it can be applied to a non-development project. There was a lot of back and forth, testing, learning things on the way, then stopping, regrouping, and starting again differently.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-162"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-160">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-161'
	>
	With the original idea coming into being in the spring of 2021, we were able to pilot the project to QA at the end of 2021. Things moved quickly from then on, and we had Engineering and Design covered by mid-2022.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-165"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-163">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-164'
	>
	We used a phased approach, which I recommend to anyone embarking on a similar adventure. Developing our framework in increments, we were able to adapt on the go, and I still believe just throwing this at the whole company would be reckless.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-168"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-166">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-167'
	>
	Dress for the job you want</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-171"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-169">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-170'
	>
	Note that Infinum&#8217;s progression framework does not represent the current job roles at our company. Working on this project, we decided to &#8220;dress for the job you want, not the job you have.&#8221; The idea was not to capture where we are currently but envision where we might be in a few years.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-174"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-172">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-173'
	>
	Some of the roles included in our framework are yet to be filled. We are growing every day, both as a company and as individuals. Maybe we don&#8217;t have a Lead Engineer level 2 in every one of our teams at the moment, but in a year or two, we might have several.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-177"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-175">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-176'
	>
	Community response and results</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-180"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-178">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-179'
	>
	Spoiler alert: both have been great. Who&#8217;d have thought people generally prefer knowing what is expected of them instead of guesswork and vague ideas?! Ha.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-183"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-181">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-182'
	>
	All jokes aside, it&#8217;s a well-known principle in psychology that a challenging yet attainable goal produces the best outcomes. Conversely, non-specific goals like &#8220;I will do my best&#8221; tend to motivate people far less.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-186"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-184">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-185'
	>
	For some people, the framework served as a sanity check and encouraged them to work harder. Seeing it all in black and white made them think “F%&amp;$, I’ve been here for two years, and I’m still level 1, I need to get it together.”</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-189"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-187">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-188'
	>
	Our framework also got excellent feedback outside the company. Before the page went live, we sent out individual sheets per request via LinkedIn. The response? Let&#8217;s just say that people jumped at the opportunity to see a hypothetical career path.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-192"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-190">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-191'
	>
	#neverstop progressing</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-195"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-193">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-194'
	>
	Because we believe in open source and giving back to the community is a part of our culture, our <a href="https://infinum.com/progression-framework/" target="_blank" rel="noreferrer noopener">progression frameworks</a> are now publicly available on our website. When we have more, we&#8217;ll publish more, and hopefully, many others working in the industry can benefit from them.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-197"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-highlighted-text">
	<p	class='typography typography--size-24-text js-typography block-highlighted-text__typography'
	data-id='es-196'
	>
	By putting this framework together and making it available for everyone to see, we increased transparency around somewhat sensitive issues. As a result, employees know where they stand and what competencies they need to move forward.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-200"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-198">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-199'
	>
	Developing our custom career progression framework was a journey, and like with every journey, you learn a lot about the destination and yourself. Putting this all into perspective made us think about the company we are and the company we want to become.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-203"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-201">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-202'
	>
	It&#8217;s great to see that our employees have responded so positively to it, and we hope it will help guide them in their career paths. We&#8217;re always learning and growing; the progression framework is no exception.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-206"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-204">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-205'
	>
	Check out the page every once in a while. It might not be the same as you left it.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/career-progression-framework/">The Framework for Making the Best Career Move</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
					<item>
				<image>
					<url>7974https://infinum.com/uploads/2018/09/developing-ios-apps-using-viper-3-years-later-0.webp</url>
				</image>
				<title>Developing iOS Apps Using VIPER: 3 Years Later</title>
				<link>https://infinum.com/blog/developing-ios-apps-using-viper-3-years-later/</link>
				<pubDate>Thu, 06 Sep 2018 17:00:00 +0000</pubDate>
				<dc:creator>Damjan Vujaklija</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/developing-ios-apps-using-viper-3-years-later/</guid>
				<description>
					<![CDATA[<p>Talking about the touchy subject of architecture in iOS development, and how we tackle this issue at Infinum.</p>
<p>The post <a href="https://infinum.com/blog/developing-ios-apps-using-viper-3-years-later/">Developing iOS Apps Using VIPER: 3 Years Later</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-277"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-209">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-212"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-210">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-211'
	>
	If you’re familiar with iOS development, there’s a big chance you know that architecture is a touchy subject. We won’t go over that particular problem here since there are a lot of good posts on the web that already cover that. Instead, we’ll talk about how we tackle this issue at Infinum.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-215"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-213">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-214'
	>
	How we got here</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-218"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-216">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-217'
	>
	Apple’s proposed MVC architecture wasn’t bad for many of our smaller apps, especially when we started with iOS development. However, as our projects grew more extensive and complex, it became harder to handle many cases cleanly and consistently. So, we started searching for something else and finally came across VIPER.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-221"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-219">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-220'
	>
	When we started diving into this new architecture, our iOS team counted ten people, so we were already a bit late to the party. Now that this number has doubled, I cannot imagine working in an agency environment without a well-defined project architecture. Of course, if you are a one-man band, that doesn’t mean you don’t need a suitable architecture for yourself and all future developers coming to the project. But the need for this is even more apparent in an agency environment.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-224"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-222">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-223'
	>
	VIPER is not a silver bullet by any means, nor is any other architecture. But when you have circa 40 projects being switched between 20 people where the assignments can be anything from a 15-minute bug-fix to a couple of months worth of development, you want to have a well-defined and standardized architecture that everyone understands and uses correctly. That allows anyone from a junior newcomer to a seasoned smart-ass to know the where, what, and why, making it easier to get the job done correctly and fast.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-227"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-225">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-226'
	>
	VIPER in a few words</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-230"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-228">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-229'
	>
	To give a concise introduction, the VIPER architecture is an implementation of <a href="https://8thlight.com/blog/uncle-bob/">Uncle Bob’s</a> <a href="https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html">clean architecture</a>. To put it into the context of iOS, what used to be a (possibly massive) <em>UIViewController</em> is now a module consisting of 5 elements:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-233"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-231">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-232'
	>
	<li><em>View</em> contains only view logic. It is the most reusable component.</li><li><em>Interactor</em> handles data fetching and abstracts the data store.</li><li><em>Presenter</em> connects the <em>View</em> and the <em>Interactor</em> and as such contains most business logic. It is the least reusable component.</li><li><em>Entity</em> refers to the actual models.</li><li><em>Router</em> (also commonly referred to as <em>Wireframe</em>) handles navigation logic, initializes and sets up the <em>Router/Presenter/View/Interactor</em> communication.</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-236"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-234">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-235'
	>
	Where we started</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-239"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-237">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-238'
	>
	There are a bunch of great posts on the web that talk about the VIPER architecture for iOS apps. Many don’t go into accurate detail about how to implement this architecture in real life.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-242"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-240">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-241'
	>
	When we started with VIPER, we tried a couple of different approaches on real-life projects. This allowed us to figure out what works and what doesn’t quickly. Here are some of the methods we tried that didn’t end up feasible:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-245"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-243">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-244'
	>
	<li>one master router that handles navigation throughout the whole app</li><li>interfaces for everything, everywhere, all the time</li><li>object references hierarchy based on object responsibilities</li><li>writing all classes and interfaces manually</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-248"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-246">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-247'
	>
	Where we wound up</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-251"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-249">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-250'
	>
	After a couple of months of trial and error, we got to some excellent solutions and approaches:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-254"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-252">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-253'
	>
	<li>one router per module (in practice, one module refers to one UIViewController)</li><li>use interfaces mainly between main components (View, Interactor, Presenter, Entity, Router) and other classes that require reusability and testability</li><li>object references hierarchy based on what works well with the native technology – our module lifecycle is covered with the UIViewController lifecycle since the View has a solid reference to the Presenter, which has a reliable reference for the rest of the elements in the module</li><li>using template code generators is maybe the most crucial point which allowed us to speed up development dramatically and also normalize the way we write these components – for instance, all our interfaces for a module are inside one Interfaces.swift file which allows you to quickly get a good grasp of the entire module’s behavior and responsibilities</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-257"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-255">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-256'
	>
	These are just a couple of broad points we iterated over. There were also other minor points like naming, folder structure, standardization of navigation, data passing, etc.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-260"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-258">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-259'
	>
	We finally distilled the actual architecture implementation into templates. We open-sourced <a href="//github.com/infinum/iOS-VIPER-Xcode-Templates">VIPER Xcode templates on Github</a> with an in-detail description of how they should be used and why.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-263"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-261">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-262'
	>
	The takeaway</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-266"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-264">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-265'
	>
	It is not easy to fully grasp the theory and practice behind VIPER. We think we found a way to utilize all of its merits because our implementation stays true to the theory behind it, but we also made the learning curve much less steep by using templates and well-defined rules.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-269"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-267">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-268'
	>
	The main issue with VIPER, and to some degree with other non-standard architectures, is that you sometimes have to work against the native API’s standard usage. There is no such thing as free abstraction, but we were willing to pay for ours since the pros outweighed the cons.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-272"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-270"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-271">
	<picture class="image__picture block-media__image-picture">
								
			<source
				srcset=https://infinum.com/uploads/2018/09/developing-ios-apps-using-viper-3-years-later-1-1400x840.webp				media='(max-width: 699px)'
				type=image/webp								height="840"
												width="1400"
				 />
												<img
					src="https://infinum.com/uploads/2018/09/developing-ios-apps-using-viper-3-years-later-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="846"
															width="1410"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-275"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-273">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-274'
	>
	After more than three years of using VIPER, we’re still trying out new things now and then to stay sharp, but we’ve adopted it as a company-wide standard for any project with more than a couple of screens or lasting more than a couple of sprints. We’re still on the VIPER bandwagon and very happy to ride along.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/developing-ios-apps-using-viper-3-years-later/">Developing iOS Apps Using VIPER: 3 Years Later</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
					<item>
				<image>
					<url>8111https://infinum.com/uploads/2015/06/10-things-that-make-creating-software-similar-to-producing-music-0.webp</url>
				</image>
				<title>10 Things That Make Creating Software Similar to Producing Music</title>
				<link>https://infinum.com/blog/10-things-that-make-creating-software-similar-to-producing-music/</link>
				<pubDate>Tue, 30 Jun 2015 11:59:00 +0000</pubDate>
				<dc:creator>Damjan Vujaklija</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/10-things-that-make-creating-software-similar-to-producing-music/</guid>
				<description>
					<![CDATA[<p>My day job is writing iOS apps. My hobby is writing, recording and producing electronic-rock music. Sometimes the two are more similar than one would think.</p>
<p>The post <a href="https://infinum.com/blog/10-things-that-make-creating-software-similar-to-producing-music/">10 Things That Make Creating Software Similar to Producing Music</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-378"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-278">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-281"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-279">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-280'
	>
	My day job is writing iOS apps. My main hobby is writing, recording and producing electronic-rock music. Sometimes these two seem more similar than one would think, and in this article I’ll try to explain how.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-284"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-282">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-283'
	>
	First some background information – I’ve been pursuing a career in programming for a while now, and the last couple of years I’ve focused on doing iOS development. But I’ve been a music buff and guitar player for a long time now.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-287"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-285"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-286">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2015/06/10-things-that-make-creating-software-similar-to-producing-music-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="460"
															width="700"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-290"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-288">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-289'
	>
	I also do electronic arrangements, production and some recording with my current band. I did all the pre-production for our two short albums, did some mixing and also played and recorded every instrument except the drums and piano.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-293"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-291">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-292'
	>
	The band is called <a href="https://plasticknivesmusic.com/">Plastic Knives</a>, and this is what it sounds like:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-296"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-294"
	 data-media-type='embed'>

	<div class="embed block-media__embed" data-id=es-295>
	<iframe
		class="embed__iframe block-media__embed-iframe"
		src="https://www.youtube.com/embed/g_WENnV5OpM"
		frameborder="0"
		aria-label="Embed iframe"
		allow="autoplay; accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture;"
		allowfullscreen>
	</iframe>
</div></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-299"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-297">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-298'
	>
	The idea for an article that compares programming and music came to me after talking to one of my colleagues. Now and then he likes to inquire about the progress of my musical side-project. After one of these chats, he told me,</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-304"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="blockquote block-blockquote__blockquote" data-id="es-300">
	
	<div class="blockquote__content">
		<i
	class="icon blockquote__icon icon--size-16 icon--scale-100"
	 aria-hidden='true' data-name='blockquote-24' data-id='es-301'>
	<svg fill='none' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path clip-rule='evenodd' d='m12 24c6.6274 0 12-5.3726 12-12 0-2.79685-.9568-5.37021-2.561-7.41062-.581.22951-1.0832.60583-1.5069 1.12898-.5132.60844-.7698 1.41969-.7698 2.43375v.07605h2.5789v5.59004h-5.6197v-5.01962c0-1.11547.154-2.06616.4619-2.85205.3336-.81125.757-1.48307 1.2702-2.01545.528-.52161 1.1175-.92155 1.7687-1.1998-2.0728-1.70651-4.7279-2.73128-7.6223-2.73128-6.62742 0-12 5.37258-12 12 0 6.6274 5.37258 12 12 12zm-3.53811-18.05347c-.30793.78589-.46189 1.73658-.46189 2.85205v5.01962h5.6197v-5.59004h-2.5789v-.07605c0-1.01406.2566-1.82531.7698-2.43375.5389-.63379 1.1804-1.05209 1.9245-1.2549v-2.28164c-.7441.07605-1.4626.25351-2.1555.53238-.6928.27887-1.3086.68449-1.84752 1.21688-.51321.53238-.9366 1.2042-1.27019 2.01545z' fill='currentColor' fill-rule='evenodd'/></svg></i><p	class='typography typography--size-36-text js-typography blockquote__quote'
	data-id='es-302'
	>
	“It seems to me that creating music has helped you become a better programmer. There are just so many similarities.”</p>
		<div class="blockquote__caption-wrap">
					</div>
	</div>
</div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-307"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-305">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-306'
	>
	So here are a few ways in which my programming relates to my music production and/or writing. If I get any programmer or musician to try and do the other, that would be more than awesome.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-310"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-308">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-309'
	>
	1. Big on software tools</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-313"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-311"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-312">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2015/06/10-things-that-make-creating-software-similar-to-producing-music-2.webp"
					class="image__img block-media__image-img"
					alt=""
										height="438"
															width="700"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-316"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-314">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-315'
	>
	If you’re not writing, let’s say, JavaScript, you’re going to need an <a href="https://en.wikipedia.org/wiki/Integrated_development_environment">Integrated Development Environment (IDE)</a>. Likewise, if you don’t have an analog tape machine and a massive mixer, you’re going to need a Digital Work Station (DAW). This is often a big and somewhat intimidating software for a novice user. You need to take your sweet time and learn how to use more complex commands. The thing is that it will pay off in the long run.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-319"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-317">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-318'
	>
	2. Read a book</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-322"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-320">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-321'
	>
	You can do a lot of stuff with some googling as you go along. This can get you so far, but, in the long run, you really need to invest more time and read a book or a more in-depth tutorial. Music writing/production and programming both have a constant learning curve, and as soon as you think you know everything, something new comes along that proves you need to learn more.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-325"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-323">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-324'
	>
	3. Learn from your peers</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-328"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-326">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-327'
	>
	Contrary to reading a book, talking to someone who has experience in the field takes next to no time. However, even a 10-minute conversation with a senior programmer or experienced musician can have a dramatic positive effect on your work. This generally applies to a lot of fields, but when it comes to technical work that has a lot of creativity to it, this becomes even more apparent.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-331"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-329">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-330'
	>
	4. Iterate and take your time</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-334"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-332">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-333'
	>
	If you want to have a good final product, you need to iterate. A lot. Rushing leads to bugs in songs and strange noises in user interfaces.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-337"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-335">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-336'
	>
	5. Organize yourself</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-340"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-338">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-339'
	>
	In your Digital Work Station (DAW) there’s a lot of sound tracks, effects and options turned on most of the time, just like there’s a bunch of classes, objects, processes, threads and resources which interact with one another in a computer program. If you don’t follow some basic organizational rules and patterns, you’ll end up with spaghetti and a headache.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-343"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-341">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-342'
	>
	6. Time estimation</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-346"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-344">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-345'
	>
	Obviously, you get better at this with time and experience, but sometimes this can be ridiculously flawed on both fronts. This happens mainly when you get new ideas during the execution process.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-349"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-347"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-348">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2015/06/10-things-that-make-creating-software-similar-to-producing-music-3.webp"
					class="image__img block-media__image-img"
					alt=""
										height="808"
															width="1273"
										loading="lazy"
					 />
					</picture>

			<figcaption class="image__figcaption block-media__image-figcaption">
			 Plastic Knives performing at INmusic 2015 festival. Photo by SoundGuardian		</figcaption>
	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-352"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-350">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-351'
	>
	7. Practice and persistence lead to perfection</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-355"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-353">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-354'
	>
	No one is proud of the first few programs they write, and no musician wants everybody and their mother to hear their first couple of songs. This is normal – practice and results come in time.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-358"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-356">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-357'
	>
	8. A little math goes a long way</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-361"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-359">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-360'
	>
	Sure you can do any of these things with a basic knowledge of math, but knowing a little more goes a long way. Whether we’re talking about algorithms or wave editing, understanding what’s really going on under the hood will give you the ability to implement your ideas more easily and expand the horizon of your creativity.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-364"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-362">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-363'
	>
	9. Coffee</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-367"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-365">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-366'
	>
	Most days I can’t do without a fresh pot, and I’ve found a lot of programmers work the same way. Also, contrary to popular belief, most rock musicians don’t go for the more expensive under-the-counter stuff.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-370"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-368">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-369'
	>
	10. Know when to stop</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-373"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-371">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-372'
	>
	When staring at a chunk of problematic code, or listening to a troublesome song section, it’s good to know when to stop. Often a solid break or, even better, a good night’s sleep can help you spot and iron out the issue.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-376"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-374">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-375'
	>
	It’s no secret that having something that occupies you beside work is a great way to clear your head, whether it’s similar to your work or something totally different. I enjoy doing both music and programming. I hope you share a similar passion for your work and have a cool hobby that helps you in the same way creating music helps me.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/10-things-that-make-creating-software-similar-to-producing-music/">10 Things That Make Creating Software Similar to Producing Music</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>