[{'True': True, 'False': False, 'None': None}, {'csrf_token': <SimpleLazyObject: <function csrf.<locals>._get_val at 0x7ff6749c1af0>>, 'request': <WSGIRequest: GET '/blog/pilot-story-commercial-aviation-web-development/'>, 'user': <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7ff6748ddf40>>, 'perms': <django.contrib.auth.context_processors.PermWrapper object at 0x7ff67489c0a0>, 'LANGUAGES': [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')], 'LANGUAGE_CODE': 'en-us', 'LANGUAGE_BIDI': False, 'MEDIA_URL': 'https://dh57sjtl5a41q.cloudfront.net/media/', 'STATIC_URL': 'https://dh57sjtl5a41q.cloudfront.net/static/', 'TIME_ZONE': 'UTC', 'messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0x7ff6748d5a30>, 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30, 'ERROR': 40}, 'DEBUG': False, 'NB_FREE_QUESTIONS_IN_TRIAL': 10, 'SOCIAL_MEDIA_URLS': {'facebook': 'https://www.facebook.com/A320Expert', 'linkedin': 'https://www.linkedin.com/company/a320expert', 'instagram': 'https://www.instagram.com/a320expert/'}, 'GOOGLE_ANALYTICS_KEY': 'UA-187317566-1', 'SHOW_BLOG': True}, {}, {'object': <Post: A pilot story: from commercial aviation to web development>, 'post': <Post: A pilot story: from commercial aviation to web development>, 'current_section': <Section: General>, 'view': <app.blog.views.SlugUniquePostDetailView object at 0x7ff6748ddd00>, 'blog_url': '/blog/'}, {'block': <Block Node: content. Contents: [<TextNode: '\n<div style="display:none'>, <django.template.library.SimpleNode object at 0x7ff674903190>, <TextNode: '\n '>, <django.template.library.SimpleNode object at 0x7ff6748dfe80>, <TextNode: '\n '>, <django.template.library.SimpleNode object at 0x7ff6748df910>, <TextNode: '\n</div>\n\n<!-- Article Des'>, <django.template.defaulttags.URLNode object at 0x7ff6748d6bb0>, <TextNode: '"> <i class="fas fa-angle'>, <Variable Node: post.title>, <TextNode: '</h1>\n </div>\n\n <!-'>, <Variable Node: post.author.get_full_name>, <TextNode: '</span>\n <sp'>, <IfNode>, <TextNode: '</span>\n </div'>, <Variable Node: facebook_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: tweet_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: linkedin_url>, <TextNode: '&title='>, <Variable Node: post.title>, <TextNode: '" target="_blank">\n '>, <Variable Node: post.content_html|safe>, <TextNode: '\n\n </div>\n\n <div class='>, <Variable Node: facebook_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: tweet_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: linkedin_url>, <TextNode: '&title='>, <Variable Node: post.title>, <TextNode: '" target="_blank">\n '>, <Variable Node: post.author.get_full_name>, <TextNode: '</span></h3>\n '>, <Variable Node: post.author.short_bio|safe>, <TextNode: '\n </div>\n </div>\n'>]>, 'facebook_url': 'https://www.facebook.com/sharer/sharer.php?u=https%3A//a320expert.com/blog/pilot-story-commercial-aviation-web-development/'}] [{'True': True, 'False': False, 'None': None}, {'csrf_token': <SimpleLazyObject: <function csrf.<locals>._get_val at 0x7ff6749c1af0>>, 'request': <WSGIRequest: GET '/blog/pilot-story-commercial-aviation-web-development/'>, 'user': <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7ff6748ddf40>>, 'perms': <django.contrib.auth.context_processors.PermWrapper object at 0x7ff67489c0a0>, 'LANGUAGES': [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')], 'LANGUAGE_CODE': 'en-us', 'LANGUAGE_BIDI': False, 'MEDIA_URL': 'https://dh57sjtl5a41q.cloudfront.net/media/', 'STATIC_URL': 'https://dh57sjtl5a41q.cloudfront.net/static/', 'TIME_ZONE': 'UTC', 'messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0x7ff6748d5a30>, 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30, 'ERROR': 40}, 'DEBUG': False, 'NB_FREE_QUESTIONS_IN_TRIAL': 10, 'SOCIAL_MEDIA_URLS': {'facebook': 'https://www.facebook.com/A320Expert', 'linkedin': 'https://www.linkedin.com/company/a320expert', 'instagram': 'https://www.instagram.com/a320expert/'}, 'GOOGLE_ANALYTICS_KEY': 'UA-187317566-1', 'SHOW_BLOG': True}, {}, {'object': <Post: A pilot story: from commercial aviation to web development>, 'post': <Post: A pilot story: from commercial aviation to web development>, 'current_section': <Section: General>, 'view': <app.blog.views.SlugUniquePostDetailView object at 0x7ff6748ddd00>, 'blog_url': '/blog/'}, {'block': <Block Node: content. Contents: [<TextNode: '\n<div style="display:none'>, <django.template.library.SimpleNode object at 0x7ff674903190>, <TextNode: '\n '>, <django.template.library.SimpleNode object at 0x7ff6748dfe80>, <TextNode: '\n '>, <django.template.library.SimpleNode object at 0x7ff6748df910>, <TextNode: '\n</div>\n\n<!-- Article Des'>, <django.template.defaulttags.URLNode object at 0x7ff6748d6bb0>, <TextNode: '"> <i class="fas fa-angle'>, <Variable Node: post.title>, <TextNode: '</h1>\n </div>\n\n <!-'>, <Variable Node: post.author.get_full_name>, <TextNode: '</span>\n <sp'>, <IfNode>, <TextNode: '</span>\n </div'>, <Variable Node: facebook_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: tweet_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: linkedin_url>, <TextNode: '&title='>, <Variable Node: post.title>, <TextNode: '" target="_blank">\n '>, <Variable Node: post.content_html|safe>, <TextNode: '\n\n </div>\n\n <div class='>, <Variable Node: facebook_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: tweet_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: linkedin_url>, <TextNode: '&title='>, <Variable Node: post.title>, <TextNode: '" target="_blank">\n '>, <Variable Node: post.author.get_full_name>, <TextNode: '</span></h3>\n '>, <Variable Node: post.author.short_bio|safe>, <TextNode: '\n </div>\n </div>\n'>]>, 'facebook_url': 'https://www.facebook.com/sharer/sharer.php?u=https%3A//a320expert.com/blog/pilot-story-commercial-aviation-web-development/', 'linkedin_url': 'https://a320expert.com/blog/pilot-story-commercial-aviation-web-development/'}] [{'True': True, 'False': False, 'None': None}, {'csrf_token': <SimpleLazyObject: <function csrf.<locals>._get_val at 0x7ff6749c1af0>>, 'request': <WSGIRequest: GET '/blog/pilot-story-commercial-aviation-web-development/'>, 'user': <SimpleLazyObject: <django.contrib.auth.models.AnonymousUser object at 0x7ff6748ddf40>>, 'perms': <django.contrib.auth.context_processors.PermWrapper object at 0x7ff67489c0a0>, 'LANGUAGES': [('af', 'Afrikaans'), ('ar', 'Arabic'), ('ar-dz', 'Algerian Arabic'), ('ast', 'Asturian'), ('az', 'Azerbaijani'), ('bg', 'Bulgarian'), ('be', 'Belarusian'), ('bn', 'Bengali'), ('br', 'Breton'), ('bs', 'Bosnian'), ('ca', 'Catalan'), ('cs', 'Czech'), ('cy', 'Welsh'), ('da', 'Danish'), ('de', 'German'), ('dsb', 'Lower Sorbian'), ('el', 'Greek'), ('en', 'English'), ('en-au', 'Australian English'), ('en-gb', 'British English'), ('eo', 'Esperanto'), ('es', 'Spanish'), ('es-ar', 'Argentinian Spanish'), ('es-co', 'Colombian Spanish'), ('es-mx', 'Mexican Spanish'), ('es-ni', 'Nicaraguan Spanish'), ('es-ve', 'Venezuelan Spanish'), ('et', 'Estonian'), ('eu', 'Basque'), ('fa', 'Persian'), ('fi', 'Finnish'), ('fr', 'French'), ('fy', 'Frisian'), ('ga', 'Irish'), ('gd', 'Scottish Gaelic'), ('gl', 'Galician'), ('he', 'Hebrew'), ('hi', 'Hindi'), ('hr', 'Croatian'), ('hsb', 'Upper Sorbian'), ('hu', 'Hungarian'), ('hy', 'Armenian'), ('ia', 'Interlingua'), ('id', 'Indonesian'), ('ig', 'Igbo'), ('io', 'Ido'), ('is', 'Icelandic'), ('it', 'Italian'), ('ja', 'Japanese'), ('ka', 'Georgian'), ('kab', 'Kabyle'), ('kk', 'Kazakh'), ('km', 'Khmer'), ('kn', 'Kannada'), ('ko', 'Korean'), ('ky', 'Kyrgyz'), ('lb', 'Luxembourgish'), ('lt', 'Lithuanian'), ('lv', 'Latvian'), ('mk', 'Macedonian'), ('ml', 'Malayalam'), ('mn', 'Mongolian'), ('mr', 'Marathi'), ('my', 'Burmese'), ('nb', 'Norwegian Bokmål'), ('ne', 'Nepali'), ('nl', 'Dutch'), ('nn', 'Norwegian Nynorsk'), ('os', 'Ossetic'), ('pa', 'Punjabi'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Brazilian Portuguese'), ('ro', 'Romanian'), ('ru', 'Russian'), ('sk', 'Slovak'), ('sl', 'Slovenian'), ('sq', 'Albanian'), ('sr', 'Serbian'), ('sr-latn', 'Serbian Latin'), ('sv', 'Swedish'), ('sw', 'Swahili'), ('ta', 'Tamil'), ('te', 'Telugu'), ('tg', 'Tajik'), ('th', 'Thai'), ('tk', 'Turkmen'), ('tr', 'Turkish'), ('tt', 'Tatar'), ('udm', 'Udmurt'), ('uk', 'Ukrainian'), ('ur', 'Urdu'), ('uz', 'Uzbek'), ('vi', 'Vietnamese'), ('zh-hans', 'Simplified Chinese'), ('zh-hant', 'Traditional Chinese')], 'LANGUAGE_CODE': 'en-us', 'LANGUAGE_BIDI': False, 'MEDIA_URL': 'https://dh57sjtl5a41q.cloudfront.net/media/', 'STATIC_URL': 'https://dh57sjtl5a41q.cloudfront.net/static/', 'TIME_ZONE': 'UTC', 'messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0x7ff6748d5a30>, 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30, 'ERROR': 40}, 'DEBUG': False, 'NB_FREE_QUESTIONS_IN_TRIAL': 10, 'SOCIAL_MEDIA_URLS': {'facebook': 'https://www.facebook.com/A320Expert', 'linkedin': 'https://www.linkedin.com/company/a320expert', 'instagram': 'https://www.instagram.com/a320expert/'}, 'GOOGLE_ANALYTICS_KEY': 'UA-187317566-1', 'SHOW_BLOG': True}, {}, {'object': <Post: A pilot story: from commercial aviation to web development>, 'post': <Post: A pilot story: from commercial aviation to web development>, 'current_section': <Section: General>, 'view': <app.blog.views.SlugUniquePostDetailView object at 0x7ff6748ddd00>, 'blog_url': '/blog/'}, {'block': <Block Node: content. Contents: [<TextNode: '\n<div style="display:none'>, <django.template.library.SimpleNode object at 0x7ff674903190>, <TextNode: '\n '>, <django.template.library.SimpleNode object at 0x7ff6748dfe80>, <TextNode: '\n '>, <django.template.library.SimpleNode object at 0x7ff6748df910>, <TextNode: '\n</div>\n\n<!-- Article Des'>, <django.template.defaulttags.URLNode object at 0x7ff6748d6bb0>, <TextNode: '"> <i class="fas fa-angle'>, <Variable Node: post.title>, <TextNode: '</h1>\n </div>\n\n <!-'>, <Variable Node: post.author.get_full_name>, <TextNode: '</span>\n <sp'>, <IfNode>, <TextNode: '</span>\n </div'>, <Variable Node: facebook_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: tweet_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: linkedin_url>, <TextNode: '&title='>, <Variable Node: post.title>, <TextNode: '" target="_blank">\n '>, <Variable Node: post.content_html|safe>, <TextNode: '\n\n </div>\n\n <div class='>, <Variable Node: facebook_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: tweet_url>, <TextNode: '" target="_blank">\n '>, <Variable Node: linkedin_url>, <TextNode: '&title='>, <Variable Node: post.title>, <TextNode: '" target="_blank">\n '>, <Variable Node: post.author.get_full_name>, <TextNode: '</span></h3>\n '>, <Variable Node: post.author.short_bio|safe>, <TextNode: '\n </div>\n </div>\n'>]>, 'facebook_url': 'https://www.facebook.com/sharer/sharer.php?u=https%3A//a320expert.com/blog/pilot-story-commercial-aviation-web-development/', 'linkedin_url': 'https://a320expert.com/blog/pilot-story-commercial-aviation-web-development/', 'tweet_url': 'https://twitter.com/intent/tweet?text=A%20pilot%20story%3A%20from%20commercial%20aviation%20%20to%20web%20development%20https%3A//a320expert.com/blog/pilot-story-commercial-aviation-web-development/'}]

A pilot story: from commercial aviation to web development

Benoit Bihan Sep 21, 2021
Share:

Aviation has defined my life. I started flying gliders as a teenager before studying hard to obtain a Master’s degree in aviation from the French Aviation National School (ENAC). After a few years working as a Flight Operations Engineer at Airbus, I finally joined Etihad Airways in 2015 as an International Cadet pilot, where I was trained on Airbus A320. Unfortunately, like many of my colleagues, I was laid off at the end of 2020 due to the COVID crisis.

Like most pilots, I suddenly found I had a lot of time on my hands and no proper way of maintaining my skills or keeping my technical knowledge up to date. I found a few databases of questions online - but none of them met my expectations regarding content and quality. For years, I have felt that pilots have to memorize large amounts of information from official documentation, and it can be hard to find reliable resources with up-to-date and accurate references.

To work on this problem, I partnered with my childhood friend Thomas Tartière, who works as lead developer in Canada. We started brainstorming about what might be useful to other pilots, following a Lean approach based on the famous book by Eric Ries (The Lean Startup, highly recommended!). We quickly built and released a monthly quiz with 10 technical questions for A320 pilots, all with detailed explanations and references. The feedback from the community was extremely positive, but we kept getting asked to provide access to more questions and content. So, in parallel to our monthly quizzes, we started to work on a more advanced web platform. 

Generating high quality questions is time-consuming. We always start from the official A320 documentation to identify the most important information from an operational point of view. Then, we have to take into account the differences in system architectures between aircraft. I sometimes spend a lot of time on a single question to make sure it is applicable to all aircraft. Luckily, my previous experience at Airbus helps me tremendously to deal with the specifics of configuration management. The final step is to ask some pilots to review our work and to make sure we didn’t miss anything.

Today I am very proud to release the results of our efforts, now available at https://a320expert.com. While I focus on product development, communication and content generation, I am also sharpening my development skills in Python and Javascript thanks to Thomas’s experience and mentorship.

In the future, we intend to keep adding content and features that are relevant for pilots. We’ll also continue to release our free monthly quizzes as it has been a lot of fun to create, and we love the format.

To conclude, I would say that A320 Expert was not only born from the necessity to create a training platform, but also as a form of therapy. Losing the job I love was challenging, and I found in this project a way to prove myself. I hope you will find this little story inspiring and that you might also find a project that will keep you active until we can find a right or left-hand seat - somewhere.

Share:
Written by

Benoit Bihan

A320 Senior First Officer (EASA & GCAA) and Flight Operations Engineer. Co-founder of A320 Expert