Introduction:
¡Ay, chihuahua! (Mexican expression of surprise or shock) That's how I felt on my first day at my new job as a software developer. After spending a year as an intern, where, to be honest, we were seen more as ornaments than resources, I suddenly found myself in a position where I not only had to develop and maintain mobile applications, but also work on backends, web clients, Python scripts for Raspberry Pi, maintain servers, guard databases as if they were my offspring and, to top it all off, design the next system in Figma. Yes, many responsibilities for one person and a very tough challenge for someone with a junior profile.
Faced with this panorama, I chose the only possible route: to accept my skills and my limitations, and start learning. That's how the idea for this blog was born: "The Survival Guide for the All-in-One Developer". I must be honest, a position where one person must take care of everything is not the ideal situation for any company, and it is also not the most attractive job offer for a recent graduate. Even so, I see it as a unique opportunity to learn and get a panoramic view of how systems work today.
So here I am, ready to share my journey and the lessons learned along the way. My name is Martín and this is my corner. I am open to any comments, suggestions or constructive contributions that can help us all grow. My social networks will be at the end, for those who want to contact me or simply want to join this adventure. As a final note, my native language is Spanish, so if you notice any peculiarities in my English, now you know why! Now, let's get started!
Chapter 1: Conquering the new job
Step 1: Accept your new job and your ignorance
First of all, let's be humble. We must be so when giving comments, when receiving criticism and also when accepting what we know and what we don't. As the new engineer in charge of the systems, it is vital that from the beginning they know what your skills are and where you need to improve.
If you are taking over a project already in production, here are some tips to overcome the "curve of terror".
- First, ask to be shown how the system works. Identify the end users and interact with them to learn how they use the application. This will not only allow you to understand the needs that the system solves, but will also give you an idea of the system's behavior.
-
Second, stick your head in the bucket with water, or in other words, dive in to read and understand the code. It is not necessary for you to spend a thousand years trying to memorize line by line, file by file. As I read in a book, "think fast, think slow", to go to the specific first you have to start with the general. So, take the repository and when you open it, it will ask you the following questions:
For a client (whether it's a mobile, desktop, browser application or a website):
Ask yourself: What programming language is it? How is the project's folder and file organization structured? What architecture is used in the project? Are there packages in the project? If so, look for documentation about them.
And don't forget the Frontend:
The Frontend is the part that users see and interact with. So it's important to do it right. Are the best practices for accessibility followed? How is responsiveness handled? How is performance managed? How are errors and exceptions handled?
If it's what we call a backend, we can ask ourselves these questions
- What programming language is it?
- What is the structure of the project's folder and file organization?
- What architecture is used in the project?
- What external packages do we use, do we use a framework? If so, get to work and learn how it works.
- Does it use databases? If so, what type of database is it, SQL or NoSQL? How do I make queries to the database? Migration and that, how does it work?
- And where does the app live? On its own server? In the cloud? Which Cloud? How often is that paid for? What is the configuration of our server's hardware? What operating system does it use? How do I add domains, applications, open ports, etc?
Beyond the questions already mentioned, it is essential to understand how security is handled. Are authentication tokens used? How are passwords and sensitive information handled? Also, how are tests managed. Are unit, integration, performance tests carried out? And if they are not done, it is a good time to implement them or consider implementing them.
If it's a mobile application:
- Is it Android or iOS?
- Was it developed with programming languages or noCode tool? Is it a native app? Is it transpiled? Is it a PWA? Is it a web app turned into a mobile app with Ionic? Phew, nowadays there are thousands of ways to make a mobile app, so it's important to realize what it's made with or what we will make one with, always taking into account the system's requirements.
-
How is the file organization structured?
I emphasize this a lot, because simply by taking a quick look we can realize several little things about the app's behavior, and also the difficulty of maintaining it in the long term.
What architecture does it use?
Do we use external packages, if so which ones?
Do we already have memberships to publish in stores?
Do we have a Mac or a way to compile to iOS?
How to make documentation so that app stores don't reject you?
We need to understand the particularities of each platform. If it's Android, is Java, Kotlin or both used? If it's iOS, is Objective-C, Swift or both used? Here you can also look for design patterns and check if the best practices are being followed. How is compatibility with different versions of the operating system and different screen sizes handled?
Regarding design files:
- Does it use a design system?
- What are the system's assets?
- Who are the system's users?
- Is it fully responsive? Is it for mobile? What type of client is it for?
- Do we have the brand manual at hand?
- Does this thing have animations?
- Is the prototype already made? Is it necessary to have it?
- Is it low, medium or high fidelity?
- What is the flow?
Are the design guidelines of Material Design, Human Interface Guidelines followed or is it a totally customized design? How are colors, fonts, images handled? How is localization for different languages and regions handled? What's up with UX?
Finally, for Raspberry Pi:
Is Raspbian, Ubuntu, or some other operating system used? Is Python, C++, or some other programming language used? How are interactions with hardware components handled? How is security and software update managed?
Step 2: Set Priorities and Plan Work Effectively
If a flood of tasks falls on you, don'tbe scared. Here the key is organization. Prioritize tasks based on their urgency and importance. Remember, urgent is not the same as important. Urgent is what your boss screams at you, important is what really adds value to your work. Don't forget about deadlines and be realistic when estimating how long each task will take.
Step 3: Learn about Existing Processes and Systems in the Company
Each company has its own way of doing things. When you arrive at a new job, it's vital that you familiarize yourself with the existing systems and processes. This will not only help you integrate faster, but it will also give you a better idea of how you can contribute and improve the existing system.
Step 4: Communicate Effectively with Other Departments and External Collaborators
We're not alone in this, chavo (Mexican slang for "guy" or "dude"). Having good communication with other departments and external collaborators is essential. Whether it's to coordinate tasks, request information or simply to keep everyone on the same page, good communication can save you a lot of headaches.
Step 5: Identify and Solve Complex Technical Problems
As you are the only one responsible for the systems, you will have to deal with technical problems. Don't be scared, each problem is an opportunity to learn. Don't give up at the first obstacle, research, learn and solve.
Step 6: Perform Administrative Tasks and Project Management
Yes, a developer's job is not limited to programming. You will have to manage budgets, meet deadlines and ensure the quality of work. For this, I recommend that you familiarize yourself with some project management methodology, such as Scrum or Kanban.
Step 7: Stay Updated on New Technologies and Trends
Our field is constantly updated. Never stop learning. Stay up to date with the latest technologies and trends. This will allow you to contribute innovative ideas and keep your company at the forefront.
Step 8: Ensure Data Security and Privacy
Data security is vital in our digital age. Make sure you comply with all security and privacy regulations. Remember, a mistake in this aspect can cost your company dearly.
Step 9: Create a Positive and Collaborative Work Culture
Working in a positive and collaborative environment fosters creativity and improves productivity. Promote mutual help, respect and diversity in your team. A united team is a winning team.
Step 10: Make Decisions Autonomously and Take Responsibility for the Results
As the only one responsible, you will have to make important decisions. Don't be scared, trust your judgment, but also consult it with another colleague if you don't have much experience.
Final Words
With these tips, I promise you will feel much more comfortable in your new job. Never forget that the key is humility and the willingness to constantly learn. In this field, there is always something new to learn and that is part of the beauty of our profession. So, cheer up and always move forward.
Instagram: @martinoerae
Email: jesusmartinloera@gmail.com
Top comments (2)
Thanks, this is a really good guide for the beginners as well as experienced who recently joined new organisation.
Thank you for your kind words! I'm glad to hear that you found the guide useful. If you have any other topics you'd like me to cover in future posts, feel free to share.