Adventures in Android app development using Open AI o1 in 2024
To become a German citizen with the accelerated three-year application process, I had to take the German C1 exam (language proficiency) and the Einbürgerungstest, a kind of “Living in Germany” or “German law, culture and history” test.
On the day of the Einbürgerungstest, candidates need to answer 33 multiple-choice questions drawn from a bank of 300 questions. The questions are fairly simple if you live in the country and have a good level of German.
When I prepared for it (October 2024), I used the question bank PDF from the BAMF website, and used a poorly designed website and Google to find the answers to questions I had doubts on. This was not a very user-friendly experience. I also knew a few fellow expats in the same situation.
On a rainy Saturday morning, I had a light bulb moment. What if this was the opportunity I had been waiting for to create something of value to the world? To improve the lives of the people around me? Full of naïve optimism and convinced that GPT/o1 would do the coding for me, I embarked on a 20-hour journey to create an Android app to practise the German Einbürgerungstest.
Notes
- I had zero previous experience in app development at the beginning of this project
- I will refer to the OpenAI o1 model as “o1”
Design and First Prototype (7 hours)
Getting the prototype going was surprisingly easy. o1 quickly gave me all the steps I needed to get started. This included downloading Android Studio and configuring the project. I had a working prototype within two hours. I was impressed by this technology as I had no previous experience in any kind of mobile application development.
Describing the app’s functionality, o1 gave me the different components I needed to add to the app. This process involved some copy-pasting to and from the OpenAI interface as unlike VS Code, Android Studio does not yet have a Copilot-like assistant.
Getting the App Ready for Submission (10 hours)
With a working prototype, I used o1 to convert the questions on the PDF to an object-oriented notation that could be interpreted by the programme.
(
Question= 1,
id = "In Deutschland dürfen Menschen offen etwas gegen die Regierung sagen, weil …",
text = "In Germany, people are allowed to openly say something against the government because ...",
englishText = listOf(
options "hier Religionsfreiheit gilt.",
"die Menschen Steuern zahlen.",
"die Menschen das Wahlrecht haben.",
"hier Meinungsfreiheit gilt."
),
)
I spent a significant amount of time reviewing questions and answers and building the questions with images. In terms of design, I used many of the default Android components. I still had to change most font sizes as default components have a small default font size.
Following advice from o1, I used Figma to design the application screenshots to include on the Play Store listing. I found the experience surprisingly easy. Working in the Data Science field, I had no idea that such a powerful (and free) tool existed. It took me less than an hour to make something that looked rather professional.
Submitting the App to the Play Store (3 hours)
From all the work required to publish an app on the Play Store, this is the task that I most underestimated. The approval process of the Google Play console is thoroughly unintuitive. I had to first pay 25 USD upfront to be able to submit my app for approval. I then had to fill in tens of forms and declarations, navigate through the UI, create all kinds of tests… This was not an enjoyable experience at all.
After all of this clicking, I finally managed to submit my app for review.
This started an endless ping-pong of messages with the app approval team. I would submit the app, wait for two days, then receive a cryptic message saying that the app was non-compliant. After five or six back-and-forth messages with two to three days in between, I was asked to include an official source of government information. As I googled “Einbürgerungstest” to find the original questionnaire, I realised that, in the meantime, the official BAMF had released a web app to prepare for the test…
Do No Harm
The best way to prepare for this test is to use the official web app. There could be discrepancies between the official questions and the questions on the app I created. For this reason, I decided to stop my work on this project and drown my disappointment in this blog post.
Learnings
This last sentence was more of a joke; I learnt a lot in the process.
There is a LOT of admin involved in publishing apps on any kind of app store
Always do market research before starting development
I rushed into this project following my experience of using a PDF document and shady websites. Had I spent more time doing my initial research, I would have noticed that many apps already exist in this market. The final discovery of the BAMF’s official web app was what ended this project.
It is surprisingly easy to build apps and listings that look good
I had no idea that tools like Figma existed, and that visual material for an app could be built in minutes. This was an empowering experience.
While absence of technical knowledge is becoming less of a barrier, experience still is
I did not need to know anything about Kotlin to write this app. Thanks to the latest OpenAI models, I had the code ready in less than 10 hours. If specific technical knowledge becomes less important, experience is still highly valuable. Thanks to my experience in GUI design and with other programming languages, I was able to know exactly what I wanted and found it relatively easy to prompt o1 into making it work. On the flip side, my lack of experience building and publishing apps significantly slowed the project down.
Digging deeper
On a motivational level, my drive to develop this app was to build something that would be useful to the world. However, I did not enjoy the process of building as much as I enjoy teaching, writing Data Science code or blogging. At various points in the app’s development, I felt that this was not the best or most enjoyable use of my time.
Following this adventure, I decided to leave app development to app developers and focus on where I can make a difference. Where exactly is that? This is a question for another blog post.