# Development

![Example of connected IRI nodes](/files/-LbiI9Fv8YrK8Ixj3UOq)

In the previous chapter, we glanced on the above image. For the purpose of development, it is very important to have a somewhat decent understanding of how IRI and the network function. The network is composed of IRI nodes (shown in the above image). Whenever an IRI receives a new transaction from one of its neighbors, it first checks whether it has already received it, and if not, the node saves the transaction, then forwarding it to the other neighbors. That means that we are able to send a transaction to whichever IRI node within the network we want and that node will distribute it to the others. We must also take into consideration propagation times, as the laws of physics prevent our transactions from reaching the other side of the network instantly.

The easiest way for a developer to think of IRI is just like a RESTful API/web service. It is a web service somewhere on the planet, and you send requests and get responses. Simple, right? Well, it gets even easier by using libraries developed by the IOTA Foundation and community developers. The Java, JS and Go libraries are very well supported by the IOTA Foundation, but since this is a C# guide, we will be using the [***tangle-net***](https://github.com/Felandil/tangle-.net) library for .NET, which is being supported and developed by our community member Felandil. We can find Felandils official Tangle-net documentation of the library [here](https://tangle-net.readthedocs.io/en/latest/index.html).

Before we start, there are a few things left to mention. We must choose which network we are going to use for development and testing purposes. We have three choices here: the so called *mainnet*, which is the main IOTA network - the production network if you will, we also have a public *devnet,* which is the development network where we are able to [obtain free tokens](https://faucet.devnet.iota.org/) and its purpose is as the name suggests - development, and finally, we have something called *privatenet*. The difference between devnet and privatenet is that devnet has a Compass run by the Foundation and the entire network is public. Within the privatenet, we have to setup the Compass and form the network ourselves. That gives us complete control over the entire network. For the bigger PoCs, it is recommended to start with the privatenet but for the purposes and simplicity of this documentation we will be using the public devnet.

[**If you're interested in checking out the official documentation by the IOTA Foundation I would very much welcome you to do so!**](https://docs.iota.org/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://patriq.gitbook.io/iota/development.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
