Skip to content

Instantly share code, notes, and snippets.

View nitindhar7's full-sized avatar

Nitin Dhar nitindhar7

View GitHub Profile
Category Signals State
Impact - Outcomes were achieved
- Key stakeholders are happy
- Revenue targets were met
- NPS going up
- North star metric improving
OK
Morale - Process continues to improve
- High team chemistry (people escalations)
- Rotations for oncall, ceremonies, etc
- Engagement during meetings
OK
Accountability - Project delivery
- Low bug count
- Low high SEV incidents
- Company engagement (e.g. release notes, demo days, etc)
WARN (recent projects were delayed)
Productivity - DORA metrics (e.g. TTM, deployment frequency, etc)
- High developer happiness
ALERT (local builds getting slow)
Technical ownership - p95 page load time
- p95 API latency
- Infrastructure cost is not ballooning
OK
@nitindhar7
nitindhar7 / engineering-management-cadence.md
Last active March 13, 2024 02:40
Engineering Management - Cadence

Daily

  • Support your people
  • Unblock and de-risk
  • Administrative duties
  • Communicate updates internally
  • Provide downward feedback

Sprintly

  • Review key metrics
  • Assess team happiness
@nitindhar7
nitindhar7 / react-native-notes.md
Created February 3, 2017 03:53
Things I learned the hard way using React Native

Things I learned the hard way using React Native

Set up your environment carefully: It's important to have one canonical source of truth per environment, per platform. (i.e. iOS Development, iOS Testflight, iOS Production, ditto Android.) Every time you build, your config should propagate values from one input source (per platform) to either Java/JavaScript or Objective-C/JavaScript. Here's what we did for Android and here's what we did for iOS. I don't doubt that you can do better. Please do better. But you can't say that we didn't have one canonical source of truth that worked very simply and effectively throughout the development process.

Don't wait until the end to develop Android and iOS concurrently: Even if you're not actively focusing on both platforms, don't assume that "RN is cross platform… we can develop iOS and flip the Android switch when we'r

{
"name": "AppName",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start"
},
"dependencies": {
"bugsnag-react-native": "^1.1.2",
"es6-promise": "^4.0.5",
@nitindhar7
nitindhar7 / ForComprehensionIfGuard.scala
Created June 29, 2016 16:25
Test to see if for-comprehension yields result with a failing if guard
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
(for {
a <- Future.successful("a")
b <- Future.successful("b") if 1 > 0
c <- Future.successful("c") if 0 > 1
} yield (a, b, c)).foreach(println)
@SqlUpdate("INSERT INTO posts(title, tags) VALUES (:title, :tags)")
int createPost(@BindPost Post post);
@BindingAnnotation(BindPost.PostBinderFactory.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface BindPost {
class PostBinderFactory implements BinderFactory {
public Binder build(Annotation annotation) {
return new Binder<BindPost, Post>() {
public void bind(SQLStatement q, BindPost bind, Post post) {
Array array = q.getContext().getConnection().createArrayOf("varchar", post.getTags());
q.bind("title", post.getTitle());
// Mapping a string array to `varchar[]` in Postgres
String[] tags = ...
Array array = q.getContext().getConnection().createArrayOf("varchar", tags);
/**
* name - column name
* value - data to be bind to column
* sqlType - SQL data type to map to
*/
bindBySqlType(String name, Object value, int sqlType)
@SqlUpdate("INSERT INTO posts(title, tags) VALUES (:title, :tags)")
int createPost(@Bind("title") String title, @Bind("tags") List<String> tags);