[PYTHON] A story about adopting Django instead of Rails at a young seed startup

Nice to meet you, my name is Matsunaga from LOGICA Co., Ltd. I chose Django to develop a new product, but since Django is a beginner, I wanted to know what you know, so I set up an Advent calendar. Thank you.

We haven't done anything technically unique yet, so we decided to post our own experience.

Adopted Django at a young seed startup

While the popularity of machine learning has increased and the awareness of Python has increased, I have the impression that the image of "Python = for calculation" is spreading. Also, if it is a web system, Rails is very rich in programming learning services such as Techcamp and Progate, so I think that the number of people doing Rails is increasing especially at startups (the number of samples is not large) But)

In the case of startups, especially companies where very young people like us are founders, there are many cases where there are no engineers with work experience, and ** ease of learning ** becomes very important. I think it's natural that Rails and PHP frameworks (not familiar), which have a lot of information in Japanese, are often selected.

I think there are many (?) Venture companies that use Django in Japan, but I don't think there are many young venture companies. While many famous companies have adopted it overseas, I feel that I have not obtained citizenship in Japan.

This time, I've summarized why I chose Django instead of Rails in this situation, and what was good and bad about choosing Django as a young seed startup. ** * This article doesn't describe Django's technology, performance, design, etc. ** ** * It may be limited to young people and startups in the seed period **

It's a very niche article, but if you like, please stay with me until the end.

Our current situation

At our company, travel is a trip to relax, but there is too much research, especially for the problem of "hotel search / reservation is cluttered and troublesome", a cross-search site for hotels is used to simplify hotel search. I am developing. It is not something like Jalan or Rakuten Travel, but a comparison site similar to Travelko-chan and trivago.

sakutabi.com

I released it a few days ago, but I haven't finished bug-crushing and ** a huge amount of warm manual input ** at all. (In order to reduce the amount of comparison, I tried to automatically identify different plan names and room names on each reservation site, but it was not something that could be ruled, so I will do it manually ** ) ~~ Not when writing an Advent calendar ~~

Currently, we are developing two separate Django projects, the crawler that acquires vacancy information and the comparison site itself. ** The company is still alone, so I am also developing it by myself.

My level at the start of development

Requests / requirements for technology selection

Hiring does not mean that the number of developers will increase dramatically, and since the number of developers is small for a while, we emphasize that it is ** easy ** anyway.

  1. I want to unify the language and framework
  2. There is a management screen (or you can make it immediately)
  3. I want to keep new learning costs as low as possible

The first is the issue of head switching and learning costs. When you choose to write the crawler (and management screen) in Python (Django) and the media in Rails, it makes you feel that it is dull to absorb the difference in the migration definition or write a separate model file. I had a feeling that I wanted to reuse it. I feel that the dual wield of the full stack framework should not be done at the stage of one or two developers before reusing it.

As for the second management screen, even if I chose Rails, I could manage with gem, so I didn't care so much here.

Regarding the third learning cost, if I am alone, ** study = stop development **, and if I am not accustomed to it, I will waste time, so I will use the language and framework I am accustomed to. It was an absolute requirement to use it. Also, if you use two frameworks, the amount of learning will increase, so I thought from the beginning that I would use one.

** As a result of considering the above three conditions, I chose Django. ** **

Why I chose Django

Since it is a startup in the seed period, there is a high possibility that what you make will be erased by pivoting etc. **, and since it is a major premise that I, the founder, will also participate in the development, ** I am the easiest to write * * Prioritized that.

Personal reason

As a result, Python was the overwhelmingly familiar language, so I chose Django, which is a Python framework and also has a management screen. I'm more used to Rails, but I wasn't a seasoned Rails engineer either. ** I didn't technically compare Rails to Django to make it Django. ** ** Another reason is that ** crawlers are used to writing in Python ** (I used to look at crawlers a lot in my previous job).

By the way, after deciding to unify to Python, I wrote a deployment script with fabric and cuisine, so everything except the front end of the media is made of Python. If you use Django for everything, it's easy to use some deployment scripts.

Also, analysis is easy because Python has a complete library. I haven't written a gorigori analysis script for a while, but I think it will be a little easier for analysis work if you create a batch etc. using Django's ORM in a Django project.

Reasons for hiring

Although the number of Rails engineers has increased, I don't think that the number of engineers above a certain level has increased rapidly. Since the probability of an engineer decreases when you are touching Django, and because there are few startups that adopt Django, it stands out by itself, so I think that the difficulty of hiring will not change significantly between Rails engineer and Django engineer. I did.

However, this is ** all on the premise of mid-career recruitment, and I am making a big mistake **, so I will write about it later in this article.

What's good about Django

It's all Django, so it's easy without having to switch heads, and it's easy to use the code. After that, it is easy because you can see the result of crawling on the management screen. It's a full stack, so if you look up the features you want, you'll find them, and since the documents are extensive, it's not a problem for now. ~~ Not a Django-specific advantage ~~

Things I'm having trouble with Django

Well the main subject (laughs) ** Actually, I have no technical problems so far w ** That's because the amount of code is still small and we are not at the stage of squeezing the details. It's a project I made recently, so I don't have to upgrade the version of Django, and it feels like "Oh, the full stack framework is convenient."

However, there are some points that are subtle for young startups in the seed period. The "I made a big mistake on the premise of mid-career recruitment" that I wrote earlier is included in the following contents.

1. 1. Difficult to hire an intern or part-time job (maybe)

I said it might be difficult to hire because I was only looking for people with work experience, so I wasn't actually looking for an intern or part-time job with no Django experience.

Young seed start-ups often hire people of the same generation due to financial problems and acquaintances **, and part-time jobs due to hard work and ** the importance of "doing anything" ** I think that internships are often adopted. In other words

Skills at the time of hiring >>>>>> Catch-up speed & culture fit

It will be. From that point of view, Django is by no means beginner-friendly (details below), so I think it will narrow down the hiring options for young seed startups w **

Compared to Rails, Django has less teaching materials that are easy for beginners to understand ** and ** less information in Japanese **, so for programming beginners ** "English" in addition to "unfamiliar programming" It will be a pain **, and I think it is quite difficult to start from a complete beginner. (Whether or not a complete beginner should do the full stack framework first)

Also, I don't think there are any Django experienced people in the same generation w (I'm 24 years old) In the first place, Rails knows that he is a beginner engineer, but he doesn't know the existence of Django. I think even Python is suspicious. Even if you know it, I think you read "Dijango" (source is me)

Since there are few users regardless of generation, the number of people and places where you can easily ask questions is limited, and as a result, the ability to read documents (English) and source code becomes relatively important. However, ** reading documents and source code is natural for engineers **, so for those who want to become engineers, I think it's better to start with Django because you can get into the habit.

In any case, ** I think it takes more energy than starting Rails **

However, I also think that Python is a good language that is easy for beginners to study.

2. High research cost

Although it partially overlaps with the first point, I think that the research cost is high because there is little information in Japanese, there are few (domestic) users, and there are few study sessions.

Especially in startups where young people are not always highly skilled, it is very nice to find an example immediately when you are wondering "how do you do this?" Fortunately, Python and Django aren't minor in the world, so there are plenty of libraries and more. However, I don't think it's a good start-up to worry about not knowing them or how to implement them. It's easy to find English, so it's more difficult to focus on English than "I can't find it."

Regarding study sessions, I think one reason is that there is no religious war like Javascript frameworks and tool selection, and there are not many topics to discuss in the first place. It may have something to do with the idea of Python.

Also, although it is a selfish image, there is an image that people who use Django for business do not often come to study sessions in the first place w

I'd like to have a place to share more knowledge of development using Django, so if the company has a little margin in development ability, Django (not limited to Python framework) meetups and study sessions I also want to do it. We may be happy to speak to companies that use Django.

Summary

Good thing(?)

Bad things / concerns

** If there is a person other than me who is the main developer at the start of development, I probably chose Rails w ** I chose Django ** I am the only developer at the moment ** and the crawler is Python The ** personal condition ** that I was accustomed to writing in was the biggest.

I wrote about various technology selections, but in the first place it is important for startups to make quickly and deliver value with ** products **, so stop thinking deeply and do your best in development! !!

P.S. We are also looking for friends, so please contact us if you are interested in it! https://www.facebook.com/masaru.matsunaga.9

Recommended Posts

A story about adopting Django instead of Rails at a young seed startup
A story about custom users having a sweet and painful look at Django
A story about implementing a login screen with django
A story about changing the master name of BlueZ
The story of a Django model field disappearing from a class
A story about clustering time series data of foreign exchange