Django People - An interview with Michael Bykovski
Following on from Michael's guest post on using Divio with exisiting containers, we asked Michael Bykovski to help kick us off with a new series of Django People where we share developer insights, tricks and tips and some personal views on all things Django and web development!
Could you tell us a little bit about your background and role at Scholz & Volkmer?
I have been working now for over 12 years as a software developer, quite unusual for a 25-year-old. I've been doing the "professional stuff" for 7 years. Currently I am working at Scholz & Volkmer, and I am the technical project leader for an e-bike customer that wants to integrate a shop system.
I try to adapt agile methods in our project team, which can be challenging, and in other teams I work with too. In a nutshell I try to share my insights and know-how as best I can at Scholz & Volkmer to deliver good, high-quality products and make great teams even greater!
What languages and development tools do you use in your day-to-day work?
What was your most recent Django project - can you tell us a little bit about it and the experiences building it?
My most recent Django project is the shop I mentioned. It's built with Saleor (a Django-based ecommerce system). I think Django is one of the most intuitive web frameworks out there, especially if you are new to web development.
It’s so simple to understand that it’s just fun using and programming with it. Also it comes with nice benefits, such as the automatic generation of an admin panel and migrations (which came with the version 1.6 as far as I can remember - I have been using Django for a long time!). My experience with building web applications with Django is still awesomeness on the highest level :)
Go-live dates can be stressful - they can move and often things might not be perfectly ready. How do you handle a go-live date when you know it's not all there?
The best way to reach a go-live date when you're just not ready? You don’t! I believe that when something is done, it’s done. If you try to compress the time of building a product you will have to lose something, and usually that means quality. I think it's better to be professional about it, come clean and say: “We can’t deliver with the required quality in the desired time”.
Don’t let others bend or distort your plan! You are the specialist and hands-on with code and know it intimately. The customer is paying for what you are doing and expecting a high quality product. In the long run, it's better to deliver quality and use a little more time than taking shortcuts and asking the customer to potentially pay more for every new feature, because the foundations were thrown together. Ultimately, this will make you, as a developer, really unhappy knowing the code is not as good as it should be, while the customer suffers.
Node.js + Express.. Python + Django or Flask - web frameworks seem to generate lots of passionate discussion amongst their supporters.. What’s your take on the discussions and the choices out there?
I think there should be a lot of discussion about the frameworks and languages out there, because every language and framework does things a little differently - for better or worse. These are things that will come out if people start to discuss around them. In the end, you will use the best and most comfortable language or framework to reach your goal. But never forget: times are changing and the languages and frameworks too, so stay up to date!
When it comes to Django as a web framework, what features are you using? Anything in particular?
I am still mostly using the same Django features I used 6 years ago. Models, views, URLs, translations, permissions and admin. These have all just improved over time. I just said “stay up to date” but this is exactly what I love about Django. It brings a core with batteries included and for all other “up to date” stuff like GraphQL, JWT or Social Login you can just use a Django plugin. Isn’t that a wonderful and loosely-coupled setup?
Testing is broad topic - everything from UX to functionality; how do you approach testing with your projects?
I develop a lot of backend business processes. Before I connect them to the views I write a single command class for a certain process, allowing me to test this class discretely with unit tests. After that I can plug it into a Django view with a Django form to validate the data.
Frontend tests are more complex because a template can have different classes and HTML output depending on the model state. If you really want to test this, don’t do it. Don’t even use snapshot testing with Jest… You will never look at the snapshot changes because you always will look at the rendered HTML in your browser. So better to test other stuff like business processes or data model handling in the frontend with Jest. It’s better to have a well tested behaviour than a falsy look ;)
How have the pain-points for Django developers changed over the years?
I think everybody has their own personal “pain-points”. When I started with Django my pain-point was to understand how I could implement this feature or fix that bug. There are many ways to accomplish the same thing and that can be both good and bad at the same time. After that I explored the ecosystem of Django and then I thought about best practices and so on. I think that it’s not Django itself that has any particular issues, rather it’s up to you as a developer to make the best out of it and apply it to your task at hand.
When it comes to cloud hosting, there a lot of choices. What are things you think still need improvement or are lacking in general?
I think that cloud hosting, as a whole, has a really nice movement towards being more friendly and usable. I like being able to bundle my application in a Docker image and to deploy it easily.
Django, in particular, seems to attract first-time developers. What do you think is the best way to get in to web development?
As I said Django is really good for newcomers. In my opinion future needs will be met by multiple languages and frameworks. As the world becomes more connected, there will be far more load and traffic to servers.
Languages like, for example, Golang or Scala are good choices for such high performance handling (just please not Java :). Also I feel Node.js is growing enormously, and I like the point that you don’t have to switch between frontend and backend languages, even if this is a secondary consideration.
So the best way to get in web development is to sit down and just start trying coding!
There are lots of developers conferences and meetup groups. Any highlights in your calendar? How do you stay current on new versions and feature releases?