# Final Self-review
**Jose Juan Suarez Elizalde - SWE intern - Horizon Experiences Bridges**
## Context
My project is about develop different features for productionize avatar recording and playback features in Horizon.
### Before mid-point review
First of all, let's summarize all that happened before the mid-point review as part of the context.
I accomplished:
* Setup finished.
* Orientation courses finished.
* I did this diff D37120474 for the first task T117609162.
* I found a more optimum way to do my task T122245478 and the code finished with the expected goal but was clearer and simpler D37256969.
* I started T123943179.
Let's mention some blockers (things that I consider made things harder or slower in the first half):
* First time out of my country.
* Password laptop problem (some hours without access until I went to helpdesk).
* Drivers laptop problem (2 hours in helpdesk and some difficulties for some days).
* Visa/SSN/bank paperwork stuff.
* Some personal issues (especially one scholar issue that was very stressful and I solved it within 2 days, I didn't sleep because of that).
* A lot of setup stuff, permissions, licenses, and so on.
* Requesting Windows laptop and Oculus headset.
* First time using oculus and working with VR-related things.
* First time with internal development tools.
* Etc.
In this first half, I faced many challenges which helped me learn a lot and lay foundations that made me progress in a better way in this second half, the beginning of the learning curve was not easy but I got the momentum I was looking for and more importantly I enjoyed it.
The **feedback** I got in the midpoint review was quite useful, in a nutshell it was:
* The key improvement area for you is productivity.
* Improve your initiative and independence. Be more proactive in pushing your project forward. You are the one who’s ultimately responsible for your intern project.
Suggested action plan (*I'll write in italics what I did for improving based on feedback*):
* Finish at least 2 diffs per week
*Week **6th**: 1 diff (D37434176) that should had been 2 or 3 (my bad), it solved 2 tasks.*
*Week **7th**: 3 diffs for 3 different tasks and I started a four one by myself (the one that I suggested in the first half).*
*Week **8th**: 2 diffs. One of them was my idea.*
*Week **9th**: 2 diffs. One of them has not landed yet, waiting for tests. The other diff was abandoned because it was the correct way to go, I'll tell you more details later.*
*Week **10th**: I am currently working on just 1 diff but I think the feature will require to divide it into 3 or maybe 4 diffs, one for fast forward, one for slow down (my idea), and one for backward. This task has not been a task filed so I'll go more into details afterward.*
* Post update daily on the group chat
*I used to give updates throughout the whole day in the share chat group. Actually, this final review was made completely based on my workchat messages, diffs, and tasks.*
* Pay attention to the calendar, and attend at least 1-2 meetings per week.
*I did it most of the weeks*
* Proactively ask for tasks and post updates
*I did it. I have at least 6 messages in our share group asking for a new tasks 🙂 and every day I give updates of the task that are not finished.*
* Suggestion features you want to add that can improve your project
*I did 3 suggestions of features to improve the project, for the one that I suggested in the first half, I spent half of the day researching and asking other engineers what I needed for starting it. I landed one idea that I considered so useful and I have already used it to test other tasks (D38264754), and finally, I will add the slow down feature for my current task.*
* Consider searching the wiki / the relevant Workplace support group (such as Horizon Dev Q&A) in order to get unblocked faster.
*This half I have asked so many times in our share group chat every day, of course, I always try by myself first. I have asked at least 4 times in Horizon Dev Q&A about different topics and bugs, and I have reached 3 other team engineers, also I found a lot of information in workplace groups and wikis too.*
* Workchat desktop app.
*I used it every day, I pinned my chat with Yonglong, Sebastian, and the share group with them. I think answered the vast majority of messages in less than 5 minutes*
*I would like to add that I consider I did continue doing correctly what I was already doing good.*
Finally, let's go into the details of every week since the mid-point review.
## After midpoint review
Now let's talk about the five weeks after mid-point review.
* **Week 6**: (from July 5 to 8): [First 2 Gizmo tasks]
This week since I had the mid-point there were some changes, for example having daily meetings with my peer, which has helped **A LOT**, also I started sending everything in the share group chat and using workplace chat desktop app, among others.
The whole week I worked on these tasks T123943179 y T123943255, that I solved with D37434176. This diff, should have been 2 or 3 diffs, that's was a confution and ultimatly my bad. I had some bugs and many newbie unity questions. With what I learned here, I improved my development speed.
* **Week 7**: (from July 11 to 15): [Gizmo UI, recording indicator, single thread multiavatar, React VR, Spawning animation for multiavatar playback]
I finished T123943276 (gizmo UI interface) with D37734459.
I did the necessary tests for my feature but since I also modify other features' code. I also did a test to check that the other feature (multiplayer playback) still worked. It didn't work because a change for testing mocap. I solved it with commands to modify the ent. And it worked.
I also solved T125826165 with diff D37842613, it was about add indicator to show it's recording, I tested the gk just in case.
After that, I worked on T126105159 and I finished it with D37874152, it was an optimization in MultiAvatar Playback service, we avoid using multithreading, and we do the same in just one thread in an efficient way, I think this code was very interesting and challenging. I also fixed some bugs that were in the original code. I would say that without my experience in competitive programming this would have been for me hard.
I finished all the tasks available so my peer asked me for research about React VR, I spent half of the day reading this [guide](https://www.internalfb.com/intern/wiki/HorizonWorlds/ENGINEERING/Guides/reactvr/), and the rest of the day I researched how to implement the feature that I suggested in the first half (to add the same effect/particles-animation as the one that appears when a player avatar spawns to the spawn and takedown of the playback avatar). I asked some things in the Horizon Dev Q&A and also reached 2 other teams' engineers for this.
* **Week 8** (from July 18 to 22): [1+ hour optimization y recording indicator part 2]
I researched different approaches and possibilities for solving T126423831, I did a build for the first time to test it on oculus hardware. I did a bunch of tests and I finally got a good optimization for recording frames. We avoid OOM writing directly in the file so we don't use linear memory but constant, also, I suggest doing something similar with audio, and I tried next week. I came up to D37981131.
The tests for this fixed are pretty long and I did a bunch. But this tests at the beginning were blocked because of a problem with avatars, I investigated it. It took time since I had to ask in Horizon Dev Q&A and talked with other engineers. And then they told me the way to go but I had more problems in the way. I had to factory reset my headset using commands and also add some Entitlements for my account. This started this week and I continue doing tests and checking some things about it even today. It is about performance and crashes in the app because of this feature. Also, we didn’t want to land it with enough tests because of VP’s test.
In summary was achieved what we wanted at the beginning 30 mins of recording without a crash, with just 30-40s delay at the end (without preview playback). With suggested frame optimization.
I also went through T126658880 with D38014340 (a red sphere appers while recording, you can see it if you turn a little to the right). This is the second part of T125826165.
* **Week 9** (July from 25 to 29): [audio optimization + additional feature]
Still with T126423831, while I was waiting for a response from the other engineers about what was blocking me. Sebastian had an idea for testing it (partially, no preview avatar) so I did that, for doing this I had to get the files and uploaded them to the animations pool and create an event (the first time for me doing all of this). We found another bug in the SVR tools UI while I was creating the event, it was because of the avatar index (randomly assigned with long instead of int), which was crashing my test and I spent much time figuring out what was the error.
In the while I also tried to optimize audio for the same purposes as T126423831, I explored several options, I commented on them in the group for doing this and I tried some of them locally, all of them had strong downsides or some blocking factor, dialectically we came up to the decision that the best option was to keep the audio as it was, I have not too much to show about it but a lot of messages but here the only diff that I uploaded about it D38221080 but it’ll be abandoned.
Then I started a new task (fast forward and go backward during preview playback after recording using the A and B buttons [not a task filed for this task]). Going through code I realized that a feature for being able to record without a headset (directly in unity) would be incredibly useful, I figured out how to do it and it was pretty simple, so I did it D38264754, it has already helped me so much since I was having some issues with my headset, and then I used this feature to test in my computer.
Finally, I started working on the fast forward feature and I found help with the “bug” that was blocking me with T126423831.
* **Week 10** (Current week): [Final review and fast forward, slowdonw and backward preview]
Lastly, on this 10th week, I spent my time doing this final review as well as with the Fast forward and the backward feature, I will add the slowdown feature too to this task. Also I think to be consistent with D38264754 it should also work with the V and B keyboard keys. I am still working on this, and I think the whole feature should be divided into 3 or even more diffs. The current diff is D38338339.
I had already an approach that literally was doing what we want, but I think it could be dangerous for other process or features to use it. So I’ll be going for another one way safer.
I also hope to finally land T126423831 this week.
-------------------
## Conclusion and final thoughts
In summary and answering the questions: I feel proud of my work, This was my first approach to working on real code and it was incredible. I feel privileged to have had the opportunity to work in a team with such an important and impactful job.
I think the hard part was starting but once I started I had a way better manner to tackle my tasks, now I feel more capable than ever before of facing tasks and that's because I learned a ton. I think that every task was interesting and challenging in its way, and I tried, thought, searched, and asked until I got it. I finished this week having noticeable improvement on these features and I am happy about that. Maybe what makes me happy the most is to know what I am capable of now and also that maybe a lot of people will enjoy using those features.
I hope to keep getting even better for the rest of this internship, I know there are a lot of things I can improve yet, but the important part is that I keep improving. I am glad for having this opportunity and I am so excited to come back.