So you are starting out your Nova journey, where is a good place to
start?

If you’d like to learn how Nova works before changing anything (good idea!), we
recommend looking for reviews with -1s and -2s and seeing why they got
downvoted. There is also the Code Review Guide for Nova. Once you have some
understanding, start reviewing patches. It’s OK to ask people to explain things
you don’t understand. It’s also OK to see some potential problems but put a +0.

First concentrate on solving your problem and/or use case, don’t fixate
on getting the code you have working merged. It’s likely things will need
significant re-work after you discuss how your needs match up with all
the existing ways Nova is currently being used. The good news, is this
process should leave you with a feature that’s more flexible and doesn’t
lock you into your current way of thinking.

A key part of getting code merged, is helping with reviewing other
people’s code. Great reviews of others code will help free up more core
reviewer time to look at your own patches. In addition, you will
understand how the review is thinking when they review your code.

Also, work out if any on going efforts are blocking your feature and
helping out speeding those up. The spec review process should help with
this effort.

Why is it worth creating a bug or blueprint to track your code review?
This may seem like silly process, but there is usually a good reason
behind it.

We have lots of code to review, and we have tools to try and get to
really important code reviews first. If yours is really important, but
not picked up by our tools, it’s possible you just get lost in the bottom
of a big queue.

If you have a bug fix, you have done loads of work to identify the
issue, and test out your fix, and submit it. By adding a bug report, you
are making it easier for other folks who hit the same problem to find
your work, possibly saving them the hours of pain you went through. With
any luck that gives all those people the time to fix different bugs, all
that might have affected you, if you had not given them the time go fix
it.

It’s similar with blueprints. You have worked out how to scratch your
itch, lets tell others about that great new feature you have added, so
they can use that. Also, it stops someone with a similar idea going
through all the pain of creating a feature only to find you already have
that feature ready and up for review, or merged into the latest release.

Hopefully this gives you an idea why we have applied a small layer of
process to what we are doing. Having said all this, we need to unlearn
old habits to move forward, there may be better ways to do things, and
we are open to trying them. Please help be part of the solution.

In the draft process guide, I discuss how doing reviews can help get
your code merged faster: Nova team process.

Lets look at some of the top reasons why participating with code reviews
really helps you:

Doing more reviews, and seeing what other reviewers notice, will help
you better understand what is expected of code that gets merged into
master

Having more non-core people do great reviews, leaves less review work
for the core reviewers to do, so we are able get more code merged

Empathy is one of the keys to a happy community. If you are used to
doing code reviews, you will better understand the comments you get
when people review your code. As you do more code reviews, and see
what others notice, you will get a better idea of what people are
looking for when then apply a +2 to your code.

TODO - needs more detail

What are the most useful types of code review comments? Well here are a
few to the top ones:

Fundamental flaws are the biggest thing to spot. Does the patch break
a whole set of existing users, or an existing feature?

Consistency of behaviour is really important. Does this bit of code
do things differently to where similar things happen else where in
Nova?

Is the code easy to maintain, well tested and easy to read? Code is
read order of magnitude times more than it is written, so optimise
for the reader of the code, not the writer.

TODO - what others should go here?

Let’s look at some problems people hit when starting out doing code
reviews:

My +1 doesn’t mean anything, why should I bother?

So your +1 really does help. Some really useful -1 votes that lead
to a +1 vote helps get code into a position

I have already reviewed this code internally, no point in adding a +1
externally?

Please talk to your company about doing all code reviews in the
public, that is a much better way to get involved. showing how the
code has evolved upstream, is much better than trying to ‘perfect’
code internally, before uploading for public review. You can use
Draft mode, and mark things as WIP if you prefer, but please do
the reviews upstream.

You don’t have to be nova-core to be a valued member of the Nova
community. There are many, many ways you can help. Every quality review
that helps someone get their patch closer to being ready to merge helps
everyone get their code merged faster.

If you feel like you have the time to commit to all the nova-core
membership expectations, reach out to the Nova PTL who will be
able to find you an existing member of nova-core to help mentor you. If
all goes well, and you seem like a good candidate, your mentor will
contact the rest of the nova-core team to ask them to start looking at
your reviews, so they are able to vote for you, if you get nominated for
join nova-core.

We encourage all mentoring, where possible, to occur on #openstack-nova
so everyone can learn and benefit from your discussions.

The above mentoring is available to every one who wants to learn how to
better code reviews, even if you don’t ever want to commit to becoming
nova-core. If you already have a mentor, that’s great, the process is
only there for folks who are still trying to find a mentor. Being
admitted to the mentoring program no way guarantees you will become a
member of nova-core eventually, it’s here to help you improve, and help
you have the sort of involvement and conversations that can lead to
becoming a member of nova-core.