How Version Control Affects Your Workflow?

Using version control software is a best practice and industry standard nowadays for high performing software and development teams. If you are not familiar with Git and what is version control, check this website out, which provide a good introduction and tutorials.

During my past experience, most of my projects and teamwork followed Feature Branch Workflow. Whenever the developer starts working on a feature or fixing bugs, they could create a new feature branch based on main branch/master branch.

The reality is that different development team probably have different set up with their branches and development path due to some historical reason. I am going to talk about the situation that I experienced in my work. Hopefully, my experience could give you some inspiration and get a better understanding about version control.

We have three major branches, which are not deletable. They are prod-branch, qa-branch, and dev-branch. All the tasks/features we start to work on need us to create a new feature branch based on prod-branch. Once we finished the task, we’ll merge the feature branch into dev-branch and qa-branch for 1st and 2nd QA testing. If the code passed the QA testing, we could deploy the feature branch to prod-branch.

Ideally, this way won’t cause any issue if we strictly follow the process, since these three branches are equally the same with different purpose. In fact, there are some shortcomings during our development. First, we don’t have a version control for qa-branch and dev-branch, the differences between qa-branch and dev-branch are increasing while the code base is getting larger. When your feature branch merged into dev-branch and qa-branch, it could lead to different result, the developer has to spend extra time to correct differences. Second, if the developer is working on a complicated project and has been testing for a while, your feature branch is probably already far behind prod-branch. Once your feature branch is ready for launch, it could cause many conflicts that need to be solved, which for sure will cause more time to fix this. From the other perspective, whenever you want to do any upgrade or migration to the environment, if these three branches are not exactly the same, the developer need to spend triple time to get the work done.

It’s hard to maintain a development environment perfectly without any issues/conflicts, but the development environment that I am currently working on is definitely not a good practice of version control, but there is always pros and cons while we are making decisions in different stages of our lives.

Cracking Software Engineer Interviews

When I prepare the interview for my internship, I divided my knowledge into two area, behavior question and coding question. Some of the companies will ask Object-oriented design and System design, but normally it is not a requirement for interns and new grads. I also used to do mock interview with Senior Engineers, which helped me as well to get familiar with the process.

When prepare Behavior Question, I use the STAR technique as the following. There are many articles, which explained what is STAR techniques and how to use it. Attached below is what I found online before. The most important thing I found out is preparing your story in different aspects and try not to use the same story to answer different interview questions. Practice with your roommates, classmates, or friends as many times as you can before the interview.

1. Situation: Open with a brief description of the Situation and context of the story (who, what, where, when, how).

2. Task: Explain the Task you had to complete highlighting any specific challenges or constraint (eg deadlines, costs, other issues).

3. Action: Describe the specific Actions that you took to complete the task. These should highlight desirable traits without needing to state them (initiative, intelligence, dedication, leadership, understanding, etc.)

4. Result: Close with the result of your efforts. Include figures to quantify the result if possible.

For preparing Coding Question, there are so many places which provided algorithm problems like LeetCode and LintCode. Starting with easy question and build the confidence at very beginning is also very helpful. I think the number of problem you solved is not that important comparing to understand the basic concept and thinking process. During my interview, the interviewers will focus on the communication and how you walk them through step by step to the solution, it’s more like a TA office hour, clarifying the question, showing other students how you solve the problem instead of telling them the answer directly. All in all, as long as we insist working on it, we will get our job eventually.

Attached some resources that I used to learn Data Structure:

Cross Platform Discussion App – Midpoint checkin

After a month working on our app, Bridge, we finally have 5 screens with general layout, which are login screen, home screen displaying prompts, prompt detail screen, comments screen, and profile screen.

The following we did in this month:

1) We successfully connected to the Firebase realtime database and set it up, so we are able to read from and write to the database.

2) The login screen is fully functional now. Users can create account and use their account to login the app.

3) Our home screen could show up five random prompts and refresh every 24 hours.

4) The prompt detail screen will allow user to view all the comments and upvote/downvote the comments as they like.

5) Our profile screen will allow user to add attribute and see all their activities/comments for “today” when they use the app.

What we are planning to work on after our Midpoint:

1) Improve the UI for most our screens

2) Allow users to edit and delete their comments.

3) Cover more edge cases for login, upvote/downvote, profile attributes, etc.

It’s been a pleasure to work with my team. They are very responsive and helpful to the assigned tasks, pull request review and merge conflict. Attached some screens we are having now, and I can’t wait to share the final version of our app with the rest of the class.