diff --git a/Makefile b/Makefile
index 60211a35d71a0e28b9275505a2054e678263ffb8..045cb830fc6f389c4ca3c013d9815b5aba6987f7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,21 @@
 SHELL := /bin/bash
 REPO := $(shell pwd)
+GOFILES_NOVENDOR := $(shell go list -f "{{.Dir}}" ./...)
+PACKAGES_NOVENDOR := $(shell go list ./...)
 PROTOC_GEN_GO := $(GOPATH)/bin/protoc-gen-go
+
 # Protobuf generated go files
 PROTO_FILES = $(shell find . -path ./vendor -prune -o -type f -name '*.proto' -print)
 PROTO_GO_FILES = $(patsubst %.proto, %.pb.go, $(PROTO_FILES))
+PROTO_GO_FILES_REAL = $(shell find . -path ./vendor -prune -o -type f -name '*.pb.go' -print)
+
+.PHONY: build
+build: proto
+	go build -o shimmer
+
+# Protobuffing
+.PHONY: proto
+proto: $(PROTO_GO_FILES)
 
 # If $GOPATH/bin/protoc-gen-go does not exist, we'll run this command to install it.
 $(PROTOC_GEN_GO):
@@ -13,5 +25,15 @@ $(PROTOC_GEN_GO):
 %.pb.go: %.proto | $(PROTOC_GEN_GO)
 	protoc $< --go_out=plugins=grpc,paths=source_relative:.
 
-.PHONY: compile
-compile: $(PROTO_GO_FILES)
+.PHONY: clean_proto
+clean_proto:
+	@rm -f $(PROTO_GO_FILES_REAL)
+
+.PHONY: vet
+vet:
+	@echo "Running go vet."
+	@go vet ${PACKAGES_NOVENDOR}
+
+.PHONY: test
+test: vet
+	go test -timeout 30s ./... ${GOPACKAGES_NOVENDOR}