18.10.2021
Mikko Hämäläinen

Battling developer shortage with educational cooperation

Without today’s juniors there wouldn’t be tomorrow’s seniors. This very much holds true within any specialist field, but it still feels like the truth about healthy workforce structure has been forgotten in today’s knowledge work.

As a company that cooperates a lot with public sector organizations, it must be said that sometimes it’s exceedingly difficult to get newcomers to the software development field actually hired into projects. Project teams are picked based on CVs in close fought competitive tendering with winning bids invariably going to teams made up of 10 year veterans with black belts in coding. You can’t get beginners hired to gather valuable experience even if their fees were next to nothing.

The board of the Code from Finland association, lead by their chairman Janne Kalliola, laudably pointed out in their opinion piece in Helsingin Sanomat that strict competitive tendering criteria are exacerbating the developer shortage and are holding back the growth of the industry.

Even though experience is valuable and valued, the programming industry needs new skilled workers now more than ever. The way we are trying to affect the industry is through educational cooperation and by hiring junior software developers ourselves.

Cooperation with the Helsinki Business College

A versatile content management system like Drupal, which is aimed at large clients, requires a constant source of experts. Fresh software developers are often enthusiastic open source contributors, and their careers will benefit from Drupal’s large international community. Being an active open source developer could well act as a stepping stone to an international career in programming.

In Finland, Drupal programming education is offered by our longstanding partner, the Helsinki Business College. Our collaboration during the years has been varied: we’ve taught in their courses, coached teachers in the use of Drupal, organized company visits and taken in interns whenever possible. When things work out, we are happy to offer permanent jobs to the interns. Many HBC students have graduated to working life through us.

In January of 2022 we will take the next step in our collaboration as we become the cooperation partner for the React & Drupal Full Stack Web Developer study program at HBC. We want to take active part in familiarizing students with the everyday life within the software industry, as well as the Drupal community and naturally with us as a company.

As a partner we will help HBC to specify the practice project carried out during the studies, and I will work as the project’s product owner for the development teams. At the end of the study period we hope to snag as many skilled developers as possible as interns, which will hopefully lead to them becoming gainfully employed developers in the industry.

Maintenance work provides all-round experience

Even though the public sector’s attitude towards novice developers is hardly enthusiastic, competitive tendering shenanigans won’t be the end of anyone’s career. The comprehensive maintenance and small scale development services we offer are of key importance when it comes to getting junior coders employed. Most of our interns will find themselves under the care of our Magical Support team and will later be employed as part of the team.

We at Druid don’t consider the maintenance services we provide as a necessary evil but rather a significant source of our revenue. Over 95% of our clients move to maintenance at the end of an implementation project, and the amount of work done under the maintenance contract is often manifold compared to the original project.

Our multilingual and multi-skilled team is responsible for ensuring that our clients’ websites remain functional, secure, and up-to-date in terms of features. The technical skills required in these tasks range from the comprehensive knowledge of large Drupal systems to creating modern JavaScript and React code. Is there a better place for a newcomer to the industry to get a feel of the diversity of working life?

We at Druid have helped bring to life a number of success stories whose main star has been a motivated fledgling software developer. Those are the stories we yearn for. That’s why we want to offer a solid stepping stone to working life to as many people as possible.

Author

04.10.2021
Laurie Lim Sam

My internship experience at Druid

I started as an intern at Druid in June 2021. I didn’t really have any expectations for the internship, other than wanting some hands-on work experience in the field. Prior to June I had been studying to be a full stack web developer at Helsinki Business College.

I did the internship in Druid’s client support and maintenance team (also known as Magical Support), where we take care of system updates, bug fixes and continuous development for our customers. It was really nice that Pasi, our master of maintenance, trusted me to work on real-life customer websites and applications from the beginning.

Onboarding and getting up to speed

We ended up splitting the internship period in two parts, with a two-week break in July, because in Finland most people are on holiday that month. The first week with all the set-ups was a bit of a struggle, and that was the least favourite experience, but by the third week I had learned from my colleagues how to troubleshoot so things got smoother. I also understood that it’s normal that setting things up takes some time when you start a new job or a project. I thought it was just something that happened at school, so it was useful to understand this.

Having my colleague Joni with me at the office for support and guidance was a big help during my onboarding. I also got a training guide on the first day to help me settle in. Most of the maintenance team work remotely, but I got to meet everyone during our dailies. Daily meetings are vital to stay updated on what is going on and who is doing what. They bring a social aspect to remote work and enable tasks to be coordinated, while reinforcing accountability. Dailies also ensured that I got support for my tasks whenever I needed.

Learnings and observations

I was assigned tasks for a variety of clients and I got to see different project structures. I couldn’t have learned this at school. I was also happy to get to work on accessibility tasks which is an interest of mine.

Probably the biggest learning during my internship was that maintenance work is totally different from software development projects. At school we are used to building something new and creating things from scratch. In maintenance you already have so many customers and so many projects. It was definitely challenging to navigate everything, figure out where to search for what and see the big picture. But it was fun and interesting, too.

From my experience, Druids are nice, laid-back people who are easy to talk with. Everyone is trying to do a good job, communication is open and information openly available to everyone. I was actually surprised to see how transparently the company is managed. I had read about Druid’s organizational structure but it was cool to see that it’s not just talk. As a fan of dungeons and dragons, and geeky stuff in general, I found it funny how Druids talk about making magic, and to come across names like “spell” and “omen” while going through the company repos.

Overall, the internship was a good experience. I’m pleased that it turned into a job with flexible hours, which suits me perfectly since I still have some studying to do before I graduate.

Interested in internship opportunities at Druid?

Author

Laurie Lim Sam

Full Stack Developer
30.06.2021

Druid Tech Survey 2021: the technologies we use and like

At Druid we’ve decided to establish a tradition to keep a record of the technologies we use in our projects and to take note of the technologies we would like to use more in our work.

It will be inspiring to review statistics in the coming years and see what kinds of turns we have taken along the way in terms of technology stack choices on our quest to create top quality digital solutions. And it’s always interesting to look back on history to check what has become obsolete, what tech we have chosen instead and why.

We started this spring by conducting our very first tech survey. We asked our software developers about the technologies they are currently using and the trends and languages they’re enthusiastic about. The answers gave us a deeper insight into the range of technologies we’re using and what we think will stick with us in the foreseeable future.

Technologies we use now

Since the company’s foundation in 2012, Drupal has been the main technology we’ve relied on in our projects. It is still the case, as almost 80% of our developers are engaged in Drupal-based projects. Around a third of the developers build digital solutions using the Symfony framework.

When it comes to frontend, state-of-the-art Drupal frontend solutions based on Vanilla JS and jQuery, as well as building custom themes and templates with Twig, JS and CSS, are in heavy use currently in Drupal.

However, we see the growing importance of JavaScript frameworks and already use some of them whenever they fit the project goals. More than 65% of our developers work with JS based technologies. A quarter of our frontenders are currently involved in building and supporting the React Apps. Less often we use Vue and Angular.

To summarize, the most popular languages and frameworks we use today are PHP, Drupal, JavaScript, Symfony, TypeScript, React, Vue. But of course, regardless of the tech we use in our projects, the focus always lies on security, scalability, usability, accessibility, and high performance.

Technologies we would like to use – and to avoid

When it comes to personal preferences, we see a surging interest in JavaScript, both for backend and frontend parts.

Backend frameworks and languages

In backend development, some of us still see themselves doing projects with Drupal and Symfony. However, the number of people who would like to switch to JS based backend and serverless architecture has grown significantly, while interest in Drupal is slowly going down. Both serverless and headless architecture were mentioned in the survey as promising directions. API based solutions and ecommerce have also gained steady interest.

Frontend frameworks and languages

As to frontend development, the role of JS technologies is definitely growing in our current projects. React, Vue, and Angular have already become part of our business solutions. This is also reflected in the survey results. Interest in leading-edge React and Vue is strong among our frontenders while Angular has lost its former popularity. The survey also demonstrates a rising interest in TypeScript.

Things to avoid

The majority of our developers answered that they are quite flexible, quick to learn and ready to work with whatever suits the project best. But not surprisingly, they would rather avoid any obsolete technologies. Some are not enthusiastic about working with Drupal 7 anymore as it’s reaching end-of-life soon and a much better, up-to-date Drupal 9 version is already in use – and the upcoming release of Drupal 10 isn’t far away either.

Open source, open attitude

At Druid we want to make the digital world more functional with every line of our code – with open source and an open attitude, as our motto goes.

According to the survey, more than half of our developers are members of online developer communities, and some of them contribute to Drupal or at least are active members of the Drupal community. In addition, half of our developers said they participate in meetups, hackathons or webinars.

We have always been focusing on building reliable code and high-quality, long-lasting digital solutions that add value to the customer’s business. The right choice of technologies is necessary to deliver a good product – but technology as such is never the priority, customer needs are. And those needs guide everything we do.

PS. If you have matching skills and interests, take a look at our career site. We are hiring 😉

Author

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.

07.05.2021
Mikko Hämäläinen

The road to self-organization

Self-organization is not a new concept in the software business. Self-organizing development teams have been a part of the discourse within agile software development for about twenty years now. Could the same sort of self-management be implemented at an organizational level? What sort of secrets and stuffy policies prevent having transparency and complete control of your own work at every level of an organization?

Everyone who’s ever tried delegating knows that it is hard to relinquish power, and that your own vision of the perfect end result for the task may differ from the vision or execution of the implementer. But even the worst micromanager will at some point realize that you can’t control everything. Particularly within specialist fields the greatest understanding of the best working practices, or whether the work at hand is even relevant, is with the expert working on the task and not with the management.

If we start off with the basic idea that you end up having in your payroll people that are in full possession of their faculties and who want to succeed at their work, where should you draw the line concerning authority? Can people decide for themselves what tools they use, what policies they follow on projects, when they take their holidays or what benefits they can enjoy?

Transparency is a prerequisite for working together

In the presentation I held at DrupalCamp Finland + Baltics (starts at 42:11) I went through how we have developed our organizational hierarchy and decision making processes here at Druid. We are a company founded by five owners, most of whom still work on every day “menial work”, which brings its own aspect to the company. For us it has enabled the development of a strong culture of self-organization.

My own experience has taught me that the biggest obstacle for self-organization is the lack of transparency. The company’s financial situation and projections are either only known by few or are too obscure to be of any use in the decision making process. Some of the information may be confidential for a good reason, but access to some of the data seems to be limited purely due to tradition.

Here at Druid the aspiration towards transparency has been built-in for the whole of our existence. We have conducted varying experiments and have gradually learned what works and what doesn’t. The biggest epiphany has been that raw data does not a happy druid make; if decisions are to be based on information, you will need interpreters for that information on every level of the organization. When systems can’t produce comprehensible data, you can shift some of the responsibility of clarifying that information to these interpreters.


Teal and self-organization at Druid

In practice, self-management is a very labor intensive management paradigm to implement. It requires actual shared responsibility, transparency and leaving your ego at the door. In addition, adhering to laws and directives can create headaches. Along the years we’ve experimented with different models of management and have met varying degrees of success in self-organizing. Now, in the latest effort to develop our organization, we’ve explored the Teal philosophy and are steering ourselves in that direction.

Teal is an organizational model introduced by Frederic Laloux in his book Reinventing Organizations. The model dismantles traditional power hierarchies and structures, allows for self-organizing with full responsibility for your own decisions and lets you be yourself, an autonomous human being, at the workplace.

Swarms, advice and conflict resolution

Our Teal organization is not completely without hierarchy. But instead of power hierarchies we have contextual hierarchies. Structures are created and removed according to need. For example, those of us that are interested in hardware acquisition can form an ICT swarm and start asking for bids on new phones or computers. If the swarm’s enthusiasm abates or if its goal is reached, the swarm ceases to be. The swarm commits to a certain goal and is responsible to the rest of the organization that it will provide value.

However, it is not practical to form a swarm for every decision. That is why we make use of an advice process. Each druid can, when identifying an issue, make a decision to fix it. The decision maker is expected to first seek advice from those affected by the issue and also the experts on the area the decision pertains to. The purpose, however, is not to reach a consensus: the power, but also the responsibility for the decision, is with the decision maker.

Getting others involved, and the fact that everyone is acting as themselves at the workplace, inevitably also leads to conflict. In the absence of a supreme arbiter, conflicts within the organization have to be settled in other ways, and we have a process in place for just this. It should be noted that conflicts should not be viewed as insurmountable obstacles but as learning opportunities.

We are in no way claiming to be a Teal organization through and through. There is still a lot of work to be done; old structures need to be relinquished while still keeping everything under control, transparency needs to be constantly increased, and people need to be inspired to take on the challenge.

We, however, are firmly on the road to becoming a teal organization, and are genuinely willing to give it a chance in the lean spirit.

PS. If this sparked your interest, you might want to take a look at our career site to see what we have to offer.

Author

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