# Minimal viable code

**URL:** <https://discuss.ipfs.tech/t/minimal-viable-code/11538>\
**Category:** Help\
**Created:** [June 16, 2021, 5:19am UTC](https://discuss.ipfs.tech/t/minimal-viable-code/11538 "2021-06-16T05:19:19Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![chl501](https://avatars.discourse-cdn.com/v4/letter/c/ad7895/32.png) [@chl501](https://discuss.ipfs.tech/u/chl501)\
**Post date:** [June 16, 2021, 5:19am UTC](https://discuss.ipfs.tech/t/minimal-viable-code/11538/1 "2021-06-16T05:19:19Z")

</div>

I do not know if this is the right place to ask. But here is my question. I want to learn libp2p under the hood. So I suppose that might be a good practice by reimplementing a very small part of the libp2p. However I am completely new to libp2p. Is there any suggestions on this such as the start point of code base?

Thanks

---

<div class="post-metadata">

**Author:** ![hector](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ipfs.tech/hector/32/178_2.png) [@hector](https://discuss.ipfs.tech/u/hector)\
**Post date:** [June 16, 2021, 12:23pm UTC](https://discuss.ipfs.tech/t/minimal-viable-code/11538/2 "2021-06-16T12:23:04Z")

</div>

Pick up an example (i.e. [go-libp2p/examples/echo at master · libp2p/go-libp2p · GitHub](https://github.com/libp2p/go-libp2p/tree/master/examples/echo)) and then try to figure out what something like NewStream() actually does by tracing the code. This will take you to “places”.

---

<div class="post-metadata">

**Author:** ![chl501](https://avatars.discourse-cdn.com/v4/letter/c/ad7895/32.png) [@chl501](https://discuss.ipfs.tech/u/chl501)\
**Post date:** [June 16, 2021, 1:52pm UTC](https://discuss.ipfs.tech/t/minimal-viable-code/11538/3 "2021-06-16T13:52:20Z")

</div>

Thanks for the suggestion!
