45. Resolutions and How to Keep Them

Today we have a very special New Year edition of the podcast! We chat about the idea of new year tech resolutions and the things we hope to achieve in the coming 12 months. Everyone knows that it can be hard to stick to and measure your success with resolutions, so we have a few suggestions in keeping yourself on course. The main suggestion is the the SMART goals approach which we discuss and unpack that a bit during the episode. We even apply the system to our own personal goals for 2018 for your entertainment and educational benefit. So happy new year and tune in to hear all about this and more!

Key Points From This Episode:

  • Touching up on Docker and Kubernetes.
  • Getting involved in more Open Source work.
  • What does DevOps actually mean?
  • Is it a good idea to still be interested  in crypto currency 2018.
  • The future of machine learning.
  • Online learning through platforms like Coursera and Udacity.
  • SMART goals and applying the method to specific resolutions.
  • And much more!

Transcript for Episode 45. Resolutions and How to Keep Them

[0:00:00.4] MN: Before we start the episode, I’ll make a quick announcement. Stride is having an event at Brooklyn Boulders where the title is called, Coders Who Climb in Brooklyn Boulders. Now, before I continue speaking about Brooklyn Boulders, please know that the location is in Queens which is very confusing for me who has never gone to Brooklyn Boulders before to know that there’s one in Queens. The address is 2310, 41st avenue. Long Island city, New York. 11101. If you mention Stride at the door, you will receive 15% off your admission.

[0:00:38.3] DA: That’s a good way to kick start your new year’s resolutions which we’ll be talking about in this episode so you know, come on by, Thursday the 25th, right?

[0:00:45.6] MN: Thursday, January 25th, 2018. We’ll see you there crushing your new year’s resolution.


[0:00:53.9] MN: Hello and welcome to The Rabbit Hole, the definitive developer’s podcast in fantabulous Chelsey Manhattan. I’m your host, Michael Nunez. My co-host today.

[0:01:01.8] DA: Dave Anderson.

[0:01:02.9] MN: And our producer.

[0:01:03.8] WJ: William Jeffries.

[0:01:05.3] MN: Today we’ll be talking about tech resolutions and how to keep them. I imagine we’re all going to have new resolutions in the new year.

[0:01:14.5] WJ: I don’t know man, I’m afraid, I don’t want to get on this bandwagon, I’m just going to disappoint all the listeners.

[0:01:19.4] MN: 2018?

[0:01:20.8] DA: Yeah, well, but how am I going to keep them? I’m like William, I’m going to have so many resolutions, I want to do all the things but at the end of the year, there may just be a big and second text books. Got to work through that.

[0:01:32.9] WJ: I have some ideas for haw we can keep ourselves on track? What are you guys working on though?

[0:01:40.6] MN: Me, right now at the moment, there are two things that I want to kind of get in 2018. I need to understand the world of dev ops and I’m using that word very broadly in that you know, you can’t see my arms but I’m putting them over in the air, dev ops as a saying.

[0:01:58.4] DA: It’s very graceful emotion.

[0:01:59.4] MN: Yes.

[0:02:01.0] WJ: Like a ballerina really.

[0:02:02.2] MN: It’s like –

[0:02:03.3] DA: All encompassing.

[0:02:07.2] MN: it’s more like – I need to understand like Kubernetes seems to be like what all the cool kids are using and understanding Docker.

[0:02:15.0] DA: Contain nation, yeah and orchestrating your retainers.

[0:02:18.5] MN: This guy, we need to pay on that.

[0:02:20.9] DA: I’m just dropping the terms here.

[0:02:23.1] MN: The buzz words, the cool buzz words, yeah, exactly, way too much dev ops stuff going on. I feel like you know.

[0:02:29.8] WJ: You’ve got the conductor hand signals going on. I think the orchestration would be a good pair for that.

[0:02:36.3] MN: Dev ops container orchestration, that’s what I’m trying to do right now. I think just to learn like that, get myself a feel of what that entails, the full aspect of getting – being able to do the operative work that gets the website that I can build up is probably something I’m looking forward to.

[0:03:00.6] WJ: I think that’s a smart one, this is what makes micro services not suck. Container orchestration.

[0:03:03.5] DA: Also I can just tell with your local development of personal projects and whatnot, you know? Everyone always needs to have a reproducible build and highly reliable local environment and you know, that’s like an easy way to get a win if you know what you’re doing.

[0:03:23.1] MN: I kind of need to. I kinda want to know what I’m doing in this Kubernetes. There you go. That’s my orchestration for the day.

[0:03:32.9] DA: Yeah, I remember seeing some good dev op books on reading list, there’s Continuous Integration by Jez Humble, that’s a pretty good one and like general enough concepts that is high level. It’s broadly applicable.

[0:03:38.7] WJ: You got one Dave?

[0:03:49.7] DA: Yeah, we’ve been working a lot more with the Graph QL and more in depth to the point where we’ve been looking more at like a graphine and looking at the code that they have there and also looking at the documentation and I think I can help.

I feel like I can get involved with Open Source. Yeah, I’d like to do that, I want to get some commits in there.

[0:04:11.0] WJ: Yeah, Open Source man, that’s a great new year’s resolution.

[0:04:14.4] DA: Yeah, something that I’ve kind of like wanted to do for a while but like Graph QL, it’s something that is early enough on in the adoption phase that it’s still kind of gaining traction and they still core contributors, I can sense that this is the right time to get involved with this.

It’s not like you know, I want to do a PR in Django. That seems to be crowded space and a little bit intimidating, a lot of history there where as graph QL, it’s been around for like year and a year and a half. Yeah. Get in there.

[0:04:45.9] MN: Cool. I have another one in mind and this is going to be – hopefully we can get into the topic soon on how to keep goals because I’m just going to keep stacking them and all these books are going to stay in my book shelf and I won’t be able to read them all.

But another thing I’m really interested, I think I mentioned before –

[0:05:05.6] WJ: Let me guess. Crypto.

[0:05:07.3] MN: Yeah. I want to learn more about Solidity which is Solidity is the programming language and that allows you to write smart contracts I Ethereum and I just feel like I need to learn how to smart contract.

[0:05:23.7] WJ: Man, I made a bet with my sister that if she bought $100 worth of Ethereum and it didn’t 10x over two years that I would give her $100 so there is no way she could lose money but if it did 10x or more, she’d have to give me half of her winnings. This is mostly to troll her because she had just written an article about how you should not invest in crypto currency.

[0:05:48.3] MN: My gosh.

[0:05:50.4] WJ: She took the bet on the condition that I write a Solidity contract to enforce it.

[0:05.55.3] DA: Is there going to be a corresponding article at the end of two years? Either bragging or like admitting shame?

[0:06:11.3] WJ: I think so.

[0:06:03.5] MN: Okay.

[0:06:04.7] DA: That should be in the smart contract.

[0:06:07.1] MN: Bragging edge, it will automatically send a tweet from your twitter account that brags that it happened.

[0:06:13.7] WJ: yeah. William is an idiot, check out this bet he just lost.

[0:06:19.8] MN: Exactly. Or, I win all the moneys, at least 10x my bet I just text all my bet that I just did.

[0:06:27.6] WJ: With the smart contract, you could actually have it tweet the exact amount of increase.

[0:06:32.5] MN: Yeah. I mean, it’s really interesting that you could probably get like – use the twitter API when the price hits a certain break point and then, bang, send the tweet.

[0:06:43.0] WJ: You just got to spend some gas.

[0:06:44.9] DA: Yeah, just generally block chain is pretty high right now. There’s a lot of real applications that people are trying to do, I know there’s numerous startups in New York City, like everyone wants to be the Block Chain 4x, no one wants to be Uber 4x anymore.

[0:06:58.8] MN: Right.

[0:07:00.0] DA: It’s all about the block chain.

[0:07:01.4] MN: I mean, I’ve looked it over, it looks like java script, I mean, there’s like semi colons like java script and creases.

[0:07:08.5] DA: That’s all I’m going off of.

[0:07:11.0] WJ: I screwed around with it a little bit and it seemed exactly like java script, it wasn’t until I looked through the documentation, was able to find a couple of minor differences that I realized it was not a direct implementation of the script spec.

[0:07:25.5] MN: Yeah, I think it’s like statically typed, like you have to end the meta signature, you have to mention what is the thing you're going to return kind of like java but not.

[0:07:37.5] DA: I mean, I guess that makes sense because like you can’t really have a run time error in the block chain.

[0:07:43.1] MN: I don’t think so, yeah. I mean, that smart contract can end up sending it back to your sister if she hacked the contract itself. I imagine it’s statically typed for that very same reason.

[0:07:56.1] WJ: I actually am not sure how that works. I know that there are mortal contracts and immortal contracts in Solidity.

[0:08:03.8] DA: Immortal contracts?

[0:08:05.0] WJ: Yeah, I know, isn’t that such a cool name?

[0:08:06.7] MN: Mortal contract.

[0:08:10.1] DA: That’s exactly where my mind went.

[0:08:12.0] MN: Yeah.

[0:08:13.2] WJ: Mortal contracts can die, immortal contracts can’t.

[0:08:17.6] DA: No fatalities.

[0:08:19.8] MN: I think I could be wrong and feel free to yell at us on Twitter but I believe a mortal contract is when you can send a function to kill the contract and an immortal one only can happen when the contract has been satisfied.

[0:08:34.5] WJ: Right, we need to set a goal to do a podcast episode after we know what the hell we’re talking about?

[0:08:38.9] MN: Yeah, exactly.

[0:08:39.9] DA: I was just thinking the same thing.

[0:08:41.0] WJ: Read all of this.

[0:08:42.8] MN: Yeah, exactly, we had no idea what we’re talking about and we’re going to learn from failure and it will be great.

[0:08:47.6] WJ: Right. What other goals do they have anything else?

[0:08:50.7] DA: This is like always a lofty goal for me but I always want to learn more about machine learning, at least to be able to have an intelligent conversation with someone about it and know when it’s applicable and what’s happening in the world around me because I feel like it’s becoming more and more ubiquitous and its’ good to know what limitations in technology are and what the strengths are.

[0:09:13.2] WJ: Yeah, I would also really like to learn more about all that in particular.

[0:09:17.8] DA: Yeah, taking the Andrew, deep learning class on Coursera right now. I’m two months into a one month course.

[0:09:30.0] MN: Wow.

[0:09:31.9] WJ: That happened to me too. I got to do six things and it was game over.

[0:09:34.2] DA: I did complete it, I completed it.

[0:09:35.8] WJ: You finished? Really?

[0:09:36.7] DA: Yeah, I finished it after eight weeks.

[0:09:39.2] MN: Wow.

[0:09:39.7] DA: Yeah, I was good, I’m moving on the second four week class.

[0:09:43.0] WJ: Wait, it was only four weeks? Mine was like longer than that.

[0:09:47.2] DA: Actually, so Coursera and a lot of these online learning platforms, I think they’ve wizened up to the fact that a lot of people are not completing these courses in a timely fashion because there’s just too much of a time commitment.

They’ve kind of made these stages where they chunked up one course into three, four week thing such as play every month. If you fall off the bandwagon, one month, its’ okay because they’re going to keep playing that course again next month and whenever you finally make it out and gets the next level then that course will be available to you.

I’ve seen that with not just Coursera but also Udacity and all those other platforms as well. Pretty digestible chunks that you can just jump on any time.

[0:10:33.4] WJ: I’m really glad that they’re learning how to make me learn better.

[0:10:39.5] DA: I agree, yeah.

[0:10:40.8] MN: I mean, there probably is like – I mean, I imagine that they could potentially use machine learning to learn when people actually drop out of machine learning related and so you better believe it, yeah. Of course you’re doing better.

[0:10:54.4] WJ: Isn’t injuring like one of the founders of Coursera?

[0:10:56.8] DA: Yes, stopped sharing his machine, learned all the things.

[0:11:00.3] MN: Machined learned all of you I would say.

[0:11:02.1] WJ: All right so this is a lot. There’s a lot, is there anymore?

[0:11:05.1] MN: I got one more that just came into mind. I got one more that just came into mind and I need to, 2018 is the year I’m going to be a respected developer, a respected consultant and be efficient and proficient in Vim, it’s going to happen. I have to do it. I think people will be clowning me around since I started programming especially my brother on the fact that I don’t know how to use Vim. I’m going to learn how to use Vim, I’m going to get good at it and I think I am going to start 2018. It’s happening.

[0:11:37.5] DA: Okay.

[0:11:37.9] WJ: Vim tutor man.

[0:11:38.5] DA: Yeah, my opposite goal would be to renounce Vim. Space Fax.

[0:11:45.3] MN: Oh Space Fax for the win?

[0:11:48.7] DA: Yeah, no. I would just use Atom, it’s fine.

[0:11:52.0] MN: That’s some of the goals that we have in mind and as we mentioned going back and forth and everyone here will have their input, we have to hold ourselves accountable.

[0:12:02.7] DA: Yeah, it’s a lot of goals now. I am feeling a little bit overwhelmed. I need some structure.

[0:12:07.1] WJ: All right let’s have some structure.

[0:12:09.0] MN: Cool, one of the ways that we or that I have learned to have structure in setting goals is a thing called or rather it’s the ability or rather, one of the things that I have learned about having goals is being able to have some form of structure and the method that I have used in the past is called SMART goals and SMART being an acronym. Does anyone know what SMART means in the SMART goal acronym?

[0:12:44.1] WJ: I think I got this one.

[0:12:45.4] DA: Can we ping-pong?

[0:12:46.7] WJ: Yes.

[0:12:48.7] MN: S, William go.

[0:12:50.1] WJ: Specific.

[0:12:51.6] DA: Measurable.

[0:12:52.3] WJ: A-Achievable.

[0:12:53.5] DA: R-Resourced or Responsible – well no, there’s a lot of things that R can be.

[0:13:00.5] MN: There’s a lot of them.

[0:13:01.6] WJ: Or Relevant.

[0:13:03.0] DA: Relevant too, yeah. I like that one.

[0:13:05.3] WJ: What’s the third one?

[0:13:07.1] DA: T is for –

[0:13:08.3] WJ: T is Time Bound, yeah.

[0:13:09.3] MN: T is time mix.

[0:13:10.4] DA: Oh the other R?

[0:13:11.1] WJ: There is another R right? Didn’t we decide there is I think –

[0:13:13.9] MN: Yeah I think there was, so A there’s attainable and achievable and there’s another one, awesome, yes, make it awesome and relevant and relatable, reasonable, related kind of.

[0:13:26.7] DA: Rational.

[0:13:24.5] MN: Yeah, so that’s the SMART goal that has all those things. I will read the one with the list in front of me in case people are actually trying to get this SMART down.

[0:13:37.7] WJ: It’s just “SMAT”, you know? Just pretend you’re from Boston and drop the R.

[0:13:41.3] MN: Just SMART goal, specific, measurable, attainable, relevant and time based is the five SMART goals.

[0:13:49.0] DA: Okay, so what does that mean to be specific?

[0:13:51.5] MN: I believe to be specific is going down to the most focused thing you can learn or you can do in the SMART goal.

[0:14:02.6] WJ: I think it’s about clarity of the definition, you know? Like what I want to learn Dev Ops is not specific. What does that even mean? We have a whole episode about what does the word even mean.

[0:14:16.1] DA: Right, it’s like hashtag estimates. One point stories only place.

[0:14:20.1] MN: Yeah exactly.

[0:14:21.8] WJ: Which is an estimate like you just estimate it at one point, oh god. It drives me crazy. So why don’t we pick one, who wants to volunteer to have their goal be made SMART?

[0:14:33.9] MN: I’ll do it, why not. I can use the Vim one. Let’s try the Vim.

[0:14:39.6] WJ: You want to learn Vim, okay that’s good.

[0:14:41.5] MN: I want to learn Vim. I will make it even more specific, I need to learn seven commands in Vim that I don’t already know.

[0:14:50.8] DA: That is very specific.

[0:14:52.8] WJ: Yeah and also super achievable so you nailed it down the A. You are jumping ahead there but.

[0:14:57.1] MN: All right. I mean I don’t know if it’s achieve guys, I don’t know if it’s achievable.

[0:15:00.2] WJ: Oh measurable, it is also super measurable. This is a great goal.

[0:15:02.5] MN: Okay so I have to learn seven commands in Vim that I don’t already know.

[0:15:09.4] DA: That’s specific, it’s measurable, it’s achievable, all right.

[0:15:14.3] WJ: Relevant.

[0:15:15.8] MN: Yes so I can stop getting clowned on.

[0:15:17.4] DA: But where is the time base? How much time are you going to take for that?

[0:15:20.6] MN: I will take one month to learn and I’ll ten command. Ten commands in Vim one month, let’s go.

[0:15:35.9] WJ: You do not need a month to learn ten commands with Vim. I think you just have the bar a little higher.

[0:15:40.6] MN: Hold on, so let’s do this. How about I start out within the week making Vim my default editor. Well that’s the thing because it is going to take me a month because I am going to be like, “No I am struggling here. I’m going back to visual studios.”  So I need to learn 10 commands in Vim in a month and see how fast I can do it. If I go fast then great. That’s fine but I have a month, stop getting on my time all right?

[0:16:08.9] DA: I accept your time period. I accept it.

[0:16:12.5] MN: So one month, 10 commands. I up it up, not seven, 10 commands that I don’t already know in Vim in one month.

[0:16:18.6] DA: I love it.

[0:16:20.7] WJ: I think this is great. I think it meets all of the criteria. One question, will you be satisfied at the end of that SMART goal?

[0:16:28.3] MN: I think I would. I think I getting better at Vim will allow me to be more comfortable doing having a deal with because –

[0:16:38.3] WJ: It’s not like you need to be able to be productive at work at Vim. It’s that you need to be making progress towards that. So 10 commands that might not be enough for you to feel totally proficient and comfortable in the editor but it would be enough for you to feel satisfied with your progress is that right?

[0:16.53.9] MN: Yeah, I think I will be satisfied with the progress and when I hit the 10 commands, I will reassess the goals and then make another 10 of commands that I don’t know, maybe document the first 10 that I did learn so that I can remember the ones I do know so I can then learn 10 that I don’t know and then be proficient a bit and slowly but surely every month, I can gain that proficiency where that smart goal. I want to learn Vim like that actually can be achievable at the end of the year.

[0:17:23.7] WJ: I think you are pretty much crushing on the SMART goals here. Dave?

[0:17:32.9] DA: Sign post, timing, oh man put me on the spot in the radio land for everyone. Yeah, so I think I would like to call out the Open Source contribution goal. I think that’s something that’s easy to slack off on but I don’t want to go to our board because I think there is going to be a lot of overhead to getting out there. So I would like to contribute one commit to documentation in the next month for Graph QL. That’s what I want.

[0:17:58.9] MN: One commit or one poor request?

[0:18:04.2] DA: Oh yeah, one PR. I’m going to do a lot of commits on the PR.

[0:18:07.9] MN: Yeah, all documentation.

[0:18:10.0] DA: But  would like to get a PR out there for documentation for helping people and I know that that sounds pretty small but I also know there’s going to be a lot involved in that range to actually talk to people and you have to figure out what they need to do and hey, you need to contribute and all of that. I could be way over estimating though, I think.

[0:18:28.7] WJ: I think that PR is a weird metric because they could be as small or as large as you want and I get to sense that you want this man to be pretty large. So I think that maybe one is reasonable.

[0:18:43.2] DA: Yeah, I would like to do more than add a missing comma like an Oxford comma.

[0:18:49.0] WJ: I don’t know, when I am approaching a new project like a new Open Source project, I usually want to pick one PR that is really tiny and it is something like an Oxford coma. So that I could get through the process and see how bad it is because sometimes you’ve got an absent team maintainer in your changes and never getting merged and it is the worst feeling to put in a bunch of time on making an open source project better and then have that go to waste.

[0:19:16.7] DA: Okay, yeah that’s a fair point. So then two then, one really tiny one and then the rest with all the not expert commas.

[0:19:27.3] MN: So specific and that you want to contribute to one open source project which is you chose Graph QL. Documentation update or poor request in a month.

[0:19:41.9] DA: Yeah.

[0:19:42.7] MN: Awesome, that’s specific because you chose the open source and the project that you want to work on. Measurable because you’re able to know how much is one PR or a couple commits in the PR. Attainable or achievable because you can always read the read me and figure out how to contribute.

[0:20:02.5] DA: I guess if they are missing math then that would be the first step.

[0:20:05.0] MN: Right, relevant because you actually use Graph QL and will be relevant in your line of work that allows you to, “Hey I’ve make minced to Graph QL, yay.” which is really cool and it’s time based because you want it in a month.

[0:20:16.2] DA: Yeah, all right.

[0:20:19.4] MN: Cool.

[0:20:20.2] DA: Last one.

[0:20:21.0] WJ: No.

[0:20:22.0] MN: You can’t escape.

[0:20:24.3] DA: You can’t escape.

[0:20:24.0] WJ: Oh they’ve got me cornered.

[0:20:25.9] MN: So yes, so it’s solidity, you have the right of SMART contract. Dude, you’re making money bro, you can win this back.

[0:20:33.4] WJ: All right fine, okay I’ll do the smart contract goal. Yes, that one makes sense.

[0:20:37.0] MN: All right, cool. So you need to?

[0:20:39.5] WJ: I need to have a contract written to enforce this bet with my sister by the end of January.

[0:20:44.4] MN: By the end of January.

[0:20:46.0] WJ: Yeah.

[0:20:46.8] MN: Okay, so let’s see it’s specific because you have to create this contract in solidity.

[0:20:53.6] DA: Is it measurable if it’s one contract?

[0:20:57.1] WJ: Well it’s going to be in the Ethereum block chain. So that’s pretty measurable, anybody can measure it exactly some portions.

[0:21:06.1] DA: So we can tweet out the specific block chain address?

[0:21:08.1] MN: Not only that but you can also tweet out I believe the smart contract like transaction ID like the idea of the smart contract itself when you actually complete it.

[0:21:16.6] WJ: Ooh that will be a fun victory thing.

[0:21:20.0] DA: Yeah, people need to know. It would be the only thing that we tweet. We have tweeted out on a regular figure, right? How is our event on Twitter?

[0:21:26.3] MN: Exactly, how do you even -

[0:21:26.0] DA: 2017 goals maybe that should also be a collective SMART goal.

[0:21:32.5] MN: This collective smart goal is to use Twitter, all of us.

[0:21:35.3] DA: To have this on Twitter.

[0:21:36.2] WJ: 2018’s SMART goals.

[0:21:36.2] DA: Place it on Twitter so that somebody else know.

[0:21:38.8] MN: Yeah so I think being able to use a habit, have it measurable and that you can actually get the idea of the smart contract out there. Attainable, I think it’s possible they have documentation online that teaches you how to create a smart contract in solidity. It’s relevant because crypto currency is the hot new thing. All the cool kids are doing it and you gave it a time. You said the end of January which is one month.

[0:22:10.1] DA: Yeah, the clock is ticking.

[0:22:11.0] MN: There you go. So we all got the end of January goals.

[0:22:13.4] DA: We do, yeah. I think this means that we need to have a February follow up.

[0:22:17.1] MN: Yeah, I think we need to follow up. You will catch us on the next episode in February or so how we did, what 10 commands. I will have to stand here and shout them I guess with you.

[0:22:27.5] DA: Bring the 10 commandments in.

[0:22:31.0] MN: I will bring the 10 commands I learned in the stone tablets.

[0:22:34.9] WJ: That is a good way to remember them if you have to chisel them in stone.

[0:22:39.0] DA: Right, you will not forget that.

[0:22:40.7] MN: I hope not. Oh man, yes I will definitely try and get those. We will try to get those smart goal. I will try and get those SMART goals done and I think we all had some pretty small measurable SMART goals in behind. So if you are listening to this and you have any resolutions that pertain to the text base, use the SMART goal because it is a very easy way for you to take something that could potentially be very massive into small measurable and achievable goals that you can then move forward and build on top of as you progress in your career.

[0:23:19.0] WJ: And tell us on Twitter what your New Year’s Resolution was @radiofreerabbit.

[0:23:25.0] MN: Yeah that would be really cool just to see what other people have in mind and what they want to achieve in 2018.

[0:23:30.3] DA: Nice. I’m ready for the New Year, let’s do it.

[0:23:33.0] MN: Let’s do it, 2018 let’s go. Let’s get it, cool. So to wrap up, I’d like to thank my co-host, Dave always a pleasure. Thanks for sharing your SMART goals.

[0:23:43.7] DA: Thanks man.

[0:23:44.5] MN: And our producer, William, your SMART goal is amazing.

[0:23:47.1] DA: Great job man.

[0:23:48.2] WJ: Oh thank you, much appreciated.

[0:23:50.0] MN: I’m Michael Nunez. Feel free to hit us up at Twitter.com/radiofreerabbit and if this is your first time listening, please like and subscribe. This is The Rabbit Hole, we’ll see you next time.

Links and Resources:

The Rabbit Hole on Twitter

Brooklyn Boulders



Continuous Integration

Graph QL

Open Source