DECODE hack days – exit your comfort zone

Silvija Gustec
Business Development
News

Working on projects can be exhausting and monotonous, right?
Sometimes you wish to test new technologies or tools but the daily work schedule just doesn’t fit in that plan.

But if you want to be recognized as a really good developer you have to stay up to date and always ensure the best solution for your clients.

That’s why at DECODE, we organize a few hack days throughout the year. To evoke our passion, even more, we usually combine them with team building events. We truly want to shake people from their daily routine and give them time to rethink.

What are hack days at DECODE?

Creating cross-functional teams and giving them freedom to invent a mobile app prototype, a feature or a new piece of functionality using technology they are not familiar with, while having limited time available – well that pretty much sums up how the hack days in DECODE look like. We all get the same start position and in the end, it’s all about learning, creating, and of course, winning the prize.

On your mark, get set, go!

So, let’s start. You get a colleague you usually don’t work with and instructions for the competition. 

The instructions are very simple ->  create something tangible using a technology both of you don’t use or barely know.

You commonly use iOS and now you have to figure out how to build your idea on Android platform, or you have to understand Swift instead of your secure Kotlin language, well that’s the part where you start researching.

After a little chat with your colleague, you start building a strategy for the winning plan, ideas come and go and soon you realize it’s not that easy and that time isn’t on your side.

You start to rethink your own working technique, and that’s when the magic happens. You boldly step into the uncharted territory, learn as you go, implement, eliminate few errors, and here you are feeling proud and ready to present it to your colleagues and win the prize.

Failure is the best part

Of course, there were ideas or prototypes that didn’t work smoothly or just failed in the end.

But, if we learned something from that “failure”, no matter if it was a consequence of bad communication inside the group, a poor idea or just the wrong understanding of the new tool or technology, it’s exactly the best situation that could happen. For all of us. 

Because lessons learned through failure are some of the most valuable lessons you could learn. To accept your own failure means you have come to new understandings and perspectives, and that’s the point when you start to grow and mature.

For the rest of your colleagues, it’s a great opportunity to avoid the same mistake.

Real value

It’s no secret that internal hack days have a more profound meaning than just learning new technologies in a couple of days. 

Fundamentally it’s about

  • forming stronger relationships among employees and creating admiration and respect for each other
  • increasing inventiveness, leadership skills, and ingenuity
  • laying down a solid base for an outstanding teamwork

Connecting and forming groups from different departments like developers, sales and marketing turned out to be the jackpot combination for impressive ideas. Sharing knowledge and different points of view gives every project a special touch of excellence. 

Reviving ideas

Here are the ideas and notes from our developers on their projects. 

Catch the Sound 2D Game

A game that recognizes and memorizes played sounds and picks emoji icons that represent that sounds.

Used technology

iOS

New technology 

Unity, C#

Notes of the project
Unity is a very powerful tool that can get you overwhelmed if you have never used it before and you need to develop a game in a very short period of time. Saying that mobile (iOS) to game (Unity) development transition is not intuitive at all. There are differences between IDE-s, paradigms and programming languages that cost us time:

  • Get familiar with Unity and to get a grasp of new concepts such as scenes, sprites, prefabs and cameras
  • Script oriented programming
  • Adjust UI for each screen size separately – in iOS autolayout takes care of that
  • PascalCase naming convention in C# for method names – in iOS we use camelCase

ColorPicker

A game that recognizes and memorizes played sounds and picks emoji icons that represent that sounds.

Used technology

iOS

New technology 

Android Studio, Kotlin

Notes of the project
We got familiar with Android Studio as an IDE and Kotlin as a programming language. Looking at android development through the eyes of iOS developers we noticed:

  • Easy to use interface builder along with relative layout.
  • Editing the XML directly feels responsive.
  • Relative layout is similar to stack views.
  • For more complex layouts our opinion is that constraint base layout works better.
  • iOS AutoLayout has a steeper learning curve.

Activity would represent one screen or one flow in an application. Similar to Coordinator in MVVM + C architecture. Further, it has its lifecycle methods. 

Fragments are components similar to ViewControllers, they encapsulate their own functionality, and their lifecycle is connected to the activity that created them. 

Intents are used for broadcasting or transferring data between activities.

Recycler view vs Table view
Implementation wise, basically the same although we have to say we prefer the UITableView because of its out of the box look and feel of simple scrolling. Recycler view looks like it would be more easily customizable than table view but then again iOS CollectionView provides numerous customization capabilities.

Kotlin

  • Very similar to Swift.
  • Also statically typed language.
  • For the simple use cases that we required the transition was seamless.

DECODEBot

A chatbot that creates Google calendar events, tells time and concerts for chat clients like Slack, Skype, etc.

Used technology

iOS

New technology 

Dialogflow (by Google)

Notes of the project
For creating custom chat flow, we had to:

  • Set Google Calendar events
  • Explore using 3rd party Web (REST) APIs
  • Explore scraping web

Further, we had to integrate the bot with server backend to write flows in code.

We used the platform Dialogflow:

  • ML supported NLP (Natural Language Processing)
  • Numerous integration points
  • Multidevice
  • 20+ languages supported
  • Extensions: Webhooks (POST only) and Firebase Cloud Functions

MagicPan

Identifying objects, face recognition, 3D models of objects, follow eye movements.

Used technology

Android

New technology 

iOS, OpenCV

Notes of the project
Unfortunately, this project didn’t work out that well.

We needed the whole framework even tho we used only 1% of it. Even there are a lot of examples to help you start, the research and learning phase cost us to much time so in the end, we didn’t manage to present the whole idea.

Rusimir

2D game created with unity and Facebook SDK.

Used technology

iOS

New technology 

Unity + Facebook SDK

Notes of the project
Unity is a cross-platform game engine with a built-in IDE developed by Unity Technologies. It is used to develop video games for web plugins, desktop platforms, consoles, and mobile devices.

The personal edition is completely free to use but it displays a ‘Made with Unity’ logo while your game starts. Yes, you can create and sell a game with the free version of Unity, without paying royalties or any revenue share. Please also be aware that the feature set of the free version is not intended for the production of professional games and interactive content.

Comparing to iOS development
A similar concept to attaching scripts to bodies inside a scene in Unity is when we have IBOutlet properties in iOS linked to elements in Storyboard.

Snacks

An app which helps you to easily create your shopping list.

Used technology

iOS

New technology 

Golang, MySQL, Vue.js

Notes of the project

  • Golang for backend
  • MySQL database
  • Has included templating, decided to use Vue.js instead
  • Database – MySQL with github.com/go-sql-driver/mysql driver
  • Integrated HTTP server and routing

Why did we use Vue.js for frontend?

  • Separated frontend
  • “Easy and fast” integration
  • Simple to use for simple stuff

Why did we use GO for backend?

  • Modern, similar to other modern languages
  • C-like: structures, pointers
  • Very rich in built-in modules
  • Interesting concurrency model (goroutines, channels)
  • Can be interpreted and compiled
  • Easy to use and learn

The winner takes it all

Munch was the result of a great collaboration between our Android developer Tomislav Tkalčević and our iOS developer Ante Baus. Give two men time to think about an app and they will surely come up with a food app idea.

Munch is a meal that occurs between lunch and dinner (mid-lunch or munch), around 3 pm. 

The winning app included three important values

  • technically challenging
  • innovative
  • created additional value for the user.

The Slack bot is still used by the entire DECODE team.

Munch

Slack (food) bot gathers menus from three different restaurants and calculates food for celebrations.

Used technology

iOS, Android,
React Native

New technology 

Python

Notes of the project
Technology used

  • App on Slack
  • Web hooks
  • Written in Python (Python 3.6.7)
  • Hosted on Heroku

Stats

  • Total < 600 lines of code
  • < 100 lines of code for parsers
  • ~ 170 lines of code for calculator
  • ~ 280 lines of code for bot

Slack set up

  • Bot: used to send messages to user
  • Slash commands: used to trigger action and pass parameters to serve
  • Event subscriptions: used to recognised events in slack

Python

  • Extremely Googleable
  • Easy to set up (at least on mac)
  • Let’s you focus on solution, not on technology
  • Easy to integrate with heroku

Heroku set up

  • Simple to set up
  • For Python
    • Requirements list (.txt file with list of libs and versions required)
      – pip install -r requirements.txt
    • Procfile (file declaring what commands are run by dynos on Heroku)

Conclusion

As a developer, you are sometimes stuck with a project. You get comfortable with the technology and daily tasks, and with the time passing by you seem to miss all the new stuff on the market.

We know it’s hard to just research and read about new trends in development without trying them out on a real case.

With our internal hack days, we want to motivate you to be curious and up to date with the latest platforms, languages, best practices, tools, etc. Even to try a completely different technology you are used to work with.

Technology is changing. It is changing reeeally fast and if you want to be a great developer -> start running.
Start to continuously improve your knowledge and skills.

If you want to become part of our team, take a look at our open job offers or contact us at jobs@decode.agency