Frontend Interview Series! Interview With Dawid Janiga

Here comes another interview from our Frontend department.
Read the story of Dawid Janiga, a Senior Frontend Developer and Team Leader who started at Netguru in August 2019.
This is a series of interviews with our developers who would like to contribute to our culture of knowledge sharing. Read more in the article below.
Did you have any tech experience before joining Netguru? If so, what was it?My first real-life use of software programming was building bulletin boards for my schoolmates. I used “Forum phpBB Przemo” with a vast amount of plugins, copied and pasted directly into the forum’s code. You can guess where the plugin went after updating the core. :)
I was ten at the time and so curious about how software works that the next year I created a few new bulletin boards and had a bunch of experiments written in PHP, JS, HTML, CSS, Pascal, C and C++. I was lucky enough to have a computer science student in the neighborhood who gave me a few CDs of materials from his college.
Everything you could download from instalki.pl and dobreprogramy.pl was on my computer, which led to my next experience - 3D editing and eventually music creation in FL Studio. Because of the latter, I opened a music forum (still phpBB with the self-made template) to be notified of new productions, DJ sets and samples. It was a great experience seeing new users signing up and how the tests on release stage end
One thing I’m particularly proud of is the small deployment script I wrote to mitigate the weak internet connection while deploying new releases via FTP. My ISP, Era BlueConnect, had a lot of outages and files often got corrupted. I divided the release into two phases: uploading and executing. The uploading part was responsible for upload-retry till the file was successfully pushed to the server, with a suffixed file name. The execution script renamed existing files to make space for new ones, and new ones were renamed to destination names.
In the next few years I worked part-time as a freelancer, building landing pages, CMS, bulletin boards, and local news portals from scratch.
My first full-time job as a developer was with GetResponse. I started working as a PHP developer, but quickly transitioned to Frontend. I had the pleasure of working on the Marketing Automation editor as a JavaScript developer. I learned a lot from well-seasoned team members and gained completely new skills like OOP and product engineering. The editor was based on MVC and had a few architectural challenges. The next project I led on Frontend was built on the then new React reality and it was a CMS with Trello-like drag and drop features.
After GetResponse, I changed direction from product company to software house. I had the chance to work with some amazing people at ThinkSmart, building a mobile social app in React Native, Node.js and AWS. There I discovered the power of CI/CD, processes and Google Apps Scripts. We started to develop MVPs in a matter of days. I then took a one-year sabbatical before joining Netguru.
What projects have you been involved with so far at Netguru?
Surprisingly, my first project in Netguru required Node.js skills. It was a chatbot engine. The goal? Tourists can get answers by asking the Tickerbar Chatbot questions. The flow of messages consists of >8000 messages and control instructions (send email, send urgent notification) in eight languages.
For the next few months I moved into FinTech projects – and discovered that even in 2020, managing complex forms was still a challenge. It taught me that abstract thinking is an underestimated trait. Why? The project consists of one main resource – inquiry with >120 fields. It might be tempting to shape the data according to UI design, but that’s not necessarily the easiest option. The fields are placed according to Steps and Substeps from design. And how does Backend handle those? By use of flat objects in fields. Frontend can benefit from this approach and could manage fields in a similar way. That’s why taking a step back to see the problem from a different angle is valuable.
With another one I created a landing page with transparent videos to showcase dynamic liquid windows. I learned how important it is to know design patterns and understand browser performance. Even on small projects.
What’s your favorite technology, and why?
TypeScript/JavaScript. Because of its interoperability and pace of change – it’s everywhere. If I want to build something in a browser, server, CLI, desktop, mobile, Arduino, you name it, your fridge - JS will work there. Is it the correct choice? It depends on the use case. :)
What would you like to learn in the next 12 months and why?
I have a strict roadmap, I have to admit. My bookshelf for the next few months:
- Domain Driven Design – Eric Evans
- Design It – Michael Keeling
- The Pragmatic Programmer – David Thomas & Andrew Hunt
- Software Architecture in Practice – Len Bass, Paul Clements, Rick Kazman
- Software Architect's Handbook – Joseph Ingeno
- Accelerate – Nicole Forsgren, PhD Jez Humble, Gene Kim
- Refactoring – Martin Fowler
- Design Pattern: Elements of Reusable Object-Oriented Software – Erich
- Gamma, Richard Helm, Ralph Johnson, John Vlissides
- Working effectively with legacy code – Michael C. Feathers
- Computer Science Distilled – Wladston Ferreira Filho
A few people asked for such a list in the previous months, maybe someone will find it helpful to have a reference.
Besides the above, my main goals for the next 12 months are:
- Apply Clean Architecture in practice
- Create 3D products editor based on Three.js
What do you consider to be the biggest lesson you've learnt so far (either from your success or failure)?
Relations in the team are more important than who’s right (especially while making Code Reviews).
Don’t let your ego drive your decisions.
Deep dive into the business domain you’re working on. Create trial accounts in competition companies. Subscribe to well-known figures in the domain.
If you didn’t learn something new from less experienced people than you in the last month – reflect on your mindset.
Don’t take part in meetings if you find your presence a waste of time.
What do you do for your personal development outside Netguru? What would you recommend to others (books, podcasts, courses, platforms, vlogs, etc.)?
I learn the best by doing. Implementing even small ideas allows me to learn by heart. Having real life problems to solve helps me understand the limitations of a tool or a library.
Examples of projects I’ve built to ensure I know the topic well or just for the sake of experiment:
- Wikipedia Map – To connect React’s declarative nature and imperative handlers via Mediator pattern. You can find interesting places from Wikipedia, located on the Google Map. GeoSearch from Wikimedia API is used.
- Mars Explorer – To build many instances of the same-shaped store in react-sweet-state. There are over 500,000 raw photos accessible for free on NASA servers. This puppy makes watching images easier by animating them as video in your browser. No, I didn’t get a one-way invitation to Mars for implementing that.
- Wikipedia Streams – To showcase how Factory pattern can be used with React components and to train usage of Server Sent Events. We discussed that project in the Frontend Architecture Area. The pace of the messages is real. They are dispatched from Wikipedia’s Kafka topics directly.
- Google Map Countdown GitHub - dawidjaniga/map-countdown: Display the countdown on top of the Google Maps – To learn how one can animate GPS-based paths as counters by using Google Map API.
I unsubscribed from all newsletters to focus solely on books on my shelf. I like Frontend Masters. I sketch a lot on a notepad and whiteboard. I have worked with the Pomodoro technique for several years now. I made my own implementation to turn off Slack notifications while being in the focus phase. (If you’re interested - GitHub - dawidjaniga/pomoguru.)
Books
- Clean Code – Robert C. Martin
- Clean Coder – Robert C. Martin
- Clean Architecture – Robert C. Martin
- Test-driver development by example – Kent Beck
- Software Architecture for Developers: Technical leadership and the balance with agility – Simon Brown
- Typescript na poważnie – Michał Miszczyszyn
Podcasts
- Better Software Design
- Elite Mentality
- Mała Wielka Firma
- Syntax
- Soft Skills Engineering
- Startup My Way
- The Daily Stoic
Oftentimes I poke around on GitHub, reading repositories to learn new patterns or to deeply understand how something works.