Portfolio Feedback

[FEEDBACK] Hi Everyone,

I am working my way through Rick’s get-a-job course and I am looking for feedback on my portfolio.
https://yitzchakncohen.wixsite.com/portfolio
All feedback is welcome, thanks in advance.

Yitzchak

3 Likes

Hello Yitzchak!

Your portfolio is really good. You hit a lot of important parts. You show the games you have made and it looks like you have a lot of games which adds credibility that you can make games. I would add some videos where you analyze the games you made and show the code you actually wrote. That way they can see you are fluent in code and actually understand how to code. Great stuff man! Keep it up!

2 Likes

I’m gonna get a little mean, but I’m just thinking as a Human Resource guy, I’m not from that area, but I’ve seen enough incredibly talented people get rejected for the absurdest things, so this might get a little mean, if you can take the criticism keep reading, if not, then don’t read, obviously.

Let me give you a little context first, I once met an amazing programmer, his portfolio consisted of severals games made from scratch, literally from scratch, he had his own engine, he was looking for a software engineer position in some of the biggest gaming companies like Blizzard, Ubisoft and others, he got rejected by everyone (He’s Mexican, so the distance might have been an issue), he didn’t only get rejected, but they didn’t even interview him, he just sent his portfolio and CV with only one response from Ubisoft telling him that he’s not what they were looking for. If you are going after a job on a big company I think you need to polish your portfolio a lot.

I’ll point out the first issues I noticed.

  • Your website is poorly designed in many areas (for some reason it takes way too long to load, the background image is hideous, there’s no background for the buttons, there’s just text which is awful and hard to see), just based on that I would not contract you because if you are not paying attention to your presentation card, What tells me you’ll be paying attention to the projects you’ll be working on?
    That awful Wix commercial at the top, Is that a pay thing? Like you have to pay to remove it? If that’s the case, pay and remove it, show that you are a professional that invests in yourself.
  • Your portfolio video preview is extremely boring, you spend the first 38 seconds with a cinematic that is not even that impressive, there’s no gameplay during that whole part and you are trying to get a position as a gameplay programmer, don’t start with a 38 seconds cinematic, that’s not gameplay.
  • Why did you hide your best selling point? Your “About me” page is great, it’s concise, and makes a much bigger impact than your portfolio, don’t hide that behind a click, put that in the front page.
  • I think you chose very poorly the game moments for your trailer, I think your most impressive project is the Airship Prototype because of the customization system, but you didn’t showed that in the trailer, implementing those kind of things is hard, show that you can do that, again, don’t hide it behind a click.
  • Floor is Lava, What is that thing? I don’t get it at all, the name implies that well… the floor is lave yet the character walks through it. Yes I know you explain that in the project page, but you gotta make a super solid point in the trailer, which isn’t made with that game.
  • I would highly suggest you remove the FPS from the trailer, the FPS, as it is now, looks extremely simple and boring, if you don’t have recoil for your weapons you better have a good excuse for that, half the fun of any FPS is the recoil, that makes aiming a lot harder. There’s not a single current FPS out there without recoil, remove until you add recoil or change the name to something like “FP Aventure Game”, that would make a great excuse, just like Metroid Prime, that game doesn’t have recoil because it’s not a FPS but a FPA (First Person Adventure).
  • The RPG, show the inventory system, not just the point and click combat, that again looks simple and extremely boring, show that you can grab weapons, equip them and change the combat style, I suggest changing the sword with the bow or something with more eye candy, like the fireballs from the course.

Your portfolio, as it is structured, makes for a bad first impression, once I dig deep I got a little more interested. I think you could get a job in an indie company but not in a triple A studio, of course you could start in an indie company and keep improving your portfolio until a big studio hires you (if that’s your goal), or you could not listen to me one bit and just send your current portfolio to the companies you’d like to work in, maybe I’m totally wrong.

I loved that you took a little time explaining charts and other things in each of the projects section, even tho that’s great, you should put some of your code to show how clean it is, try to comment it, sell your programming skills, at this point it’s more a designer portfolio than a programmer portfolio. Most of your games look like you spend more time in the assets store than coding, to be honest, if you are looking for a gameplay programmer position, I wouldn’t care if you send me a jumping cube… just be sure that it works perfectly and you’ll get a job, as it is now, your games look sloppy, unpolished code wise, and absurdly simple, actually, you know what, I’m gonna point out all the weirdness I noticed from the trailers, oh but before that, your Tower Defense page has the 2.5D Rocket Game trailer.

Let me get a little meaner:

  • Castle Cinematic: I don’t get the point of having two screens. Are you looking for a position as an Environment Artist? If that’s the case you are doing great, if not then you are doing it really wrong. Big companies usually have teams to handle the cinematics, they won’t care if you can do a simple cinematic. One way to use this to your advantage is to implement and AI system, make the townsfolk behave one way during the day and another during the night, that would be awesome and that’s probably instant hire, if that’s beyond your abilities I suggest you start digging into AI, if you want to be a gameplay programmer you’ll eventually need to code very fancy AI.
  • Airship Prototype is actually pretty cool. I truly think you should show that more.
  • The Floor is Lava: OMG… Change the name, that’s not how the classic The Floor is Lava game works, every time I see the trailer I get so confused, I had to read everything to understand it. Also there are very visible glitches, there’s one with the following sheep, and the jumping mechanic feels odd even when I’m not playing, that’s not good.
  • RPG prototype: The game looks… boring, try to move more, dodge arrows, change weapons in the middle of a fight, make a “pro gamer move”, sell your coding skills by showing how complex the combat system truly is.
  • The rail shooter looks fine, but there’s no interaction with the world and at this point I can see a very obvious weakness with your coding skills, you enemy coding skills are probably awful. Don’t know is that’s true, but I haven’t seen true interaction with enemies, add a boss fight or something for one of the games.
  • The SciFi FPS proves my previous point, Why you didn’t make the big robots shoot? They have two big guns for arms! And they don’t use them! Why?! You really need to go an extra step from the course, specially when you mention it so much in the projects’ pages, a click glimpse in Udemy tells me that you didn’t went to far from the original concept, anyone can follow a course.
  • 2.5D Rocket Game: This is really hard to mess up, the game on itself is pretty fun and easy to code, but there’s a HUGE issue that is telling me that you are not as experienced with Unity as you claim, again, not sure if that true, but that’s the impression I’m getting. At second 27, the transition to the next level, Did you notice how all the textures looked awful for half a second? That’s because you didn’t generate the lights for that level… Careful with those little details, people might misjudge you because of them.
  • Tower Defense, you don’t even have a trailer set for that…

Some final words. To be honest I think you still need to put a little more effort, when I started this game dev journey I almost got a job, I had like 2 months using Unity and I almost got a job, that’s because I made an amazing first impression, my CV was a beat em up game, for real, that’s making a point, and a huge one, you are probably a better coder than I was back then, but you gotta walk that extra mile, once you get the interview then your skills come into play, that’s why I didn’t get the job, I wasn’t ready, but you probably are, just make a better first impression, you can do this.

3 Likes

Hi Yitzchak!

I think that your portfolio looks great. I like that you posted on top a preview video of all your projects and that you used a two-column layout - it looks very clear. I’d suggest changing the font color of sub-menu items to white or adding a background.

I’d use simple models (cubes/spheres/capsules) instead of cool assets to focus the attention on the programming part. You may show your gameplay in the Unity Editor and demonstrate what is currently happening by writing some output to the console and recording it as well to show, for example on a split-screen as you did in the case of Castle Cinematic. I always write to the console which function is being executed during the gameplay and what important processes are running, for example, “Game Manager: Update Progress Bar executing”, “Character Controller: Collect Weapon executing”, “Game Manager: Reset Game executing”, and so on. It shows that you have complete control over everything you did yourself and how it’s connected from behind to the gameplay.

It’s just an idea which came to my mind after watching the preview video, where I was focused on cool-looking assets and other stuff, and in the end, you mentioned that many assets were taken from the asset store or the course resources. Since I didn’t enroll in the same courses I was thinking “How far did you go beyond the course material to do all these things?”

I think that you did a great job and I’m curious to see your future projects! Now you have +1 follower! Congrats!

1 Like

Hi,

I appreciate the time you put in to review my portfolio. To be clear the Airship game is my most recent work so it is the highest quality, so I understand I should develop this more and show off the programming side. Also I tried to be clear that much of the games were course so as not to misrepresent myself. Let me know if this was unclear.

You made a lot of positive suggestions on where to improve. Pretend I have limited amounts of time, which parts should I focus on? Making the airship into a published game? Polishing all of the projects and showing some code?

Thanks again for your help.

1 Like

Hello,

I was confused by the credits you gave at the end of the preview video. The description is clear to me and you wrote down everything you implemented. Perhaps it’s only my picky mind but it left me with the impression that quite a lot of things are taken from the asset store/course since it was the first thing I watched in your portfolio. You may consider removing credits from the video because they’re already under the description and it looks good to me - you are precise which assets were used for a particular project. In my opinion “Assets by (…)” with a list in the preview video doesn’t look good.

I also noticed that “Airship prototype” and “The Floor is Lava” link to Castle Cinematic site. I’m not sure if this is a mistake or you’re working on their websites and you don’t have them ready yet.

In my browsers the website loads OK, it’s not abnormally slow but I assume it’s because you uploaded your videos instead of embedding a youtube player.

Cheers,
Marcin

I don’t think there’s an issue with your games, but there’s an issue with your brand, watch this video, Rick explains it.

If you don’t have the time, I think you should be laser focused, set very specific goals, What do you want? You want to work at Naughty Dog? Maybe at… I don’t know, Gamefreak? Once you set a goal ask Who can help you, this is something Rick talks a lot about and so does Ben: “The Mad How Disease”, stop asking how and starting asking who, who can help you get in that specific studio, then you’ll know what you should focus on. All of this will take time, I’m going to be honest, if you don’t have the time you’re gonna need to find a way to make it.

Rick talks about how a change of attitude was everything for him, how his indie dev studio got investors and attention, it was because he started acting professional, he was putting of his own money, he started taking risks, putting the time, you gotta do that, you gotta take risks, you gotta put the time, you have to make sacrifices, that’s the main difference between the ones that make it and the ones that not, remember, you are not trying to get just another job, you are basically trying to get into Hollywood, the video game industry is not about tech, is about entertainment, there’s a huge difference, the entertainment industry is the hardest to work in, the hardest to get a job in, the hardest to even keep working at because it’s incredibly time consuming, watch the Playing Hard documentary to get a small glimpse of what I’m telling you, it’s not for everyone, I’m not trying to scare you, I’m giving you a heads up so you prepare yourself.

Is this a good sample of code? should I just post a picture or a text file with the code on the portfolio? Is this a useful way to show my programming skills? I’m trying to understand how best to display coding abilities.

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GameDevTV.Inventories;
using AirShip.Iventory;

namespace AirShip.Combat
{
    public class Health : MonoBehaviour
    {
        [SerializeField] float maxHealthPoints = 100;
        [SerializeField] private float healthPoints;
        [SerializeField] float timeBeforeDestroy = 1f;
        [SerializeField] GameObject deathFX;
        Equipment equipment;
        Shield[] shields;
        bool dead = false;
        float defaultMaxHealthPoints;
        float lastArmourValue;


        void Start()
        {
            //Set up health points
            healthPoints = maxHealthPoints;
            defaultMaxHealthPoints = maxHealthPoints;

            //Check equipment for health upgrades
            equipment = GetComponent<Equipment>();
            if(equipment)
            {
                // Subscribe to equipment update and check for new shields and armour.
                equipment.equipmentUpdated += checkArmour; 
                equipment.equipmentUpdated += checkShield; 
            }
        }

        void Update()
        {
            // Check health
            if(healthPoints < 0)
            {
                DestroyTarget();
            }    
        }

        public void TakeDamage(float damage)
        {
            healthPoints -= damage;
        }

        public bool IsDead()
        {
            return dead;
        }

        public float GetHealth()
        {
            return healthPoints;
        }

        public float GetMaxHealth()
        {
            return maxHealthPoints;
        }

        private void DestroyTarget()
        {
            GameObject deathFXObject = Instantiate(deathFX, transform.position, transform.rotation);
            dead = true;
            Destroy(deathFXObject, timeBeforeDestroy + 1f);
            Destroy(gameObject, timeBeforeDestroy);
        }

        private void checkArmour()
        {
            ArmourItem armourItem = equipment.GetItemInSlot(EquipLocation.Armour) as ArmourItem;
            if(armourItem)
            {
                //Add armour health to player health.
                maxHealthPoints = defaultMaxHealthPoints + armourItem.GetArmourAmount();
                healthPoints = healthPoints + armourItem.GetArmourAmount();
                lastArmourValue = armourItem.GetArmourAmount();
            }
            if(!armourItem)
            {
                //If armour was removed, remove health bonus.
                healthPoints = healthPoints - lastArmourValue;
                maxHealthPoints = defaultMaxHealthPoints;
                lastArmourValue = 0f;
            }
        }

        private void checkShield()
        {
            //Let the shield know which Health gameObject the shield is a child of.
            shields = this.GetComponentsInChildren<Shield>();
            foreach (Shield shield in shields)
            {
                if(shield)
                {
                    shield.SetShieldHost(gameObject);
                }
            }
        }
    }
}

2 Likes

The thing studios look for when checking for code skills are two main things:

  • Readable code (Since you’ll not be working alone)
  • Clean and efficient code.

Extra things that are super nice to have:

  • A commented code is always super nice and people love that, so you are on a good track.
  • Show your math skills.
  • A video explaining your code in detail would be nice and more digestible, explain your system but do it in a way a child would understand, that’s a very nifty tricky that tells others “I truly know what I’m talking about”.

Now, let me give you a quick review of your code:

  • Remove the namespaces you are not using.
using System;
using System.Collections;
using System.Collections.Generic;
  • There’s a typo here:
using AirShip.Iventory; 
  • “Health” is a terrible name for your script, specially when you are also handling armor and shields inside it. Naming is hard, but if you manage to get that correctly you’ll be one step ahead of many, many people.

  • You either declare all your variables as private or don’t:

    [SerializeField] private float healthPoints;
    [SerializeField] float timeBeforeDestroy = 1f;
  • If the next line of code is asking for a particle system then ask for a particle system, not a game object, this prevents the game designer for putting things that do not belong there.
    [SerializeField] GameObject deathFX;
  • The next variable adds nothing. You know if a target is dead if its health points are lower or equal to 0, Right? Then why have that?
  bool dead = false;
  • Why do you have 3 health values? Is there an actual good reason for it? I check the entire code and didn’t find one. You have maxHealthPoints, healthPoints and defaultMaxHealthPoints, also, two of them are exposed in the inspector, Why? You could easily remove one, also the naming is kinda confusing, What’s the difference between maxHealthPoints and defaultMaxHealthPoints? A currentHealthPoints float that shows in the inspector and a maxHealthPoints is more than enough.

  • Have you considered removing all those values and putting them in a script? You are adding a bunch of lines (talking about all those “getters”) that could have been easily put in another script. That’s actually a common convention, having your data in another script or scriptableObject.

  • Why are you calling this every frame? Why not just call it every time the ship takes damage? Why less than 0? That means the ships with this script attached can take another extra hit, Is that intended? Also the comment should be “Check if death”.

    void Update()
    {
        // Check health
        if (healthPoints < 0)
        {
            DestroyTarget();
        }
    }
  • Why the lower case “checkArmour” and “checkShield” ?

  • And finally, I have no idea what “checkShield” does. I saw the comment but I have not a single clue as to why you are doing that, the comment is a little confusing, specially when the method is name “checkShield”, that’s not checking the shield, that is setting something in the shield, don’t know precisely what but that’s what it is doing.

You might want to tell a friend or someone to check your entire code and give you feedback, that’s a very nice way to clean up your code and check places where you over-engineer things, have typos and so on.

1 Like

Thanks for your input, I will go over all my scripts like you did here before adding them to my portfolio and also have someone else look at them if possible.

Let’s talk health points if I may:

I need 3 values, I have adjusted them base on your suggestions, and added clearer comments to explain them.
base max health points -> the maximum health points the player starts with, set by the designer
max health points -> the current max health points includes buff and armour additions. (this could be calculated every time it’s needed I suppose)
current health points -> how much health the player has left.

I think having these values makes sense, or does max health seem redundant?

Long term as the scope of the game grows I will make a stats class with many of these values contained there.

Base max health points and current health points, at least to me, are doing the same thing, I would modify the base max health points instead of creating a new variable, to me, it’s more comfortable that way because it allows to confirm is health is behaving as expected right in the inspector, I could detect anomalies far easier, like something taking less or more damage than it should, and it doesn’t matter since those values would reset after exiting play mode.

What’s the best practice for showing code in a portfolio? Attach a file? Github? Screen captures?