17.05.2021

8 things we learned at Druid

Last week we said goodbye to our wonderful interns Florence and Bea. During their four month internship with us, they built a demo application with JavaScript for car repair shops and their customers – and did an absolutely brilliant job.

The app lets users choose the nearest car repair shop, book an appointment for car maintenance, keep in touch with the shop through in-app chat and see the progress stage of their car as it’s being repaired. The app was built with the user in mind, focusing on the user’s convenience.

Before Bea and Florence embarked on new adventures, we asked them to write about their learnings and experiences from the project and beyond. It turned out they had a lot to share – so let’s dive right in!

1. Progressive Web Apps (PWA)

PWAs have been in the app ecosystem for some time and you may have probably used one without knowing. They are web apps with an enhanced capability in modern web browsers.

Among many of the features we discovered are its installability, offline mode experience, linkability, native-app feel, re-engaging nature and a single codebase that can be used on different devices. It was interesting to know that companies like Uber, Trivago, AliExpress, Spotify, Starbucks and Pinterest are already using PWAs as their web service platform.

Although it was a new concept for us, a lot of research enlightened us on how we could apply it in the project we wanted to build. We built a PWA with Create React App (CRA) which was incredibly convenient because CRA has a template for building PWAs.

2. Teamwork

Team synergy was by far one of the most important factors that influenced the outcome of our project. This encompasses a lot of factors ranging from setting project expectations to good and clear communication.

We tried as much as possible to be on the same page in the building process of the project. From the technical perspective, we set up a system where we could review each other’s codes before merging changes to our main branch. That meant we had to ensure we were writing readable and understandable codes. In order to ensure uniformity in our codebase, we had rules set in ESLINT.

After working independently to solve complex problems for more than half-way into the internship, we decided to try pair coding at some point. To be honest, we wished we had started with pair coding much earlier, because we realised how knowledge sharing contributed to arriving at solutions quickly.

Home office. Luckily our internship wasn’t an entirely remote experience as we were able to work in the office as well.

3. Who needs a server these days?

You may have heard about “serverless backend”, which means running your server-side code without having to maintain your own server. The solution is tempting, because it cuts the costs (on-demand, so you don’t pay for idle time of the server), it’s easy to scale and lowers administrative overhead.

AWS Lambda is a popular choice, but managing service discovery, API gateways, and keeping your app and the functions in sync can be overwhelming – that’s where Netlify functions come to the rescue. We chose to use them in our project, because they are a make-it-easier layer over Lambda functions, which means we could use them without an AWS account; also, keeping everything up to date was a breeze.

With the serverless functions in a correctly named folder in the project, we were deploying our React frontend together with the serverless backend at the same time and Netlify did the dirty work handling all the rest. Add to that the continuous deployment straight from our GitHub repository, including previews of pull requests updates, and you got yourself a recipe for painless deployment handling!

4. Mercure for real-time features

For our app we needed real-time communication to create our in-app chat and to update the UI of the end user when the admin changes the state of the user’s appointment. We decided to use Mercure, an open protocol not using Web Sockets, but instead built on top of HTTP and SSE (Server-Sent Events).

With the Mercure Hub set up (using Docker image for local development and deployed to Druid’s server for production), we needed to do two things in our app: publish updates and subscribe to them.

Publishing happens when someone sends a new chat message or the admin changes the appointment state – a regular POST request is sent from our frontend to the serverless backend, where the data is saved to the database and Mercure update is published to the Hub.

Then the Hub’s job is to pass this update down the correct channels, so that only the users subscribed to it get the information. Subscribers are browsers; for example when an end user opens their appointment view, the app subscribes to updates about their appointment (change of stage or price estimate) and to updates of their chat (and only theirs, so that they don’t get somebody else’s messages by mistake).

To subscribe, we used EventSource, which is kind of a keep-alive connection to the server (the Mercure Hub in our case) and differs from Web Sockets in that EventSource is one-way communication, it can only listen to updates, not send any – which is all we needed.

In-app chat

5. Web push notifications

Like any new feature that was implemented without prior knowledge of how it should work, implementing push notification was mostly learning by doing. Push notifications are messages sent to user’s devices from a website via a browser. And with the offline feature of PWAs, users do not miss notifications even when they are not online.

Looking at our app’s use case, push notification capabilities were useful for notifying users whenever there was a change in information. For eCommerce and marketers it’s an amazing way to re-engage with web visitors whenever there are new products, releases, etc. It was relevant to build this feature, especially as PWAs are becoming more popular and being supported by more browsers.

6. User experience

We needed to keep the end user in mind as we worked on our app. Have you noticed the unexpected shifting of elements like videos, buttons or fonts on a web page while the page is still loading? Exactly, that can cause a poor user experience and is referred to as Cumulative Layout Shift (CLS). It’s a Google metric which is used to measure the user’s experience on a web page.

CLS is usually a good way to detect coding issues which could be resolved to improve usability on your site. These may be tiny details that could slip through during development and may seem “irrelevant”, but they definitely count! What is the point in building an app that lacks usability? Knowing about CLS and its importance highlighted user experience as an important skill to have as it makes us better developers.

Admin side

7. Scrummy Scrum

Agile methodologies have become the default way of working in the software development field, so to nobody’s surprise we used the Scrum method in our project. We learnt about this style at school, but only working on a long-term project unveils the true power of Scrum.

Thanks to the regular feedback sessions in retrospective meetings, with every iteration there were less conflicts or misunderstandings, with every sprint we worked better and more efficiently. For every ticket in the backlog we assigned points to estimate the time and effort needed to complete the task, which helped us understand deeper the goals, expectations and each other’s views.

We also made mistakes like not deploying every sprint – it came back to bite us in the last few weeks of the project as we ended up with several issues accumulated in production. Debugging and understanding which error is caused by which part of the code failing was unnecessarily complicated, so lesson learnt!

8. Teal is the new black

There’s so much more in the management philosophies landscape than the traditional, hierarchical way of big bosses, small bosses and the workers. Druid is slowly but steadily undergoing a Teal transformation, aiming at a flatter management structure.

Many tasks at the company are being taken care of by swarms – a group of people interested in the issue or topic around which the swarm was formed. The doers declare their readiness to put time and effort into the subject, the helpers can offer a little less time, and the followers are interested in the works, but for one reason or another can’t promise much help.

In our time at Druid we had a chance to observe among other things the work of the salary week swarm who took care of designing and executing salary negotiations. The best thing about swarms is they can be formed as issues or tasks arise, and torn down when they solve what they were born to do or when they become inactive and die out.

Another part of the Teal way that we found interesting is the advice process helping in decision making. When there is a decision to be made, one person volunteers to be the decision maker and asks for advice, especially from people directly affected by the decision and from experts on the topic. Others can then give advice (not their opinion, but strictly advice), but the final choice of course of action is made by the decision-maker – that also includes full responsibility for the outcome.

Druids in Greece
25.11.2019

Junior developer, how coachable are you?

Technology is an exceptional field that changes day by day. New techniques are continuously emerging, which requires us developers to stay alert and keep ourselves up to date. Largely because of this, I believe coachability is the most important attribute for a junior developer at the training stage of his/her career.

Being coachable means a capability of being easily taught or trained to do something better. Coachability is not a technical skill but an attitude. It is the ability to control your personal emotions to handle criticism and pressure from your coach without losing your motivations and positive spirits. 

Why is coachability important for a junior developer?

Improving your coachability is not only beneficial to your coach but also has a huge number of benefits to yourself. For example:

  • Training and learning progress can be smoother and faster.
  • The training experience feels more pleasant.
  • You will see and understand your strengths and weaknesses more clearly.
  • Accepting the feedback allows you to enhance your training and improve your ability to change.
  • Coachable employees are more productive and efficient.

What is the difficulty in becoming more coachable?

Do a simple research and you can scroll down numerous ways of becoming more coachable, such as willingness to learn, listening to feedback, respecting your coach…etc. But in the end, it is all about your ego. The most important thing is to learn to leave your ego behind. 

Because your ego is always there, here are some suggestions for you to overcome it:

  • Accept that you are not perfect – you are still at the learning stage, be proud of that. Being embarrassed by your mistakes, which are acceptable as part of your learning process, just makes it more difficult for you to confront them. 
  • Even when you don’t agree with your coach, try not to be offended. Instead, try to be patient and listen to what your coach is saying, not how he/she is saying it. 
  • Try positive self-talk when your ego feels hurt, it’s an encouraging method that can push you forward.  
  • Trust your coach. Believe me, they are the ones that really, really want us to succeed.
  • Remember your goals and remember why you’re learning.

As a junior developer being coachable is an essential attitude. You’re willing to listen to feedback, willing to receive constructive criticism, willing to improve your performance. However, improving coachability, like any other abilities, requires long-term effort and appropriate guidance. 

Coaching culture at Druid

I started my developer career five months ago at Druid and the coaching culture here has impressed me. The coaches spend time to explain their methods and most importantly, they listen to you. You have a chance to share your opinions and get feedback on them.

 “You can also propose your solutions, maybe yours are better than mine”, says my team lead Petri. This is an example of how to make people more coachable. He gives trainees the opportunity to share their thoughts and takes them into consideration instead of forcing others to think like him. This, in my opinion, prevents from opposing the coaching and having negative thoughts towards the coaches.

At the end of the day, if you are a coachable junior developer (or have a thoughtful coach), you will go home with peace of mind without any work related stress, I promise you!

Author

13.01.2017

Drupal IronCamp – A peek behind the scenes

Have you ever wondered what it takes to organize a Drupal community event? How is it done, what happens behind the scenes? Now is your chance to find out! We hooked up with Zsófi Major and Petr Illek, two of the main organizers of last November’s Drupal IronCamp, to find out about the joys and challenges of event organizing. Some good tips coming up as well!

Where did the idea for the event come from?

Zsófi: At Drupalaton 2014 in Hungary, at one of the social nights, we started to talk about how nice it is that people from Eastern Europe come together to DrupalCamps, and how many great, great talents we have in the region. We also talked about how nice it would be to show this to the world, and to start building a community between different nations, not only in Eastern Europe. Then came the DrupalCon in Amsterdam where I pitched this idea at the Community Summit, and the rest is history. 🙂 

Petr: In Amsterdam a group of people from various Central and Eastern European countries brainstormed about making DrupalCamps more accessible for people from that area. Local camps are usually too small or short, and with lower budgets to attract big speaker names. The name IronCamp was born very soon, as it was the common denominator for all these countries.

Zsófi: Yes, the name was a good one. IronCamp was the only suggestion that came up at the summit during the first talks, and even if we agreed to have it as a ‘working title’ for the moment, during the Con it turned out that people liked it. The countries that we wanted to involve in kicking off the event have something very important in common: we all have a history with the Iron Curtain. Even nowadays it is still a sensitive topic, but we realized that this is what we want to achieve with the camp: opening the invisible borders and see so many great friends together. 

Can you tell a little bit about the planning process?

Petr: We started the work just after Amsterdam, with the aim of having the first event in Budapest, but sadly we had to cancel it a few months before. It was a valuable lesson though. We then had a few discussions at DrupalCon Barcelona and also at DrupalCamp Vienna and agreed to have another go, this time in Prague. The planning restarted right after Barcelona, but the main focus with weekly meetings was from January/February 2016.

Zsófi: Personally, I was pretty much involved in the things around the camp from moment zero. It wasn’t easy, but starting a brand new DrupalCamp can be very challenging, and we knew that. 

How many people were involved in the organizing? How did the team work?

Zsófi: On our Slack channel we have around 40 people, but we knew that most of them didn’t want to be involved in the actual organizing part, and I think having 10 people in the core team is mostly enough. We learned a lot about how to delegate tasks and how to trust people with getting the things done. What I find hardest when it comes to event organizing is that the level of emotional involvement of people is not always obvious and of course cannot be the same all the time for everyone. This is why the team members need to figure out the optimal way to work together, as not everybody is interested in fixing bugs on the website or managing social media.

Petr: We had people from different countries in the main organizing team, with varying levels of involvement: Czech Republic, Serbia, Hungary, Slovakia, Romania, Poland, Macedonia, Spain, the Netherlands. We didn’t set the responsibilities very strongly, they just automatically fell in place (we will need to improve on that the next time).

What was fun or interesting about organizing this event?

Zsófi: For me, working together with this team was the best part. I think having an international team is great, because everyone has a different point of view, everyone is sensitive to different things, and it was interesting to see how it all comes together in our hands. I felt very sad when we had to cancel the first event back in 2015, and then seeing it happen by these wonderful people was an awesome feeling. And I can’t wait Belgrade in 2018!

Petr: I also enjoyed being part of an international team. And the fact that it was my first real organizing experience made it all interesting. I really liked the moment when the attendees started to buy tickets and I realized that all these people (220) came to Prague because of something I helped prepare. The names of our session rooms (Krteček, Švejk and Cimrman) were selected because they are among the most well known Czech fictional characters.

The dream team! From up left: Floris van Geel, Mojzis Stupka, Vasil Grozdanoski, Radim Klaška, Călin Marian, Miljenko Vujaklija, Zsófi Major, Petr Illek, Miro Michalicka, Rubén Teijeiro

What did you find challenging?

Petr: It was a challenge to organize the event by communicating through hangout meetings, sometimes with bad connections. 

Zsófi: Yes, it was pretty challenging. But for me, the biggest challenge was to coordinate and help coordinate this size of a team at the same time. We met several times during the year, but never intentionally. When there were DrupalCamps or Cons where most of the team was together, we sat down and talked about what’s next and how to achieve our goals. But when you have a team of 10 remote people, who have their own lives, family and work, and doing all this voluntarily, it’s a different thing. But I think we did a great job, and learned a lot in the process.

Was there anything that surprised you?

Petr: The support from the international community during preparation. It ensured us that we are doing a valuable thing. And then of course the mainly positive reactions of attendees during and after the event.

Zsófi: I agree with Petr. The support and the help we received in the past two years is incredible. We received a lot of financial support as well which of course was a huge practical help in bringing the event together, but for me the general feedback was everything. Everywhere I went, all the people I talked to, everybody was open and interested in what we were doing, and it gave us reassurance that what we do is a really great thing and good for the Drupal community as well. 

From your perspective, how did the event go?

Petr: We had a scenario for the event days, so everybody knew where they needed to be and when. But obviously we forgot a few things, and there were some unexpected situations as well (e.g. you enter one of the session rooms and discover a teacher with some students on their usual class…). But after the hectic first few hours we settled down and sticked to the plan more or less successfully. 

Zsófi: Organizing an event can never really be scripted. You can have a scenario, a list of things you are supposed to do at a given time, but of course when you are actually there at the venue, it turns out that things take more time, require more assistance, and anything can come up that you didn’t expect in advance. It’s a great way to gain a lot of experience that will make you an expert of handling those unexpected situations. Of course we all have THE ideal event in mind, and we aim to achieve that, but we also learn how to let dreams go, and how to bring the best out of what we have.

Do you have any good tips for other event organizers?

Zsófi: Learn how to delegate and trust people. Learn from your failures and try to understand how you can make it better next time. And keep observing yourself to make sure you don’t burn out. 🙂

Petr: Make a schedule early in the project and stick to it. Split responsibilities among the team and stick to them. If I’m responsible for session recordings for example, it doesn’t mean I need to handle everything related to that. Other team members can work on it too, even more than me. Responsibility just means overseeing and keeping track of the status, and being available for other team members’ questions. Also, choose a head decision maker. Democracy is nice, but there are situations where somebody just needs to make a final decision, due to time pressure for example.

What was great about the event? Why should people attend the next IronCamp in Belgrade in 2018?

Petr: It was and it will be the best Drupal event of the year! I think we have created a fun, open and accessible event for everyone, not only Drupalers, mainly from the region. There were sessions for beginners and masters alike, as well as job speed dating for connecting companies with open positions with developers looking for a job.

Zsófi: The professional part of the event is very important – we had great sessions and I’m very proud of our lineup of speakers. What I found very good at IronCamp was the people who attended. There were so many people from different countries, areas of expertise, knowledge, age, etc, and it was great to see that they were brought together in Prague by Drupal. I think our event was a great example of  ‘come for the software, stay for the community’, and I know that this will be the same in Serbia too. 

What’s your motivation for organizing Drupal community events? Why are you doing this?

Petr: This is my way to contribute to the Drupal project on the international level, as I cannot give back directly by coding a module or patch, and my presence on the local drupal.cz forum is – well, just local. The other thing is, it’s very refreshing to step away from 8+ hours a day of Drupal and do something else (for another 8+ hours!): communicating with people, taking responsibility for certain parts of the event, doing design and DTP for the camp etc.

Zsófi: The Drupal community really is great. When people ask me why I do this, working for months to bring a few dozens of people together for a few days, I always say that because I love seeing these people together. We all have our own lives and stuff, and even if we stay in touch between events, those few days when we can talk and laugh together, hug each other or just sit next to each other at the sessions or in the sprint room, these really give all of us some kind of a power boost. And I find this incredible.


Druid was one of the gold sponsors of the event.

Druid champagne
21.12.2016
Mika Suominen

Love and limits for a four-year-old

It’s been over four years since I founded Druid with a bunch of great guys. There has been growth, ups and downs, more growth, breakthroughs, mistakes, success, failures and learnings. Definitely good times with great people! As the year is nearing its end, it’s a good opportunity to stop for a moment, take a look back to review what we’ve achieved and learned, and to plan the next steps.

Lesson 1: One man show (14 developers + me) leads to a mess 🙂
Solution: Get more non-developer resources and take your time to learn how to delegate.

Lesson 2: A “few men’s show” doesn’t work either.
Solution: Come up with new ideas, experiment, fail, learn and iterate. Set up structures, roles and processes, create a support organization and identify the bottlenecks. This is what we’ve been building for the last 1.5 years. 

Our latest experiment is the newly released team structure. It seems to be working very well! There are still many things to improve, but the big picture and the foundations for the future are now laid. The organization is not dependent on any single person anymore, yet every single person is needed.

As one of Druid’s founders and the builder of its growth, I feel my job as the CEO is done. Now that the company has reached its current state, I’m more than happy to hand my baby over to new hands. As of January 1, 2017, our current Vice President Mikko Hämäläinen will be the acting CEO of Druid. I will be the Chairman of the Board, and I’ll also continue to be responsible for sales and partnerships at Druid.

Our defiant four-year-old needs not only love but some additional limits as well to be able to blossom. It also needs an optimal leader in order to do so. With a new leader comes a new phase. It will be a phase of scaling our business and keeping up the good work on required improvements. There’s plenty of stuff to do with fixing our processes and creating sufficient support functions. We want them to be as awesome as our culture and technical expertise! I trust that Mikko is the right person to drive these developments and our day-to-day operations with his efficient and systematic approach.

I want to thank all my fellow Druids, our customers and partners for the past four years – the most amazing years of my career so far. It has been a pleasure to take this journey with you guys.

Merry Christmas and a Happy New Year 2017!

Mika

PS. Goals can be manifold. To me, the ultimate goal in some sense was a Druid champagne. This part of my legacy is reality now! So yes, you can consider my job done here 😉

Author

Mika Suominen

Board Member