Get off the app App PART 5 – Research methods

survey image

The best way to understand the user is to meet him, listen to him, record the observations, analyze the data etc. All this is in order to make a product which will be as close as possible to “natural extension” of a human. It means a very minimal distance and friction between a thought and the actually goal achievement. For example distance and friction on the way from initial thought to pay for groceries to actual payment is limited to taking phone out and swiping it over (instead of going to ATM and then doing the shopping ).  This is the stage which in the end confront business requirements and ideas about the product. The starting point is to first understand the user and a way to do it are various research methods.

Research methods

Let’s look into the origin of these words: “recerche” from French means “to search”, “methodos” from Greek could mean “way or a knowledge”, so “research methods” we can translate to “search for knowledge or new way”. In case of UX process and the spoken activity app, this knowledge I look for is  basically the answer to the following questions:

  • When users are willing to consider out of home activities?
  • How people choose activities?
  • What do they think about current ways of finding activities, especially activity and events apps?

I am looking for the above answers which are the goal of my research. How to get this new knowledge – answers to these questions? The discipline is so wide and I came across over twenty different ways I could choose to look for that knowledge/answers. The obvious one is to just ask a user, and this method is an interview. With interview, however it’s critical to prepare correct questions, avoid any leading questions, etc – more about it below. The other way is to get the answers from as many users as I can and the popular method to do that would be via surveys. Surveys – too long and may not encourage many to fill it out or give honest answers, too short and  will not provide sufficient data to dig out useful answers. Interview represents qualitative method ( describing observations), while survey – quantitative one (usually measuring observations ie. how often to you go to events in a month?).

Some other interesting methods could be eyetracking, camera studies, participatory design. It is generally recommended to do reasearch at any stage of the project. the before mentioned methods are suitable for the initial stage, but many others are suitable for middle or even last stages of product design. More information I recommend to check for in the article by Christian Rohrer – When to Use Which User-Experience Research Methods.

 

My research methods

In my research I will focus on surveys and interviews. I decided to go with them as these are very inexpensive and quick methods to do. Another reason is simple fact that this is project is not a commercial one, doesn’t involve any budget and the work is done by one person team – which is me.

 

Survey

I have created survey “Get of an app App Survey” in Google Forms which you can check yourself in the link. Google made it very easy and quick to create, also the app is available for free. As you will see, I am trying to find out what events and activities people go to, where do they find about them, what was the experience, what is the psychology behind deciding about going or not going to out of home event.

I tried to use many multiple choice & single choice questions which are very quick to scan by the reader and few open questions expecting short answers. I experienced myself in the past that people are impatient and if the survey is long or requires too much, participants will either ignore it, skip some questions or do not give honest answers.

I sent the survey away on the 15th of August and the survey was active for one week. In the part 6 next week I will discuss some of the results. One of the lessons from that is too late I realized how important is to avoid leading questions. I am guilty – I have quite a few like that. Created them because of unclear meaning behind activity or events in my project. I wanted to point people what I meant by that. That was not a good idea. I know now that before sending surveys I need to do some test and show it to another UX designer, as it is easy to get blinded by own perspective. However, still the survey produced quite insightful outcome.

 

Interviews

I wanted also to upgrade the over observations of survey’s quantitative nature (with very limited qualitative sections) and decided to go with interviews – 4 people, from various backgrounds. I conducted them within one week following the survey. The great source of information on how to do interviews I found in “Interviewing Users” by Steve Portigal. This is where I got a lot of great tips on how to prepare interviews ie.

  • Stick to less than 8 conversations
  • Ask open-ended questions
  • Use your script as a guideline only!
  • Avoid asking leading questions
  • Be present. Taking notes is a good idea
  • Listen, listen, listen
  • Focus on their motivations and pain points
  • Record
  • Don’t interrupt
  • Follow up on specifics from the interview by quoting

The tremendous influence I got from Steve’s book was to appreciate and allow silence in conversations and focus on observing uninterrupted thinking and reminiscing process by interviewer, letting spontaneity in, appreciate any unexpected or undesired answers and behaviors.

Here is a sample of a prospect that I used during my interviews:

Interview prospect

Introduction

Explain: this study is voluntary
In any publications that will follow, mostly on my blog, would you like me to refer to you anonymously… etc.
Do you grant permission to record, reproduce, display, and distribute your responses, voice, and likeness without any additional compensation or royalty…
Turn on recorder
Explain: who I am and why am I doing this
Confirm 20-25 min and you can stop at any time.
There are no wrong answers, this is information that helps us direct our work… etc

Overview

  1. Can you please tell little bit about yourself, what do you do and what are your hobbies?
  2. Can you tell me about some of the recent activities & events you have done anywhere outside of your house?
  3. Why did you decide to do them? Can you please tell me bit more about the context of the situation that impacted your decision then?
  4. Do you have any events or activities planned at the moment in Dublin?

Exploring Specifics

  1. You mentioned about _________________________ (follow-up on specifics from interview), how did you plan them/ found them? how did you decide what to do?
  2. What categories or search phrases would you type to google for activities or events that you like?
  3. Have you ever participated in activities that you didn’t enjoy? Why did you make a decision to do them?
  4. Do you recall any problems recently in finding any activities or attractions in the city (examples)?

Dream Questions

  1. If you could build your ideal searching experience to find exactly what, when & where you need, what would it be like?
  2. Imagine you only heard an application… it has an option to find activity based on emotional state like boredom, sadness, curiosity etc. including activities for people with anxiety or addiction problems. This is only information you heard. Based on this vague and incomplete information what was the first picture that you have in mind about it or how do you picture it?

 

Next week I will put together results from my interviews and surveys and talk a little about them. I will also use affinity map to better present teh results.

Advertisements

Get off the app App PART 4 – User stories

action-adult-analog-1043512.jpg

 

At this stage, we have the problem and the very brief analysis of the potential competition as part o the UX process. In the last “bonus” article, I have talked about how to structure these revelations into a professional document which could serve as a response to a tender. With this piece, I will start looking at the user, not the business as before.

Where User Centered Design fits in

Traditionally design is a linear process like a bulldozer goes from point A to point B without going back. Once the plan is set there is no turning back. Business triggers direction, marketing dept influences the design, which influences engineers, production and so on. This is called waterfall method. In the past two decades, an alternative approach is gaining more popularity – iterative design, known under such names as Agile or Scrum.

The Double-Dimond Method I mentioned in the first part is at the core of iterative design. In the first phase, we explore the problem and such methods as surveys, field interviews are one of the ways to do it (divergence phase). Once the problem is examined, we define the problem (convergence phase).  From here on we explore potential solutions, brainstorming drawing wireframes are some of the ways to practice it(divergence phase). Once the solutions are explored, we diverge to single point again – one solution via ie. user testing which will eliminate unnecessary features in the design. Why is it iterative? Because the story doesn’t finish here but goes back to the problem definition up to diverge in solution. The design is iterated, at each time designers and developers gain better insight into the product which in the final iteration fits like a glove. It goes as long a the schedules and budget allow.

The waterfall method, in contrast, is focusing on the gradual development of a product rather than gradual growth, it’s like creation vs evolution. There is no superior method but only iterative process holds space and flexibility for better understanding the user and the user is shaping the final product as much as it’s technically possible.

I looked at the different problem from my (or business perspectives) recently I defined the problem. I looked at some potential solutions. Let’s complete this first iteration with user stories that will define the user-centered set of solutions to our problem.

User Stories for the App

User Stories keep better focus on UCD, enhance cooperation between different teams working on the product and understanding of certain features. They are reminders of user goals and simplify product requirements. These are very short stories and follow the pattern:

“As a user I want _________, so that _________.”

Here are some of the stories to my get of the app App:

As a user, I want to login to my account, so that I can see my saved preferences (ie. activities I like, one I signup for, see befriended users).

As a user, I want to choose what activities I am interested in so that I can see a list of relevant events going in town now.

As a user, I want to clearly see coming events as a grid so that I can quickly find what I need and save time.

As a user, I want to be able to easily and quickly check activities that I like and always be able to update them, so that I can rerun the search with a click.

As a user, I want to specify the time window, so that I can look for events at a particular time even if they are already started.

As a user, I want to see a map with my location and specified proximity, so that I can see what is happening nearby.

As a user, I want to be able to do a quick search for something specific like any lectures about astronomy in the next few weeks taking place in the city.

As a user & owner of the pub, I want quickly and easily insert information about the concert I am arranging, so that right people will come over.

Social aspect

As a user, I want to see who else is going to other events and if there and if there any of my friends coming so that I can decide to go only for a sake of seeing familiar faces.

Admin

As an admin, I want to be able to edit or remove profiles so that I can practice relevant policies in case of a breach.

Jobs stories – additional perspective

While User stories on an imaginary persona, job stories concentrate on the circumstances. It helps to look at the exact motivation of a user, not implementation. These are also very short stories and follow the pattern:

“When ________, I want to _________, so I can ____________.”

Here are some examples in relation to the App:

When I am arriving in the city for short stay, I want to see a list of top places worth to see and their position on the map, so I just can go and see the best things nearby and save time.

When a friend visits me in Dublin, I want to quickly check what we could do, so I can arrange our time and transport to get there.

When I feel passive & I am in a low mood, I want to if any activity can help me and are there others like me that want to change that so I can feel better.

When I have a spare evening and feel like dancing rhumba, I want to see if there are any rhumba concerts in the city so I can spend time fully.

When a weather is nice, I want to explore a list of various outdoors events I have never been to so I can try something new.

The above short list of stories is a great way to describe features centered on users. Stories can be split into detailed tasks for designers and developers to design. However, this beforementioned user is very far from reality. It is purely based on my ( business ) assumptions. In the nest part, I will start a new iteration do explore the problem better. In Part 5 I will present research methodologies I will use in UX design of my app and Part 6 will present the analysis of this research.

 

The focus on sales price is one reason we get unusable copying machines and telephone systems in our places of employment. If people complained strongly enough, usability could become a requirement in the purchasing specifications, and that requirement could trickle back to the designers. But without this feedback, designers must often design the cheapest possible products because those are what sell. Designers need to understand their customers, and in many cases, the customer is the person who purchases the product, not the person who actually uses it. It is just as important to study those who do the purchasing as it is to study those who use it. – “The Design of Everyday Things”, Don Norman

Get off the app App PART 3 – Business Requirements Document

charts-coffee-cup-938959

Business Requirements Document (BRD) may sound like a downer to an excited, active and full of ideas innovator. However, in fact, it is only a solution to such an innovator who would like to share the picture of his idea with a real down-to-earth businessman, investor, business angel etc. It is a great way to organize all data, product specs, include costs, projections, benefits, timelines. It could be a contract, provide a detailed business plan for the entrepreneurship and be a response to a Request For Proposal (RFP) issued by a vendor or joint venture partner. I started writing it now to progressively update it, but a standard way in UX design process is to usually prepare it in later stages.

Here I am only presenting the draft of my BRD, which regularly I will be updating it in the following form. For the purpose of this blog and easier reading, I will be keeping it away from readers eye, but I will be presenting this information trimmed from official jargon, in the form of articles. Anyway, here is the 3rd stage started, ongoing – BRD, and here is what it consist of:

1. Executive Summary

tbc

2.The objectives of the project

S.M.A.R.T. Business Objectives: (Specific, Measurable, Attainable, Realistic, and Time-bound

Specific

  • to create a competitive application, a Facebook in finding activities and through them meeting with other people, finding joy and more opportunities to grow as a human in experience and knowledge.
  • to gain a significant market share and rapidly growing user audience.

Measurable

Deliverable in 8 months from the start date.

Attainable & Time-based

Gain 1,000 users, 200 weekly activities & 100 of the event/activities hosts within the first 2 months.

Realistic

There might be a potential competitor in the shape of new service that can significantly decrease the above expectations.

3. The needs statement

It answers the following question: “What is the need that I am addressing with this product/project?”

I answered that question in previous posts, but for the sake of this article let me answer it by looking at the target audience. The expected user of the application would be between 18 & 50 years old, depending on the internet skills. That is someone who is willing to participate in public events or activities, use time better – creatively, learning, experiencing something new etc.

The mindset of the targeted person is someone who faces boredom. It could be a user who:

  • is visiting a new place & town and is looking for activities or places to go to
  • looks for ideas for weekend or evening
  • looks for opportunities to meet people
  • is willing to try a new activity
  • is willing to go out to practice its hobby
  • is struggling with psychological issues (anxieties, alcoholism etc) and is willing to do something with this via participating in related social activities or meetings
4. The scope

Draft of the basic project will consist of:

  • Web app & product site showing what can it do
  • List of available APIs and potential institution websites that could be scrapped
  • Marketing plan – users side – the strategy for acquiring users (bloggers, facebook, articles etc)
  • Marketing plan – providers side – the strategy to acquire independent business & institutions, government, cooperation with a meetup in the long run and many other businesses ie. Airbnb etc
5. Financial Statements

tbc

6. Functional requirements and features

Some of the high-level requirements of the app:

  • Signup/ Login
  • 4 main options of boredom: Apathy, search for interests, search for doing what one like, explore – clicking each provides solutions that can be narrowed down if the user takes more questions
  • Ability to understand users interests, by questions or categories
  • Ability to measure user needs by few questions to update its profile
  • Displaying relevant events, main info in a small box
  • Displaying activities on the map
  • Displaying activities on the calendar and times
  • Shows other people attending, very basic info about users limited to their profile which is anonymous (so it would be another incentive to go and meet rather chat in the app)
  • Basic admin dashboard for editing accounts etc.
7. Personnel needs

tbc

8. Schedule, timeline, and deadlines

Here is only a draft idea of how potential schedule could look like if it’s done with a team. As I am on my one person designer, it would take longer. As a result of that, potential solutions & amazing light that could have been shed by other people is not there. The schedule depends on the skills and people involved. My articles will come to an end around interactive tests & finished interactive UI.

WEEK 1

User stories and flow charts

WEEK 3

High-fidelity UI mockups done

App framework done

WEEK 5

UI completed

Interactive prototype

WEEK 7-16

User testing

Web development

Manually creating content by copying from anything that is available in papers, individual websites – everything up to 3 months ahead

WEEK 20

The finalized version of app complete

Final testing underway

App & Website Finished

WEEK 24

Connecting to APIs (ie. meetup.com), Scrapping some websites

Building content for unchangeable activities (ie. museums, parks)

Events content finished

Reaching to Government, event providers etc. so they start filling events in the future

WEEK 27

Application & websites launched

Marketing Campaigns launching

Reaching out to new audience and event providers – contacting bloggers, paying visits to local business (pubs, community centers etc)

9. Assumptions

There are two major risk factors:

  • The app could become confusing by matching such as the wide spectrum of activities in town
  • It is very difficult to access all events unless we get event organizers involved; without a lot of events our service can be simply replaced by Meetups, Nearify or Tripadvisor

Competition

There is no competition offering the same type of service. However, different fractions of the service are facing direct competition from:

  • Tripadvisor and local sites – in terms of places to see
  • Meetup & Facebook – social events
  • Nearify – in terms of matching user needs and specific events
  • Various local sites ie. volunteering, small pub jazz session, exhibitions, university lectures,  community center workshops, aa meetings etc

Moreover, some websites might improve their service which could unveil greater competition in related areas.

10. Cost and Benefit

tbc

Conclusions

I reckon that the ultimate success of the application will depend on the variety of displayed activities in the city, search algorithms & its features (ie. filters by date, time, vibe, theme, map search etc.), anonymous social network, finished design that would handle the huge complexity of choices,  and ideas for matching people with activities  (ie. by short test questions, their moods, interests, personal goals). Especially at the start it would be very important to enhance event organizers to use this app to publish their events or to find an incentive for them to do that. Once all is working, users will start coming possibly by a spread of word.

Get off the app App PART 2 – Competitive Analysis

The idea about the product, no matter how exciting or revolutionary may sound, has to be verified. UX design process directs clearly through steps and tools to do so. Some of them are competitive analysis, stakeholders interviews, user research methods, building personas, user journeys etc.

On this UX journey, the inventor of the idea has to find some humility and be more open minded from now. It is not about himself only anymore. I hold the role of the inventor in this case and the following step, and this whole article, is about competitive analysis. It is not about me or my idea at all, it is about others idea. Let’s take a look at potential competition of my activity/event application.

 

Current competition

There are dozens of websites and apps that allow users to look for events. Here is just a handful of most significant one.

360 Dublin City Lovin Dublin Foursquare
Google Search Dublin Event Guide  Dublin Event Guide 
Dublin.ie Lonely Planet Tripadvisor
Dayout.ie Nearify Facebook Event Discovery
Eventbrite Ticketmaster
My major competition

Among the picks there are websites that have very limited search results, functionality or user experience. Ie.

Dublin.ie & Dayout.ie – is a mixup of articles with only some events in the city, functionality is very simple – search engine and so is the entire user experience.

Dublin Events Guide – focuses mostly on free events, many of the very repetitive, it’s mostly static website and search is limited to a static list of events.

The websites that offer experience similar to the one I have in mind are:

Nearify – similar idea, as it’s a search based on user interests (user chooses different categories), with improved UX in contrary to the before mentioned picks. There is also social network experience. However, the palette of interests is not as wide as I want to offer, there is no peer matching, and in case of Dublin – results are limited mostly to meet.com results.

Meetup.com – similar idea, however it includes only events that other users created. However social networking, choosing by interest and UX is the most advanced among all the others.

Facebook Event Discovery – Facebook recently improved their website with events and it’s showing now plenty of different events & activities in the city, categorized and marking attendees from the social network it is built upon. Ux requires improvement which I am sure facebook do at some stage. The content and idea is very competitive. However, the main focus of facebook is social network & advertising rather then offline events & activities.

I will look closer now  at Nearify and Meetup.com as two major competitors and very briefly put my toughts about Facebook idea.

 

Competitor Profile: Nearify

Objectives & Strategy

nearifyDiscover Events  Near You– Never miss events anymore.

Nearify is your guide to finding fun, music, concerts, your favorite plays, festivals all at one place, personalizes Events recommendations for you.

Nearify loads the list of the popular artists with related upcoming events near your location.  Once you launch Nearify and have set your location, it shows you the list of upcoming recommended events today, tomorrow, weekends, and beyond based on your taste. Discovering events goes quickly through a context based filter like Saturday night parties or music festivals. 

Search Events Screen – Use this to search for events matching a very customized selection like distance, category, date range, and even keywords. Get all your alerts at one place, whether it is for an event your friend invited you to or it is from Nearify itself.

Market Advantage

  • Installed 100K on Android, 4.1 stars
  • Available as an app in Android Store and as a website
  • The only app matching interests of users with what’s on, at a distance from users location
  • It is very well recognized in India and USA.
  • Simple navigation
  • It is possibly the only app matching users interests with current events
  • Community feature – connection to Google+ and Facebook

Some Marketing Observations

  • After been acquired by WeWork in 2017, they got funding and employing lot of people
  • WeWork is targeting millennials, attracting with shared stylish workspaces
  • Their blog is not active since Nov 2017 (around time they got acquired)
  • Focuses mostly on India and USA
  • The rest countries hold mostly meetup.com events
  • Lists some Facebook events, eventful events, eventbrite events, meetup events, active events, bookmyshow events among others reliable, but many events missed if they were on other websites or no internet at all

SWOT Profile

Strengths Opportunities
  • A unique platform to find local events
  • Community aspect
  • Facebook & Meetup integration
  • Calendar, Place & interest locating events algorithms
  • Free as lives from ticket sales and space for adverts
  • Better marketing strategy
  • Let pubs, and all venues to publish their events on the app
  • Include map showing events
  • Improve people/events matching
  • Improve UX/UI
Weaknesses Threats
  • It’s only in India and some cities in USA
  • Outdated UX/UI
  • Some similar apps slowly start popping up
  • Local websites holding listing events

User Experience

  • Some screens are confusing to use, ie setup screen
  • Poor events choice in Ireland
  • Very long list of categories

 

Competitor Profile: Meetup.com

meetup

Objectives & Strategy

“What do you love? Do more of it with Meetup

Getting together with real people in real life makes powerful things happen. Side hustles become careers, ideas become movements, and chance encounters become lifelong connections.

Meetup brings people together to create thriving communities.

Find out what’s happening in Social Meetup groups around the world and start meeting up with the ones near you, Explore your city, learn a language, or a class, discuss art, do design etc.

  • Meetup launched a redesign aimed at helping it appeal to millennials and embrace new machine learning techniques to better connect its members for more casual meetups.
  • Under WeWork it will aim on building communities and including it WeWork strategy of shared spaces/workspaces
  • 5 million downloads in Android App store, 4.2 stars, over 35 million-members
  • Web and app easy to navigate

Market Advantage

  • Rating 3.2 in Itunes store
  • There is no other app alike to give access to so many small various events
  • Community factor
  • The only app for users to organize specific events if there is none of that kind
  • It is very popular worldwide and on top of the searches in Google

Some Marketing Observations

  • There is a very small advertising going on in internet if anything at all
  • Their blog went dead in 2016 and was mostly focused on India
  • In 2014 they got financing of undisclosed amount from India Quotient and Seedfund Advisors in India

SWOT Profile

Strengths Opportunities
  • Very popular
  • Big audience
  • WeWork investing in its expansion
  • Improve UX/UI
  • Better integration with other online services
  • Involve external institution to free event creations
Weaknesses Threats
  • Limited only to events created by users
  • Fee for creating a group
  • No map localization
  • Calendar & interests can get bit messy to locate events
  • Facebook plans about community creation and improving event experience
UX Quick Analysis: Meetup & Nearify

1. Layout & Usability

  • MEETUP – Searching for events, checking events, joining groups & events  is well organized. There are occasional very confusion situations ie. clicking “Your groups” only shows name of events rather than groups… moreover in this new screen we find a button “Your Groups” (which should not be there if we are already in Your groups). So feedback is bit confusing. It’s also hard to find specific past events.
  • NEARIFY – the event names boxes take a lot of space on the screen, scrolling is tiring. Moreover the event boxes includes information that is irrelevant to search. The information has confusion architecture ie. looking when for events, I click Topics only to find some groups related to Topics but no events are displayed as I would expect. How to look for events by topics? What does it mean? It feels user struggle with lack of signifiers & affordance l in some area.

2. Navigation Structure

  • MEETUP & NEARIFY – both does a good job to keep things simple, like menu, clear icons, visible and easy to understand general structure.
  • NEARIFY – some issues in navigation ie. “Artists” includes often places or event names – which is misleading. They have nice following communities or people feature. They include meetups but also give an option of creating events.
  • MEETUP – Is very easy to navigate, mostly intuitive.

3. Compatibility

  • MEETUP – Browser on PC & MAC, Android & iOS
  • NEARIFY – Browser on PC & MAC, Android

4. Differentiation

  • Calls to Action

 

Competitor Profile: Facebook Events

facebook

Facebook Events app is a new thing that relaunched late last year. Considering the fact that Facebook is a social website, it started looking at this market segment very late. A great article about this subject was published by Hugh Malkin – “Why noone has solved event discovery“. It’s SWOT picture would be very similar, I only mention about distinguished differences.

Definitely the strength of FB is its huge social network and algorithms matching events with the user interests, while opportunities are sprouting from the fact that account users can create events (and there is plenty of them including institutions & companies).

The weakness is in the fact that events are just a small island in a huge Facebook ocean and it’s easy to miss any notifications among dozens or hundreds of others various social notifications (depending on how active is the user), search results are not focused on events only. I also believe that the fact users spent so much time there for various reasons (communication, posting messages, liking, networking … the list goes on and on), is contradicting to the purpose of offline activities… more like saying, “I think about this event I see now, but now I am here to check what others posted, texted me etc.”.

One of the threats is the ongoing echo of recent scandals around insecure practices of user data stored by Facebook as well as its vigilant practices, some as take from “1984”. This affected how users feel about Facebook which cases exodus of some of the users, although minor one. Also, new generation of users values way more than their parents freedom, anonymous activity and security. In July 2018 Facebook showed the smallest quarterly jump in the last 8 years.

Lot of apps, but the same approach

The market is saturated with many different applications, where Facebook, Meetup and Nearify seem to be the greatest competition to my idea. Nearify is focused more on India and USA, while Meetup could be a great source of information that I could get via their API to include more events. Facebook is the major competitor, as their list of events is large and based on community. Search results can be limited by categories, friends choices and places. It is very Facebook community event search. My task will be now to check what else we can offer and check what users think about it.

In the next article, I will briefly introduce Business Requirements Document.

Get off the app App PART 1 – Defining the Problem

Dublin is a very vibrant city with plenty of events like live music, cultural meetups, various workshops, festivals etc. The number of options available to do out-of-home activity is huge. However, having missed many great events, triggered a question – How can I find an event I am interested in at a particular time and in a specific area? The answer is not as simple as it seems.

The most obvious answer is to google it. Once I have done this, I found a result of plenty of different websites or applications. When I clicked the first few results, I only found irrelevant events, as I was looking for ie. drawing workshop. If I look for a jazz session today in Dublin, I will again find plenty of websites and then again these websites ask to search for events on their platform, but still, none of them seems as relevant as I expected. Am I very fussy? Moreover, some events are available on a specific event website but other on different websites or applications like Tripadvisor and still some are available on the individual websites like a pub website etc. At one point I got an impression that it is very easy to miss many interesting events only because all information is so scattered, hidden ( due to poor positioning ) or just simply missing.

This situation frustrated me for a very long time. It has been over two years now since I have the idea of this event application that could sort out this problem for me. However, would it sort the problem of others too? What’s most important, do other people have the same experience as I have? As a matter of fact, I asked many random people similar questions and the feedback was mostly the same.

Here I am, UX/UI hobbyist designer. I would like to take my skills to a new level by focusing on a solution to the beforementioned problem. In the series of articles, I hope to do so in a UX fashion. This first article is focused on the problem that triggers a search for the solution and following designing experience process.

The Double Diamond Strategy is one of the methods that help to define the problem and find a solution. The neighboring diagram comes from Jonny Schneider on thoughtworks.com.

Source: https://www.thoughtworks.com/insights/blog/double-diamond; Jonny Schneider

Understanding problems

So here are the main problems I came across:

  • The information about activities available in Dublin is scattered across too many different websites (Facebook, TripAdvisor, Meetup etc)
  • There is no app showing so many of current or future events depending on location
  • There are many events not published
  • Current events apps mostly do not focus on matching user’s preferences

Defining the problem

Our users are losing a lot of time on finding what is going on in town, they miss many events and are prone to spend time in front of TV or internet as not knowing what is happening. From locals to tourists. A person who visits Dublin for 1-2 days is overwhelmed with options while the locals can’t find suitable info as it’s fragmented across too many apps.

Exploring Solution

My proposed solution is one app that would show ideally everything happening in town from concerts, workshops, lectures to places just like museums, parks, hiking – all things that one could do that one really likes rather spending time in front of the internet or TV. A special feature – the matching system would allow quickly to give a user results what can address his needs or emotional state. Another feature could be simply a general map showing locations with activities & events and a simple search engine for events.

The main goal & mission of the app

  • Meet new people
  • Do something productive you like, nearby
  • Enhance personal development over personal comfort

The temporary name of this application is “Get off the app App” (get off the screens, TV, couch, routine etc – get on to places, events, workshops, acquire skills & knowledge etc.).

In the next article, I will look at Competitive Analysis.

My growing excitment about UX/UI design

ball-shaped-bright-bulb-296323It has been a while since I posted anything on my little blog. I don’t feel guilty as none of the bad habits influenced that. It was a pure and cold calculation. The calculation of time remaining to study, build, create, rest etc. The lessons on how to balance duties with my wellbeing, mind plans with heart needs, or my way against Greater Way.

After my last post, I realized the curriculum in Viking Code School is huge in the matter. If I had decided to do it at that pace which was a 15h week (on top of my 40h job), I would have completed it in over 2 years. There was only a fine small group of people who finished it part time anyway. I decided to get some time on postponing my blog, some meetups, and my obsession over little details in projects.

This was a wavy route I can tell you. between small and huge projects, back-end and front-end, JS vs. Ruby, one framework or the other (Rails vs Node.js) I created a vast portfolio of over 80 projects in my GitHub portfolio ( available through my current website: dariuszbiskupski.com ). I have completed the most of the entire curriculum in late Spring this year 2018. Viking Code School was acquired by Thinkful early this year and the course was terminated. This makes me proud of accomplishing that 80% of the curriculum, which what was possible in current circumstances.

Since Spring I have been involved in different personal projects and courses on Udemy like Photoshop, Sketch, HTML & advanced CSS3, designing some posters, leaflets or a website for a friend, spiritual matters, reading plenty of books on design ( inspiring Paul Rand ) or UX, drawing & sketching ( B. Dodson ). Basically very creative and easy summer which I really enjoyed to a level where I noticed how much I enjoy the very front-end of the product development – UX & UI design.

This is the new direction I would like to walk these posts from now on. Moreover, the main topic of coming posts would be UX & UI design of, what I believe, an amazing application that is long needed on the market. Here I only share that the subject is very particular event application I am going to develop under Lean UX framework with UI. I hope this will be a beginning of something that revolutionizes relations of the social & real-life networks.

 

Connect Four game vs life challenges

 

It’s been a long break in writing. Throughout the past three weeks, a lot has happened. A week after publishing my last post, I flew to Poland to take an honorable role of the best man at my friend’s wedding. I have also visited my family. The start of my trip made me distressed as I couldn’t code my game due to lack of spare time – seemed like there was constantly something going on – meeting brothers, father, driving far for the wedding, etc. I felt I had to let go the thinking about the course to enjoy the time with the dearest one. So that’s how a very long break started in my coding. Moreover, Mastermind’s AI class I was working on became very tough to crack . This problem was waiting for me while holidays clearly didn’t give any opportunities to ease it out – situation started draining my energy. After coming back to Dublin, it took me about a week to slowly get back into the routine and sorting out this procrastinated problem from my code. It took another number of days to crack it and get into the flow back again. Nothing pleasant.

I am happy to be here now – starting new lessons and challenges, refreshed, having rested and with growing motivation again. This little crisis helped me to cut other small pieces from my daily routine. Having spoken to some of the other students at Viking, it became apparent to me that the week plans I was practicing were not working. Now, instead of having 2-4hours Mon – Fri and 5-6h Sat-Sun, I am having Tue and Wed totally off, while having at least 4 hours of concentration on other days. Thanks to that, pressure is off, I can call anyone I want to or go to the city, meet friends, etc. on those days without any guilt and the outcome is still about 24 hours a week – at the smaller effort.

I am currently digging deeper in RSpec and instead of testing my code like before, I am building tests and gems. A lot of new stuff to learn and new projects are approaching. This subject, however, I will continue next time. Also, in a moment of being stuck, I am working on creating my website portfolio.

I would like to share my experience from creating Connect Four game. It’s as complex as nothing else I did so far. I had to rearrange the whole code a good few times completely. I think I spent about 30 hours to make it work, but now finding solutions to bugs are so quick to me as never, objects very familiar. I have also learned to clean my code better and keep methods smaller. On the top of that, I understood better traversing 2D arrays, detecting the state of complex objects, toggle players, building simple strategy AI player, etc.

So connect four game is a version of tic tac toe with a board six by seven and rules forcing a player to connect four pieces instead of three. The code, as always is available in my GitHub repository. The game works in Command Line. It allows playing against another player or a computer. The computer is an AI, whose goal is to put piece wherever it has already three pieces on the board. If it’s not the case, AI is meant to block any three pieces of its opponent, otherwise to choose a random place.

Needless to say, the most challenging part of the game was to make it look for diagonal four pieces or three pieces in various positions, i.e.,. piece_piece_space_piece – so third space can be filled to win. This role is taken by the PegSystem class in my game which is responsible for detecting relationships between different pegs/pieces.I am still learning from other people’s solutions, and still see a lot I can improve. In order to improve these skills I am reading now three little chapters every day from Rus Olsen book “Eloquent Ruby” – there is a good part of very minimalistic clean code included and practices in order to  improve my code in next challenges.

Screen Shot 2016-11-20 at 15.24.23.png

The code above is just a snippet out of the main game class. There ar five classes overall. Here we see my PegSystem class mentioned above that checks situation on the board and can be used by computer AI class to get messages about where are three pegs belonging to the opponent so he can block or three pegs of his so he can win when adding his own there in the next move. I have all included in  loop which is broken only when player makes the right decision about who he wants to play with… so I excluded situation where he enters ‘w’, as the only choices are C and U (I added extra method to make it capital even if player types small c as we know how players are 🙂 ). This method sets the main objects for the game as board object was initiated at the beginning. I am happy to start new challenges now  – need a break. I am going back to building my Rspec tests. Till next time.

 

Mastermind game

This is my first Object Oriented game in Ruby. I have recently finished it after working on it over few evenings. I felt excitement when played it during testing phase or just when I was looking for a bug. It brings some nostalgia for games I played in early 90’s. Games such as Arkanoid or Tetris and even some of the games like Wheel of Fortune which one could play in DOS environment, with no graphical interface. It was just a black screen with white letters describing scores, questions, answers, etc.

Here I am, a “creator” of a reproduction of the one of the most successful games in the ’70s – Mastermind. My code as usually is available in my Github repository.  I wished to be able to present it in the form of game anyone can play on my blog. Unfortunately, this is something t come in the later part of the course. This game can be run in Command Line environment where Ruby was setup beforehand. Here are few screenshots of the gameplay: screen-shot-2016-10-18-at-20-29-33

I have created six classes for this game. The player can choose whether to be the one creating code and letting the computer to guess the secret colour combination or to be a codebreaker and let the computer create a secret colour code. The human player class asks a user for the input of specific guess, while Computer codemaker class generates simple random code. In the similar fashion, I have created Human codemaker and Computer codebreaker – where the human player creates secret code and the computer just generates random colour combination guesses. The board class is responsible for storing colour combinations (just like in the real game) or calculates the feedback scores in the form of pegs – white or black.

For the feedback, I have created simple ASCII “graphical” interface. So we have six colour pegs and two feedback pegs which will inform the player how close were his guesses. Board class also renders colour guesses and feedback pegs on the screen.

During the building process, I followed the idea of creating small blocks – objects and creating communication between themscreen-shot-2016-10-18-at-20-56-45 in a low cohesive way. This become a difficult task as many times I faced an issue of their dependability while my intention was to avoid it – lessons are best learnt on own mistakes. I tried to follow simple rules like one task per method or Tell Don’t Ask.

I have started creating the whole game from pseudocode. After that, I was gradually replacing it with more detailed descriptions. Here I started thinking that if I require a particular action (let’s say adding pegs into the board), I would try to split it into most basic actions, pack them into methods and name them in self-explanatory fashion. It made the whole debugging process much easier. Before, whenever I started coding, I had to spend few minutes to recall how a certain method work, while now I could easily see what’s going on just by looking on it.

My plan is now to review some codes written by other developers of this or similar game and copy the best practicies of coding – so my next game is, even more, OOP and cleaner. The next game I am working on is Conect Four. I can’t wait to put my hands on.

As for the life matters, I can only say that it’s easier to plan a schedule than follow it. Unforseen life circumstances took me many hours out of my schedule, among them overtimes at work, meeting friends I haven’t seen ages, leakage in the house… and some adventures in personal life. Overall I spent over 16 hours last week on coding – about 8 hours on the goal.

Multidimensional duplication method (about passing by reference)

Another week behind, another challenges done. The levels of difficulty are growing every week now. I’m learning more about Objects / Classes and how to use them in written programs. The whole idea is still new to me, but it feels that I am moving forward, slowly, however.

I am building now Mastermind game. It seems that procedural code would complicate things at this stage. I am making it with three classes and number of instance methods. I am assigning one action to one method. It requires more planning than before when I was just building one huge block of code. I will share one of the finished games soon, but today topic is different.

One of the warmup challenges was to build deep duplication method to Array class. Here is what I have learnt. Let’s follow the below code:

screen-shot-2016-10-11-at-20-39-50We have passed/ assigned values to two variables. var1 hold a sting “house” and this particular string has its house in computer, pigeon hole or allocated a place in memory if you prefer to call it. That place didn’t hold “house” after we have assigned var2 to var1. What happened next is a new place in memory was given to variable var1.. the same location that belongs to var2. I tried to add an extra string in line 006 to var2 – but this operation was not saved anywhere.

I have decided to use shovel operator adding to var2 ” is just too small!”. So var2 is “shed is too small!” Nothing suspicious. However, if we check var1, it has changed as well, it’s not “shed” anymore. This particular location id in computer’s memory explains why this has happened. In fact, when adding the string to var2, we have added a string to the object living under number 70331642254620 in computer’s memory. This is the same location that var1 was referring to. This last verb is important – “referring.” The location in memory is what counts, rather than the name under which we store a string (i.e.,. var1). I did a similar operation on line 011 but the effect is different. The difference is that I have added the string ” is too small to live!” to var2 and assigned to var2. We see now that room number 70331642254620 was not taken by this operation. This assigning process assigned new room number 70331646357140 to var2. The old room is still referred by var1.

It’s easy to imagine that in a big program with many variables, forgetting about the above referencing logic and focusing on values must cause major issues. Having operations affecting an object stored in the same piece of memory may change values of other variables referring to this object id… variables which values shouldn’t have been changed like in the above example.

The solution is dup method – duplication function which creates copy of the same object but assigns different id in memory.
screen-shot-2016-10-11-at-21-06-30Here we have code where duplication breaks this cross reference, so var1 and var2 are two separate objects although having the same value of “shed”.

There is one thing with dup method worth to remember. This nice method doesn’t go too deep. So it can create new id for the same array like: [1, 2, 3] but it won’t for the part [“a”, “b”] in array [1, 2, 3,[“a”, “b”] ].

The example of that can be tracked below:

screen-shot-2016-10-11-at-21-13-48 Here is my turn. The assignment asked to create a method which would duplicate multidimensional array… no matter how many levels of arrays there is within the main array. I got lost in recursion but with a few hints from people in Viking I present below method for duplication of the multidimensional array.

 

screen-shot-2016-10-11-at-21-16-57

I used map method which returns an array, so returns an object with a new id number. Map method iterates through every object of the first level through the array. Here comes recursion (arr1.deep_dup) which takes care of the depth of every object.It works even on beauty like this: deeper_arr = [ [ 1, [ 2, 3 ] ], [ 4, 5, 6], [ [ 7, 8, [ 9, 10 ]], [11, 12] ] ]If we imagine a table if columns and rows, I could say that map iterates through

It works even on beauty like this: deeper_arr = [ [ 1, [ 2, 3 ] ], [ 4, 5, 6], [ [ 7, 8, [ 9, 10 ]], [11, 12] ] ]

If we imagine a table if columns and rows, I could say that map iterates through the top row of these columns… ie. [ 1, [ 2, 3 ] ],   [ 4, 5, 6],   [ [ 7, 8, [ 9, 10 ]] etc. The condition in line 4 checks if the ie. [ 1, [ 2, 3 ] ] is an Array and if it is, it calls the same function deep_dup to get to the next level: 1, [ 2, 3 ], and again iterates though 1 returns it as it is and when it gets to the  [ 2, 3 ] – realizes it’s Array and go deeper again (easier to imagine by the fans of “Inception” or “Primer” I think). Once it gets to 2,3 level, returns them as they are and map method moves on to the next column from top to bottom which will be now   [ 4, 5, 6]. All this saved each time in new memory id which is what map enumerable function does.

 

 

 

 

Object Oriented Ruby

Another intensive week behind me. I spent over 23 hours on coding and solving different challenges or reading Ruby Programming by David Black. I have finally submitted my solutions of a large RSpec challenge. Last exercises took me the most of the time – which was about 12 hours to crack the problem. The joy, in the end, paid off. I was proud of my approach as it wasn’t easy an easy ball to play with.

The last challenge I mean is again purely Test Driven Solution with Rspec file waiting. The below method is adding extra function to the Fixnum class so having “12345.in_words” will give us “twelve thousand three hundred forty five.”  I didn’t think it would be that difficult when I started. I thought about two ways of approaching this problem – either creating string or array and working with that to find a solution or by dividing and modulating numbers. I used recursion and numbers themselves. Here is my code which works for all numbers up to 999 trillions:

screen-shot-2016-10-03-at-21-05-41screen-shot-2016-10-03-at-21-04-02

As I am proud bot the approach,  I am not that pleased with the code solution above. I have started getting deeper into Object Oriented Programming which makes me look at the above code as difficult to follow, consisting one God method, containing many elements that depend on each other making it difficult to change later or look for a bug (there is no bug here, however)… The above code is just not clean; I am practicing ways to change this practice.

The idea of OOP is simply beautiful. Instead of having one procedural script – so called God method which does everything,  we have class object with small little parts that are responsible for one thing, and one thing only. They are independent, and we are not bothered about what is happening inside of them. Well, we know to this minimal degree where we can say what it does, not necessarily how.

If you remember my version of Tower of Hanoi published earlier, look at it now in my repository.

screen-shot-2016-10-03-at-21-28-28

It’s a class and we can make it running by loading it in IRB and instantiating a new object with i.e.,. p = TowerOfHanoi.new and then using the method on this new object t.play will run the game. It is almost like 3.even? or new_array.pop(). Yes, another method to an object, but now not like the one Ruby created (it is said by the way that everything in Ruby is an object), but object which mechanism I have designed and created… can feel sort of like Matsumoto’s assistand adding another piece to Ruby. This game is a big class, but it might be an object in another game which gives those answers that I thought it to give in the first place. It feels like powerful tool was handed in. However, difficult one.

Here is my another attempt on making Rock Paper Scissors game in OOP. This time, it consists of three classes – one for the human player, the other for the computer player and last is the game class. All saved in separate files. I tried to split them up as much as I could after devoting hours into building it. Having watched Ben Orenstein in action recently makes me want to master refactoring very much.

Another useful and exciting tasks were involving using Procs and Blocks to create a replica of each, inject, ma, reverse… methods, or even something useful like benchmark method to measure time at which specific block method works out a solution.

As for personal life, it was a great week. There were good news about my dad, he will get treatment this week, and new examinations brought more positive results. I started to turn off my phone during studying – helps a lot. I have filled out my google calendar with all the stuff I do in a week – helped me to focus on coding on Mon -Fri exclusively and afternoons on weekends. This week job keeps me busy as rarely, and I have some overtimes every day so fighting again to have every hour I can devote to studying.