The story of the internship where I messed everything up, but still got a job offer

NicolasBrondinBernard

Author
@NicolasBrondinBernard

Don't be afraid to fail during your internships anymore!

Article published on 30/11/2020, last updated on 10/08/2026

I didn't think I had any more stories to tell you since my last article "The Day I Received Both a Reprimand and a Bonus in the Same Day", but then this internship came back to my mind and I hope this experience can help a few developers.

It's 2014, I'm at the end of my bachelor's degree and I manage to land an internship with a former professor from USW (University of South Wales) with whom I had worked during my first internship in my associate's degree.

Doing another internship abroad is already good news, but on top of that I manage to secure a second spot so I can bring along my longtime brother-in-arms Hadrien (who will recognize himself) to do this internship together.

The company is a small startup in home security (cameras, sensors, etc.) founded by a computer science PhD (our internship supervisor) based on the subject of his thesis.

Thank you Alhad for this opportunity if you ever stumble upon this blog post!

Having done mobile development during my first internship, that's why we're "hired" even though neither Hadrien nor I were really skilled in this field at the time (we were actually more trained in C++ and Java software development), but no matter, we had the motivation and desire to do well on our end.

A few days after our arrival (the internship lasted 10 weeks), the internship topic was explained to us: "Be able to display an IP camera's video feed in real time and make recordings on Android tablets".

Well, that was the simplified version of the topic, because the actual technical task was: "Retrieve a video stream transported over RTMP and encoded in h.264 to display it in real time on Chinese tablets running Android 4.0".

And as much as the first description seemed manageable to us, the technical description sent a chill down both our spines.

After reading technical documentation on RTMP, h.264, and Android, we were reassured to see that apparently, Android's native video player was capable of supporting both RTMP (live-streaming) and h.264 (MPEG-4 codec).

Wonderful, all we had left to do was write the technical implementation, a small Android application with a simple video player and the stream URL as the source.

And that's where the trouble started...

By the end of the first week, we had experienced our first emotional rollercoaster: some IP cameras encoded video in h.264 level 4, and Android's native decoding (4.0) stopped at the lower level. The video was therefore not recognized.

The following week, after digging through documentation, blogs, and asking our colleagues and internship supervisor, only one solution seemed possible: transcode the video on Android using FFMPEG before feeding it to our video player.

If you don't know FFMPEG, it's the go-to software solution for recording, converting, and streaming video or audio.

From that moment on, the rest of our internship felt more like a battle between our patience and Android.

FFMPEG is software developed in C, and Android applications run in Java, so we had to find a way to make our application communicate with the C layer of the Android OS (based on Linux) in order to integrate FFMPEG into it and send it the commands needed to transcode our video in real time.

After more than a week of research, we managed to discover the existence of the JNI (Java Native Interface), which allows executing C libraries from our application.

We now had to write both Java and C in the same application...

With that step done, the goal now was to integrate FFMPEG with the JNI, but once again, reality caught up with us because none of the available builds were compatible with the ARM architecture (the architecture of the processors found in the majority of smartphones even today).

We therefore now had to fully recompile FFMPEG for ARM before being able to run it on Android, and this is probably what ultimately did our internship in.

After reading hundreds of articles, cross-referencing information and tutorials, we finally managed to piece all these technologies together over these two months of internship.

But the result wasn't up to par. All we had managed to produce was an Android application displaying a video at about ten frames per second, sometimes stopping for no apparent reason, and obviously unsellable to the general public.

On the last day of the internship, we were both very disappointed at not having managed to do better technically, but also happy to have met developers from very different backgrounds (in the offices we had French, Indian, Welsh, Sri Lankan people...) and to have managed to make ourselves understood socially and technically using only English.

But the best surprise, which made us forget this technical misadventure, was when our internship supervisor offered to hire us as mobile developers, despite our project's failure.

So why this offer? Well, because we had the right attitude as developers: we raised the alarm when we had a problem and communicated about possible solutions, we did a lot of research and documented ourselves through many different sources, and we didn't give up despite the many obstacles.

By watching us work, the team realized that the project, supposedly manageable, actually contained problems far more complex than expected, and our research would serve as a foundation for the next developers on this project.

There's a quote I particularly like that says the most important thing isn't always the destination but rather the path we've traveled, and I think that's true for a developer too.

Search, communicate, try, fail, but don't get discouraged, whether it's for a project, an internship, or a job, a good attitude will take you very far!


Chris Liverani sur Unsplash

Finished reading this article?
Our complete courses
Take it to the next level with our courses!

Complete courses, exercises and certificates to really learn programming!

4.8 average rating

Comments (0)

to leave a comment

No comments yet