<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: John Patrick Tobias</title>
    <description>The latest articles on DEV Community by John Patrick Tobias (@tobska).</description>
    <link>https://dev.to/tobska</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F167263%2Fb86b4683-7de7-4e70-b57c-2ae60ed5c25a.jpeg</url>
      <title>DEV Community: John Patrick Tobias</title>
      <link>https://dev.to/tobska</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tobska"/>
    <language>en</language>
    <item>
      <title>3 lessons from 3 years on joining startups as a Software Engineer</title>
      <dc:creator>John Patrick Tobias</dc:creator>
      <pubDate>Tue, 18 Aug 2020 14:54:31 +0000</pubDate>
      <link>https://dev.to/tobska/3-lessons-from-3-years-on-joining-startups-as-a-software-engineer-29k1</link>
      <guid>https://dev.to/tobska/3-lessons-from-3-years-on-joining-startups-as-a-software-engineer-29k1</guid>
      <description>cover picture from Unsplash by Max Fuchs - https://unsplash.com/@designfuchs

&lt;p&gt;Before my graduation in the university, I was inclined to join a startup due to the amount of content online against the existing corporate ladder and by reading &lt;strong&gt;Zero to One&lt;/strong&gt; &lt;em&gt;by Peter Thiel&lt;/em&gt;. Luckily for me, I had connections that were starting up a company from the ground up. As a fired up teen that was into startups, I didn't think twice, I joined them. &lt;/p&gt;

&lt;p&gt;Jumping to three years after my first startup, I'm currently in my third startup, and here are the &lt;strong&gt;lessons or reflections I've gathered&lt;/strong&gt;:&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Be open to your startup about your opinions and complaints.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Being against openness and honesty to any company's management here in the Philippines is seen as a safe area to not get a bad reputation from upper management due to your ideas being bad or your complaints being negative. Thus keeping silent about your own ideas and complaints is seen as a good thing, but from what I experienced it isn't a good thing.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Your opinions could contribute to the next big solution/change that the company needed, thus improving the startup.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In my current startup, we always voice out our thoughts about the features we're developing. Some of the ideas we come up may be bad, but &lt;strong&gt;the act of brainstorming to come up with a robust solution makes the team feel confident&lt;/strong&gt; in implementing that solution (and excited in bringing out a new feature).&lt;/p&gt;

&lt;p&gt;This results to several features changing from time to time and &lt;strong&gt;having positive impact towards the usability of the user interface and the flexibility of the code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This isn't only limited to the project we're developing, &lt;strong&gt;we also discuss the culture of the company in this manner&lt;/strong&gt; as well, resulting into an enjoyable work environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Not voicing out your complaints makes unclear decisions.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;My first startup didn't last longer than I expected. Having a &lt;strong&gt;dedicated group chat about our complaints as software engineers in the company made us hide our hatred and complaints&lt;/strong&gt; towards the business-side. In the end, all of us software engineers decided to resign, resulting in dissolving the startup.&lt;/p&gt;

&lt;p&gt;The problem here is not us leaving, but about us &lt;strong&gt;not voicing out our opinions&lt;/strong&gt; about the current state of the company &lt;em&gt;(before we decided to leave)&lt;/em&gt;. We, as a whole startup, could've discussed about the problem and created a solution, with our without us leaving. Instead, we decided to leave without discussing our concerns thus creating unclear decisions.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Try testing out new technologies from time to time.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;In my experience, doing something all the time in the safe zone of your domain of knowledge seems comfortable, and gets the job done but, &lt;strong&gt;it lacks growth&lt;/strong&gt;. I've experienced projects that use the same frameworks and libraries on and on and it gets boring to a point. As startups, &lt;strong&gt;we should learn to experiment on tools&lt;/strong&gt; that could make our workflow easy (and sometimes cheaper).&lt;/p&gt;

&lt;p&gt;Having a small team has its challenges when it comes to doing quality assurance (QA) or maintaining the infrastructure of your cloud. That's why in our startup, &lt;strong&gt;we decided to use technologies that could ease that part&lt;/strong&gt;. Of course, it takes time to setup but it's rewarding in the long run to have these tools ready-to-use all the time. I'll name a few and explain it briefly. I won't go in-depth to keep this blog short.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ev8Gf0k4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/9eJFCy7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ev8Gf0k4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/9eJFCy7.jpg" alt="Terraform Logo"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.terraform.io/"&gt;&lt;strong&gt;Terraform&lt;/strong&gt;&lt;/a&gt; - a cloud infrastructure manager that uses a JSON-like syntax for you to easily manage the cloud without having to create services in the web console. This can be useful if you have multiple projects with the same infrastructure most of the time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E32SfEHM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/xX4iEqH.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E32SfEHM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/xX4iEqH.png" alt="Serverless Logo"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.serverless.com/"&gt;&lt;strong&gt;Serverless&lt;/strong&gt;&lt;/a&gt; - almost the same as Terraform but more focused towards maintaining serverless functions like AWS Lambda functions. Deploying serverless functions can help you save cost on compute time if you have functions that can be separated from the main server and isn't ran most of the time (e.g. a downloader of a PDF or CSV report). This is one of my favorite technologies to explore, so I suggest you look into this!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_yWjFuL9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/bopubaF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_yWjFuL9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/bopubaF.png" alt="Gitlab Logo"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://about.gitlab.com/"&gt;&lt;strong&gt;Gitlab&lt;/strong&gt;&lt;/a&gt; - used mostly for its reliable CI/CD (continuous integration / continuous deployment). This is a powerful tool combined with Terraform &amp;amp; Serverless as it can automatically spin up and tear down services using Terraform and Serverless' CLI commands. It's also best paired with Docker. Learn it if you want to get into deploying projects automatically every push to a branch.&lt;/p&gt;

&lt;p&gt;There are more technologies that I have tinkered with but these are the &lt;strong&gt;honorable mentions&lt;/strong&gt; I can think of. These are the commonly used tools in our daily grind. So if you're looking to easing the workflow with deployment and cloud infrastructure, I suggest you look into these technologies.&lt;/p&gt;

&lt;p&gt;Of course, these solutions won't solve problems forever if the scale of the software begins to grow bigger (meaning more work for QA automation and cloud infrastructure scripts). &lt;strong&gt;It only serves a purpose in deploying reliable products in a fast way for fast results&lt;/strong&gt;. Eventually startups would need to scale their manpower depending on the amount of work that's starting to grow due to the product's scale.&lt;/p&gt;

&lt;p&gt;As mentioned before, exploring new technologies are good for your growth but its impossible to learn everything that exists in the world of code. &lt;strong&gt;That's the beauty of the coding world, endless learning!&lt;/strong&gt; Just test and try tools and possibly you'll come up with what suits your workflow best. In a nutshell, it's &lt;strong&gt;being open to discard old knowledge and learn something new&lt;/strong&gt; since in the world of code, some of the tools you learn won't last long to see the world end and will be replaced with something new and shiny &lt;em&gt;(R.I.P. Adobe Flash)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Since we're speaking about growth, this is a nice segue into the next and last lesson.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Don't forget about yourself!&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Being in the startup scene, there may be times that you are needed to squeeze every hour in a day. That sucks for some people but if it makes you feel good, then that's fine (whatever floats your boat). Just be mindful not to exhaust yourself too much or you might sacrifice your well-being due to burnout or any other illness that could come up from being overworked.&lt;/p&gt;

&lt;p&gt;Pushing beyond your limit is also good from time to time, but be wary of what your limit is. Sometimes due to motivation, &lt;strong&gt;we tend to put unrealistic goals for ourselves that is really far beyond our limit that we can't even reach&lt;/strong&gt;. This makes it easy for demotivation to creep in and say that "you won't make it!". From what I've experienced, it's good to also &lt;strong&gt;think of the process behind&lt;/strong&gt; of achieving a goal. Starting there, assess what you currently have in your arsenal that could kickstart you in doing that process. In that way, you could see what you can currently reach in your limit and slowly climb the process from where you stand.&lt;/p&gt;

&lt;p&gt;Always be open that processes tend to change midway of executing it. From the book &lt;strong&gt;Flow&lt;/strong&gt; &lt;em&gt;by Mihaly Csikszentmihalyi&lt;/em&gt;, he explained that moving towards a goal doesn't always go as planned, and I've experienced that in numerous occasions (most of the time in code). Sometimes we meet circumstances along the way that make us adjust in order to move forward. In the end of that changing path, there's a possibility that the end result could look better than you expected.&lt;/p&gt;

&lt;p&gt;What is with this self-help mumbo jumbo you ask? Well, &lt;strong&gt;without those lessons, I would've been more burnt out&lt;/strong&gt; as ever due to the amount of demotivation I had in my &lt;em&gt;kokote&lt;/em&gt; (which as a word for brain or mind in Tagalog). There were multiple occasions that I set unrealistic goals for myself and end up discarding it because all I thought of was the goal, not the process. Also, there were times that I get upset if things don't go as planned, instead of adapting to what happened. If you've encountered these problems, try giving those lessons a go!&lt;/p&gt;

&lt;p&gt;Learning to set realistic and attainable goals, and even learning to celebrate small goals, can make you more motivated to move forward and also leading to making you a happier as a person.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't go drowning in a sea of unfulfilled dreams and forget yourself&lt;/strong&gt;. Start decluttering your mind and focus on what you can do in the present. It's easier said than done and eventually you'll encounter these moments in life from time to time, but it's part of the process.&lt;/p&gt;

&lt;p&gt;Take care of yourself! It's not bad to take time off for eating food or sleeping on time (and even play games, just not too much). Sometimes for better quality work, we need to take time off from work (as juxtaposed as that sounds).&lt;/p&gt;

</description>
      <category>startup</category>
      <category>lessons</category>
      <category>personal</category>
      <category>reflection</category>
    </item>
    <item>
      <title>Developing &amp; Designing a Music Composition App Tailored for Composers</title>
      <dc:creator>John Patrick Tobias</dc:creator>
      <pubDate>Thu, 03 Oct 2019 04:10:10 +0000</pubDate>
      <link>https://dev.to/tobska/developing-designing-a-music-composition-app-tailored-for-composers-1b6b</link>
      <guid>https://dev.to/tobska/developing-designing-a-music-composition-app-tailored-for-composers-1b6b</guid>
      <description>&lt;p&gt;Back when our college life was coming to a close, all of us were tasked to create a thesis or a research. As to what our professor said, &lt;em&gt;"It must contribute or add something new to the current knowledge that the world has"&lt;/em&gt;. &lt;strong&gt;That really got me thinking.&lt;/strong&gt; I started thinking of possible automated technologies that can be done with artificial intelligence that would make people say &lt;em&gt;"wow"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;So together with my team and our thesis adviser, we brainstormed on possible topics that we can explore for our thesis. Somehow due to our previous research on building an air guitar using Myo Armbands, we shifted our focus on creating or composing music. So our problem at that time was...&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;em&gt;"How can we contribute something new to composers that would benefit them and at the same time, adding something new to the knowledge base of Computer Science?"&lt;/em&gt;.
&lt;/h3&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Ideation Phase&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It took us about an hour or two to come up with an idea that is possible with today's technology. &lt;strong&gt;That idea was creating melodies with gesture-based controls&lt;/strong&gt;. It was like the swiping gesture found in smartphones' keyboards, but instead of producing words, it would produce notes. When the gesture slides upwards, it would produce a melody upwards, same thing for downwards. We even thought of varying gestures like drawing a zigzag or twirling pattern would produce different types of melodies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CR2Z65Ex--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/QmSJBW2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CR2Z65Ex--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/QmSJBW2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Definitely it would look cool while composing music &lt;em&gt;(which was our second priority, just kidding!)&lt;/em&gt;, but we came to a theory that &lt;strong&gt;it may be able to benefit composers who get stuck when they reach creative block&lt;/strong&gt;. Thus making it a solution for them to explore what the computer can generate for them and tweak or edit it to their liking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vVjOkIRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/LIM9E9Y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vVjOkIRy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/LIM9E9Y.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After landing on that idea, we started reading journals and papers that could help giving a computer the ability to create music. We read about various genetic algorithms that generate music through a lot of iterations, and also Markov Chains. &lt;/p&gt;

&lt;p&gt;After some time, one of us became &lt;strong&gt;worried that it might cause composers to revolt against our idea due to the fact that we're somehow automating their craft&lt;/strong&gt; through our software. That worry led us to interview a professional composer. Lucky for us, my brother graduated as a music major in a near university so he knew some professors that are really good composers. So he gave us a few composers that we could contact and one of them was Sir Juan Carlo Magsalin (we call him Sir JC). We contacted and scheduled an interview with him. Soon enough, we were happy that he accepted to meet with us.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nc835knV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/V2tDsa3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nc835knV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/V2tDsa3.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We asked him various questions that would help prove if our idea was helpful. The interview turned out great and to our surprise, our future isn't a bad idea as we thought. As long as we &lt;strong&gt;keep in mind that it should aid the composer instead of replacing him or her&lt;/strong&gt;. After we came back to our research lab, we were then tasked by our thesis adviser to formulate a research framework.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YG-8UkS9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/yiAKNKQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YG-8UkS9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/yiAKNKQ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Creating and Testing the Mid-Fidelity Prototype&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Inline with our research framework, we started drawing our sample user interfaces on paper. &lt;strong&gt;This is a good strategy in the early process of prototyping or designing since everything done on paper is easily changeable if there are needed changes&lt;/strong&gt;. We proceeded to present to each other our drawings and ideas. As we went on with the meeting, we supported each other's ideas and suggested changes to some ideas presented. After that, we formed our mid-fidelity prototype using Gravit and InVision based off the drawings and ideas we fixed and formulated. We made the designs to fit an iPad Mini to be used for our testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VRV4ZP8n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/tcFfait.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VRV4ZP8n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/tcFfait.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating the prototype, we wanted to test it to a number of composers. This is the part where we would stay calm when testers say that &lt;em&gt;"the design is bad"&lt;/em&gt; because normally in the first few phases, that would occur most of the time. Instead of being angry or panicking, &lt;strong&gt;we ask them why&lt;/strong&gt;. In that way we could get insightful comments from them that can help us improve the design. If there were no comments, usually we try to solve the problem by easing the interaction that the users had a hard time in using.&lt;/p&gt;

&lt;p&gt;With several data in our hands, we proceeded to improve our prototype based on those data. We tested it again with Sir JC and other composers. The data we got from there were improved compared to before but some interactions were still hard to do.&lt;/p&gt;

&lt;p&gt;On top of that, Sir JC caught some errors in our prototype which conflicts with the rules of music theory. He suggested a few books that we could read and borrow from their library for us to educate ourselves with music theory. I was the one who got tasked to get familiar with music writing (&lt;em&gt;and I also appreciated it since I wanted to learn how to read music sheets!&lt;/em&gt;). Educating myself with music theory wasn't an easy task. It was a new field for me to discover, but I tried my best to understand it. &lt;strong&gt;This was an important step because it really helped a lot when we were developing the app in the iPad since there are plenty of rules and math to keep in mind.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Moving to High-Fidelity Prototypes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Soon enough we moved to coding the application in the iPad ecosystem using Swift 4.0 (&lt;em&gt;For you questioning why not 5.0? Because Swift 5.0 wasn't available at that time yet. You hater.&lt;/em&gt;). This was also our first time learning and using Swift, but we didn't let that discourage us to develop this app. &lt;strong&gt;We gladly learned Swift and all its benefits compared to other programming languages&lt;/strong&gt; (&lt;em&gt;can't forget about Swift's null safety and awesome variable observer methods&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AZgv-ApO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://proxy.duckduckgo.com/iu/%3Fu%3Dhttps%253A%252F%252Fdeveloper.apple.com%252Fswift%252Fimages%252Fswift-og.png%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AZgv-ApO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://proxy.duckduckgo.com/iu/%3Fu%3Dhttps%253A%252F%252Fdeveloper.apple.com%252Fswift%252Fimages%252Fswift-og.png%26f%3D1%26nofb%3D1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After learning basic music notation, we tried to put it into code and create a good basic prototype that involved adding, selecting, deleting, and editing notes. We also created a procedure or a set of tasks for composers to follow during testing and a post-testing questionnaire for them to answer. The testing procedure contained steps like &lt;em&gt;"Add a note"&lt;/em&gt;, &lt;em&gt;"Delete a note"&lt;/em&gt;, &lt;em&gt;"Recreate Little Little Star"&lt;/em&gt;, and more. The questionnaire was there to measure the difficulty per task or feature. Each task had a Likert scale which would let the composer rate the feature with four (4) being easy to one (1) being difficult. &lt;strong&gt;We did this so that we can review the scores which would eventually lead us to revamp the feature.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Throughout our research we did a total of four phases or iterations to improve the application. &lt;strong&gt;So here starts our journey to studying users or composers&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;em&gt;"But wait! Where's the swiping gesture that would generate a melody?"&lt;/em&gt;
&lt;/h4&gt;

&lt;p&gt;Oh right! Midway in developing the app we decided to focus more on the user experience aspect of the application. Since there are no music composition apps that we can edit or code a plugin on, &lt;strong&gt;we decided to create a music composition app that has good usability first before tackling the melody suggestion feature&lt;/strong&gt;. The generating of music would be future work (&lt;em&gt;hopefully!&lt;/em&gt;). But don't close this article yet! The user research journey that I'm about to tell was still fun. Let's proceed with the article.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Testing our High-Fidelity Prototypes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UuA2KZBN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/RRb1HNZ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UuA2KZBN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/RRb1HNZ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We did a total of four (4) testing phases for our app which consists of varying participants per phase. &lt;strong&gt;Throughout each phase, we try to implement new features and fix design issues based on previous iterations.&lt;/strong&gt; We also let our testers compose using traditional pen and paper, and use existing iPad apps that are currently in the app store (specifically Notion and komp) so that we can also learn from the traditional way and the existing apps, and benchmark our app if it's better or worse than those methods.&lt;/p&gt;

&lt;p&gt;I'll be going through each iteration briefly. So, here it goes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;First Iteration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--INGke_wG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/KLXMpmZ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--INGke_wG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/KLXMpmZ.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the first iteration, just like the mid-fidelity prototype, we implemented a movable cursor (for pointing the selected location in the music sheet), and adding, editing, deleting, and highlighting of music notes. We let various music composers test our prototype.&lt;/p&gt;

&lt;p&gt;Here are the ratings from the post-testing assessment:&lt;/p&gt;

&lt;p&gt;List of features with &lt;strong&gt;high average scores&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Moving the indicator/cursor (3.6)&lt;/li&gt;
&lt;li&gt;Moving the line/space selector (3.3)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;List of features with &lt;strong&gt;low average scores&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Highlighting/Selecting Notes (2.5)&lt;/li&gt;
&lt;li&gt;Delete a Note (2.3)&lt;/li&gt;
&lt;li&gt;Edit a Note (2.2)&lt;/li&gt;
&lt;li&gt;Add Note/s (2.8)&lt;/li&gt;
&lt;li&gt;Editing a group of notes (2.2)&lt;/li&gt;
&lt;li&gt;Deleting a group of notes (2.2)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Average Score: 2.6
&lt;/h3&gt;

&lt;p&gt;Yep, we messed it up on our first prototype. But this was due to two (2) main reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The highlighting feature was assigned to a two-finger drag along the music sheet. This made it hard for the composers to execute since they were trying a one-finger drag instead of a two-finger drag.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PgeokAsz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/2tXxXai.png"&gt;
&lt;/li&gt;
&lt;li&gt;The buttons were too small which hindered some composers in tapping them. This is due to us always testing it on the iPad simulator provided in Xcode. It didn't simulate a real iPad interaction since we used a mouse cursor to tap/click on the buttons.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Improvements from the First Iteration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Due to the highlighting feature hindering majority of the usability. We changed the two-finger drag to a one-finger drag.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sfRAIgHc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/okxJDL2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sfRAIgHc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/okxJDL2.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We also made the buttons bigger for a human finger to tap/touch. &lt;strong&gt;This made me realize that testing usability for mobile devices must really be tested on a mobile device&lt;/strong&gt;, not from a simulator or any form of emulating the screen size in a desktop.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Second Iteration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9T2UW2Fx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/RBwrKaL.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9T2UW2Fx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/RBwrKaL.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the second iteration, we added more features into our app. These features are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Changing Time/Key Signature&lt;/li&gt;
&lt;li&gt;Adding/Removing an accidental to a note or a group of notes&lt;/li&gt;
&lt;li&gt;Zooming In/Out&lt;/li&gt;
&lt;li&gt;Cut/Copy/Paste a note or a group of notes&lt;/li&gt;
&lt;li&gt;Selecting a single note via hovering (not just higlighting)&lt;/li&gt;
&lt;li&gt;Music Playback&lt;/li&gt;
&lt;li&gt;Redesign of the delete button&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The said features were also included in the testing of our application to composers. Here are the results:&lt;/p&gt;

&lt;p&gt;List of features with &lt;strong&gt;high average scores&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a Note (3.5)&lt;/li&gt;
&lt;li&gt;Delete a Note (3.2)&lt;/li&gt;
&lt;li&gt;Edit a Note (3.6)&lt;/li&gt;
&lt;li&gt;Moving the indicator/cursor (3.6)&lt;/li&gt;
&lt;li&gt;Moving the line/space selector (3.4)&lt;/li&gt;
&lt;li&gt;Highlighting/Selecting Notes (3.8)&lt;/li&gt;
&lt;li&gt;Editing a group of notes (3.6)&lt;/li&gt;
&lt;li&gt;Deleting a group of notes (4.0)&lt;/li&gt;
&lt;li&gt;Scrolling thru the music sheet (3.5)&lt;/li&gt;
&lt;li&gt;Change Time Signature (3.2)&lt;/li&gt;
&lt;li&gt;Change Key Signature (3.5)&lt;/li&gt;
&lt;li&gt;Add an Accidental to a Note (3.8)&lt;/li&gt;
&lt;li&gt;Zooming In/Out (3.5)&lt;/li&gt;
&lt;li&gt;Cut/Copy/Paste a Single Note (3.0)&lt;/li&gt;
&lt;li&gt;Select a single note (3.7)&lt;/li&gt;
&lt;li&gt;Add an Accidental to a group of notes (3.3)&lt;/li&gt;
&lt;li&gt;Music Playback (4.0)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;List of features with &lt;strong&gt;low average scores&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove an Accidental to a Note (2.6)&lt;/li&gt;
&lt;li&gt;Cut/Copy/Paste a a group of notes (2.7)&lt;/li&gt;
&lt;li&gt;Remove an Accidental to a group of notes (2.7)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Average Score: 3.4
&lt;/h3&gt;

&lt;p&gt;Several features improved and the new features also had high scores that we didn't expect. However, don't let the high scores fool you. There were comments from the users that made us redesign some of the features that had high scores. &lt;/p&gt;

&lt;p&gt;Some features can be improved better based on the comments we received. Those comments are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The slider in changing the time signature made it hard to select a specific number.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VMDsAHDI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/J0Od1lT.png"&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The slide selection for the key signature was not clear in showing all the possible options.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--twiU--cx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/UsRQOMV.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--twiU--cx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/UsRQOMV.png"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Transposing note/s weren't evident or obvious enough for users to do. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The comments from the features that had a low score was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Cut/Copy/Paste lacked feedback or a notification when they tap the buttons for those features. The buttons for those features were also small.&lt;/li&gt;
&lt;li&gt;Removing an accidental of a note or a group of notes was not intuitive for composers that have knowledge in music theory. The buttons for the accidentals were also small, but the main reason why they scored it low was because the interaction didn't follow music theory. According to them, removing an accidental should be done by &lt;em&gt;"naturalizing"&lt;/em&gt;. &lt;strong&gt;With that in mind, composers kept tapping the naturalize accidental button when they were trying to remove a sharp or flat from a note or a group of notes.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Improvements from the Second Iteration&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;With the time/key signature controls being hard to use led us to implement a complete overhaul of it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4akySmhC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/QZFT4U6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4akySmhC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/QZFT4U6.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We moved the transpose controls from the visible arrow keys, to a new control panel that shows when the user selects a note.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dA5RBzRi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/O0NEHju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dA5RBzRi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/O0NEHju.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Third Iteration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t-PNsXVW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/Hq3hWrA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t-PNsXVW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/Hq3hWrA.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the third iteration, we implemented new features that would let composers further customize their compositions. These features are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Putting &lt;em&gt;ottava&lt;/em&gt; (8 va) &amp;amp; &lt;em&gt;quindicesima&lt;/em&gt; (15 va) symbols for possible higher or lower pitches than before.&lt;/li&gt;
&lt;li&gt;Putting 1 to 3 dots for dotted notes.&lt;/li&gt;
&lt;li&gt;The ability to create chords.&lt;/li&gt;
&lt;li&gt;A keyboard style input for people that are used to using MIDI keyboards as their input controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also narrowed down the type of scores that we had so that we can focus more on the base actions of the application (instead of per feature). These are the scores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select/Highlighting of Notes (3.7)&lt;/li&gt;
&lt;li&gt;Add Notes/Chords (3.7)&lt;/li&gt;
&lt;li&gt;Edit Notes/Chords (3.3)&lt;/li&gt;
&lt;li&gt;Delete Notes/Chords (3.7)&lt;/li&gt;
&lt;li&gt;Cut, copy, &amp;amp; paste Notes/Chords (3.3)&lt;/li&gt;
&lt;li&gt;Undo/Redo an action (3.8)&lt;/li&gt;
&lt;li&gt;Music Playback (3.1)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Average Score: 3.5
&lt;/h3&gt;

&lt;p&gt;Several improvements from the second iteration really helped in improving the scores even more. But there are still a few problems we noticed when we were watching the composers use our application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Composers were having a hard time switching their fingers to the top and bottom menus.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FI6HbfLu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/oqLjiMq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FI6HbfLu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/oqLjiMq.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The toggling of the keyboard input was not evident.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They also suggested that a guiding line should show when playback is happening. This would let them know which note is currently being played.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Improvements from the Third Iteration&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;We joined the top and bottom menus to make it more friendly for the composers' fingers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--exnZMfBY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/SRiTlsx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--exnZMfBY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/SRiTlsx.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Music Playback now shows a line to show which note is currently playing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ila0A4fn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/HwgnwRH.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ila0A4fn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/HwgnwRH.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Fourth Iteration&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WBrDQyv_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/ZZjbSl1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WBrDQyv_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/ZZjbSl1.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For the fourth iteration, our testers were majority professionals (composers that compose for famous artists, a professor that lead a chorale, and students from the conservatory of music). Because of that, the score became lower than the previous iteration. They told us that our app still lacked more features and modifiers for them to further customize their composition. However, they were happy with the interaction with our app especially because of the cursor/line. They even told us that it's beginner friendly because its straightforward enough.&lt;/p&gt;

&lt;p&gt;The Scores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select/Highlighting of Notes (3.4)&lt;/li&gt;
&lt;li&gt;Add Notes/Chords (3.2)&lt;/li&gt;
&lt;li&gt;Edit Notes/Chords (3.0)&lt;/li&gt;
&lt;li&gt;Delete Notes/Chords (3.4)&lt;/li&gt;
&lt;li&gt;Cut, copy, &amp;amp; paste Notes/Chords (2.9)&lt;/li&gt;
&lt;li&gt;Undo/Redo an action (3.6)&lt;/li&gt;
&lt;li&gt;Music Playback (2.9)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One composer even had a hard time performing the highlight feature, which also led him to not perform the cut, copy, and paste feature. That composer told us that he was not used to using mobile apps so its possible that that is the reason he is not accustomed using mobile applications.&lt;/p&gt;

&lt;p&gt;Another composer also rated the music playback low because a bug occurred while that feature is being used. The tempo became slower and slower every time the composition is being repeatedly played. This made the composer disappointed because that composer is an avid user of playback to check the composition if its according to what he or she wants. This was entirely our fault because in our code, we forgot to dispose the previous instance of the playback when the playback stopped. That caused multiple instantiations to exist that began to slow down the app due to memory leaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Words&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Unfortunately we stopped at the fourth iteration, this isn't because we became demotivated, but our time in the university has come to a close. A lot of testers really wanted to get our app after they tested it and I feel sorry, up until to this day, for those people because we won't be publishing this app anytime sooner (&lt;em&gt;very sorry&lt;/em&gt;). This is due to the fact that it's still unfinished work. Maybe in the future, new researchers in our research lab might continue this UX adventure that we started.&lt;/p&gt;

&lt;p&gt;I enjoyed this experience because I got to learn a part of music theory and also attempt to develop and design a user-centered tool that they can use to produce their craft with ease. With that said, &lt;strong&gt;this research taught me to put myself in the shoes of the user in order to design an interaction suited for them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;P.S. Thank you to Sir Jordan Deja for being a good mentor in user experience research and to all composers that tested our app (you all helped us graduate college).&lt;/p&gt;

</description>
      <category>ux</category>
      <category>research</category>
      <category>swift</category>
    </item>
    <item>
      <title>My Experience in Creating a Website with a Non-Traditional Layout</title>
      <dc:creator>John Patrick Tobias</dc:creator>
      <pubDate>Mon, 17 Jun 2019 10:35:40 +0000</pubDate>
      <link>https://dev.to/tobska/my-experience-in-creating-a-website-with-a-non-traditional-layout-111o</link>
      <guid>https://dev.to/tobska/my-experience-in-creating-a-website-with-a-non-traditional-layout-111o</guid>
      <description>&lt;p&gt;We've been accustomed to websites having navigation bars at the top, the content in the middle, and footers at the bottom that contain links. This became the traditional and convenient way when designing websites in general. It provides the user the info he/she needs to find in a user friendly manner since we've been accustomed to scrolling from top to bottom when viewing a webpage. However, I was assigned to create a website that didn't follow that. &lt;strong&gt;A website that involves scrolling from left-to-right and top-to-bottom as screen transitions from the homepage&lt;/strong&gt; was presented to me with the use of Adobe XD. &lt;em&gt;That is what I had to do.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FRWkYtGj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FRWkYtGj.gif" alt="College Me"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Personal Skill Assessment Before Starting The Project&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;During web projects in my university, I stayed away from using CSS for creating layouts because of my extensive use of Bootstrap. So I was &lt;strong&gt;totally useless when it comes to using CSS for designing a page&lt;/strong&gt; without Bootstrap. So I didn't know how to use flex &lt;em&gt;(which turned out to be handy as hell)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FGnu7e3m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FGnu7e3m.png" alt="College Me"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had a feeling in my gut that I should use ReactJS for this project simply because the current screen being viewed could be stored in a state which I could just change with a simple &lt;em&gt;this.setState();&lt;/em&gt;. Nevertheless, &lt;strong&gt;I had barely scratched the surface when it comes to using React&lt;/strong&gt; since I tried some things out in React Native before so I know a thing or two about handling states. &lt;em&gt;(P.S. It's been a while since I used JavaScript since I'm more used to REST frameworks that don't involve any JS code, so I also don't have a clue what ES6 had in store)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Knowing that ReactJS had a ginormous amount of packages that can be simply Googled and be quickly installed with a simple &lt;em&gt;npm install insert-package-name-here&lt;/em&gt; thru the terminal, it really supported my gut feeling that ReactJS was the right library to use for this project &lt;em&gt;(because that would make me progress in this project faster)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I decided to revisit Google's Firebase for storing data since I've used it before&lt;/strong&gt; in a mobile application project that involved reading and writing Google Maps coordinates inside Firebase for our class in the university.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FmA5fWe0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FmA5fWe0.png" alt="Final Decision"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically that was my inner dialogue before I started the project. Since I was doing it by myself, I just had to assess myself about my strengths and weaknesses with relation to the project that I was about to do. :)&lt;/p&gt;

&lt;p&gt;So in short, these are the tools that I decided to use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ReactJS &lt;em&gt;(JSX, CSS, JavaScript ES6)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Firebase &lt;em&gt;(for the database and file storage)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Making The Design Come To Life&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;The first step I chose to do was the skeleton of the screen transitions. This is by starting to create the behavior of containers entering and exiting out of the view. Luckily, I came across the package &lt;strong&gt;React Transition Group&lt;/strong&gt;.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/reactjs" rel="noopener noreferrer"&gt;
        reactjs
      &lt;/a&gt; / &lt;a href="https://github.com/reactjs/react-transition-group" rel="noopener noreferrer"&gt;
        react-transition-group
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      An easy way to perform animations when a React component enters or leaves the DOM
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;react-transition-group &lt;a href="https://www.npmjs.org/package/react-transition-group" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/322c14b520478a9b1cc1f2d1377a009bbc844014e8e8d5cd4b824073aba73dc2/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f72656163742d7472616e736974696f6e2d67726f75702e737667" alt="npm"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ATTENTION!&lt;/strong&gt; To address many issues that have come up over the years, the API in v2 and above is not backwards compatible with the original &lt;a href="https://github.com/reactjs/react-transition-group/tree/v1-stable" rel="noopener noreferrer"&gt;&lt;code&gt;React addon (v1-stable)&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For a drop-in replacement for &lt;code&gt;react-addons-transition-group&lt;/code&gt; and &lt;code&gt;react-addons-css-transition-group&lt;/code&gt;, use the v1 release. Documentation and code for that release are available on the &lt;a href="https://github.com/reactjs/react-transition-group/tree/v1-stable" rel="noopener noreferrer"&gt;&lt;code&gt;v1-stable&lt;/code&gt;&lt;/a&gt; branch.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We are no longer updating the v1 codebase, please upgrade to the latest version when possible&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;A set of components for managing component states (including mounting and unmounting) over time, specifically designed with animation in mind.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Documentation&lt;/h2&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://reactcommunity.org/react-transition-group/" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;Main documentation&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/reactjs/react-transition-group/Migration.md" rel="noopener noreferrer"&gt;Migration guide from v1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;TypeScript&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;TypeScript definitions are published via &lt;a href="https://github.com/DefinitelyTyped/DefinitelyTyped" rel="noopener noreferrer"&gt;&lt;strong&gt;DefinitelyTyped&lt;/strong&gt;&lt;/a&gt; and can be installed via the following command:&lt;/p&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;npm install @types/react-transition-group
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Examples&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Clone the repo first:&lt;/p&gt;

&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;git@github.com:reactjs/react-transition-group.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then run &lt;code&gt;npm install&lt;/code&gt; (or &lt;code&gt;yarn&lt;/code&gt;), and finally &lt;code&gt;npm run storybook&lt;/code&gt; to start a storybook instance that you can navigate to in your browser to see the…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/reactjs/react-transition-group" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
This package simulated the lifecycle methods of components through various CSS class names instead of JavaScript functions. I won't go through an in-depth guide on this but I hope you get the gist that this is really useful in the screen transitions that I'm about to do.&lt;/p&gt;

&lt;p&gt;With React Transition Group I managed to make the sliding animations for the page transitions. My next goal was to create the different layouts per page. Those pages are the homepage, services, team, portfolio, and contact us page. As a dev that didn't understand much about CSS before starting this project, &lt;strong&gt;I managed to land on what people use nowadays called the Flexbox in CSS (a.k.a. godsend layout tool).&lt;/strong&gt; I used it while following a guide in CSS Tricks (&lt;a href="https://css-tricks.com/snippets/css/a-guide-to-flexbox/" rel="noopener noreferrer"&gt;A Complete Guide to Flexbox&lt;/a&gt;) which was so helpful in learning and using it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Homepage&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F9bSZhrE.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2F9bSZhrE.png" alt="Homepage"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Services Page&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FA8mgOQI.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FA8mgOQI.png" alt="Services"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Team Page&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FjF86E6l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FjF86E6l.png" alt="Team"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Portfolio&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FZjkCmfL.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FZjkCmfL.png" alt="Portfolio"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a&gt;&lt;em&gt;Portfolio with an artist chosen&lt;/em&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fw6YnO8d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2Fw6YnO8d.png" alt="Portfolio with media player"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Contact page overlay&lt;/em&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FkI7XHsZ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FkI7XHsZ.png" alt="Contact"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first page I did was the homepage. By working on the layout, I became familiar with CSS and especially with Flexbox. I began using z-indices to help me layer things such as the white dots in the background, the text in front, and the circles that go along with the navigation. I became comfortable in experimenting with &lt;em&gt;flex-grow&lt;/em&gt; to put weights in the resizing of the interface when resized. Using the different attributes of &lt;em&gt;align-items&lt;/em&gt; and &lt;em&gt;justify-content&lt;/em&gt; to align contents of different containers to their respective alignments. &lt;strong&gt;However, I also realized that using React's states with CSS can enable you to create animations as long as the &lt;em&gt;transition&lt;/em&gt; property in CSS is present.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the circles, I had to create a trick that makes it responsive so that when you resize the window it doesn't get stuck in one place (this happened when I used the &lt;em&gt;left&lt;/em&gt;, and &lt;em&gt;right&lt;/em&gt; properties in CSS). There is a rectangle that is being resized that carries the circle on the edge of that rectangle. The GIF below demonstrates it with the rectangle having the red background. The rectangle also adjusts to the size of the window so the circle will definitely move with it as it resizes due to window resizing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FBR2rUpb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FBR2rUpb.gif" alt="Resizing Rectangle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the knowledge of Flexbox and more CSS than before, &lt;strong&gt;I breezed through the different pages except for the Portfolio&lt;/strong&gt;. I spent more time in the Portfolio page because of the right side modal. The modal contains the different songs of an artist that can be played and a Spotify playlist/album embedded player for that artist. I also had to double check that the player works on several browsers since there was a case that it works on Chrome but it doesn't work on Firefox so I had to fix it when I encountered that issue. &lt;strong&gt;The Spotify embedded player was &lt;em&gt;easy-as-pie&lt;/em&gt; to integrate&lt;/strong&gt; since it just uses an &lt;em&gt;iframe&lt;/em&gt; in HTML and it just requires you to pass an embedded link of the Spotify playlist or album that you want to display. Because of that the portfolio was the most tested feature I did in this website (but maybe because it had interaction in it).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementing the mobile version of the website was easy&lt;/strong&gt; with the aid of React since I can just display a different component that goes well with mobile depending on the windows size and be on my way. I just set a listener that listens when the screen or window size becomes less or equal than &lt;em&gt;768 pixels&lt;/em&gt;. With that I set a boolean state to true or false whether it is mobile or not. I then proceeded to create mobile versions of each screen and it didn't take much time as I did in creating the desktop variant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The last piece to finish the client side was the emailer.&lt;/strong&gt; I searched high and low for a guide that can make this serverless since ReactJS is only a frontend library. I landed on Pantaley's guide (&lt;a href="https://pantaley.com/blog/How-to-integrate-Serverless-contact-form-using-Firebase-Cloud-functions-in-React/" rel="noopener noreferrer"&gt;How to integrate Serverless contact form using Firebase Cloud functions in React&lt;/a&gt;) which was really easy to follow although it had a missing cherry on top which was informing the client side that the request was a success. I commented it on the blog post which was putting &lt;em&gt;res.status(200).end()&lt;/em&gt; after all processes are done inside the Firebase function so that Axios can then execute the &lt;em&gt;then()&lt;/em&gt; function of the promise. The guide also opened me to explore the capabilities of Firebase functions (Thanks Pantaley!). However during the deployment, we decided to move out using Gmail since it uses its proprietary domain for its email address so I had to create a new emailer using PHP in our company's server.&lt;/p&gt;

&lt;p&gt;I also thought of &lt;strong&gt;creating a simple content management system (CMS) for the people owning Kindred&lt;/strong&gt;. This would enable them to edit the content of the website easily. The CMS includes the various texts in the website, the list of team members, and uploading songs for different artists and setting which Spotify album/playlist those artists would display in the website. To store the songs, I used Firebase storage which was really easy to use due to Google's good documentation. The rest of the text and images uses the realtime database of Firebase. The images are stored in base64 string so that it doesn't consume much space in the storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alas! I have reached deployment stage in a month (WOW!).&lt;/strong&gt; I asked help from my colleagues in deploying this using Hostgator with its proprietary domain. I'm also amazed that it easily connects with Firebase hosting so I don't have to worry much in migrating. With that, the website is now alive in &lt;a href="https://kindred.com.ph/" rel="noopener noreferrer"&gt;https://kindred.com.ph/&lt;/a&gt;. (&lt;a href="https://kindred-85598.firebaseapp.com/" rel="noopener noreferrer"&gt;website with dummy values&lt;/a&gt;)&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;My Post Project Recommendations&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;As a Computer Science student that researched on user interaction design or user experience, &lt;strong&gt;I wish I had time in inlining the design to become more usable to people.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The portfolio part of the website isn't that user friendly if you don't know how to interact with it since the artists don't look clickable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The navigation could be somehow made easy if there is an easier way to navigate thru different screens without going back to the homepage.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There might be other interaction issues with the design that has been given to me. This could only be discovered through conducting usability testings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React Redux could've also been a huge help&lt;/strong&gt; in minimizing the passing of numerous properties that I had to.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;My Post Project Assessment&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;After doing that website, I believe I've become more confident in using vanilla CSS without the use Bootstrap. I've also become more knowledgeable in JavaScript ES6 with the use of arrow functions, destructuring objects, and different array/object manipulators such as the &lt;em&gt;map()&lt;/em&gt; function to process elements in an array in a quick fashion and the spread (...) operator to spread an object for it to be used for a component's properties or another object's properties. &lt;strong&gt;All in all, I learned a lot in using ReactJS and vanilla CSS while doing this project.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;"Continue learning new things, it's a satisfying way to taste processes that would keep your brain busy in a good way."&lt;/p&gt;

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