1. Estimating takes care and time
Making software is HARD!! Doing it right will cost you money. And yeah.. months. And you will want to pay for every drop of sweat and every minute they work for you, cause developers are hard working women and men, like yourself. Especially starters need to be paid. They are bad in estimating and work for pennies. You could call it self-inflicted slavery, but which many people support by wanting it CHEAP and FAST. Shamelessly. People need to understand how developers work.
To explain a little:
With every new software project there are many questions involved. We need to answer these in great detail to find out how long every step takes.
Business:
- What features will it have?
- What are the use case scenario's per feature?
- How many users per hour do I expect?
- What will be expected the costs of the hosting?
- Will I need to store data mutations or event streams?
- What parts are obvious, complicated, complex or chaotic?
see this: https://en.wikipedia.org/wiki/Cynefin
- Who do I need to hire and for what task?
- When the app is ready for it's first launch, how am I going to sell it?
- etc
Frontend:
- How does you system need to look and feel?
- Are we building a task based user interface?
- What javascript framework are you going to use, if any?
- What content do I need to write?
- Do I have to automate frontend development processes?
- Browser compatibility
- etc
Backend:
- What server-side language will I use?
- What kind of database do I use?
- What framework shall I use?
- Do I need to consider CQRS and Eventsourcing?
- Do I need an extremely well done Domain model
- What server tooling do I need?
- What about continuous deployment, integration etc ?
- Cost of introduction, change and ownership?
- What database will I use? Do we need more?
- What caching shall I use? Reversed proxy?
- What webserver will I use?
- Will we write Tests? TDD, BDD, etc?
- etc
Server:
- Webserver?
- Docker?
- VM?
- OS
- Datastorage
- Maintenance
- Security
- etc
After determining all this stuff and loads and loads more, we then decide on how long every part of the sum takes. We estimate.
Then you could do two things: Waterfall or Agile development.
After reading what you want to build, I'd say you have a hard and long project with loads of depths in all of it parts. And it's impossible to give a fixed price and timespan for the project if you do not thoroughly plan the whole thing in a technical document including specs.
This document could be much longer, but I hope you see the points I try to make.
2. Technology can only be chosen after some research
-edit- I didn't answer the second question, because of the things I explained above. Loads of questions arise:
- how many users will you support simultaneously?
- when we know that, we'll get the hardware specs
- what countries will we support?
- some countries might need different communication protocols
- do we need tech support, to install additional things, like flashplayer, silverlight, java, or what have we?
- what server do we need?
- do we use nginx-pushstream or other async tooling?
Skype has a list on it's site about bandwidth:
<table style="width:100%; text-align:left"> <tbody> <tr> <th>Call type</th> <th>Minimum download <br> / upload speed</th> <th>Recommended download <br> / upload speed</th> </tr> <tr> <td class="first-child">Calling</td> <td>30kbps / 30kbps</td> <td class="last-child">100kbps / 100kbps</td> </tr> <tr> <td class="first-child">Video calling /<br> Screen sharing</td> <td>128kbps / 128kbps</td> <td class="last-child">300kbps / 300kbps</td> </tr> <tr> <td class="first-child">Video calling <br> (high-quality)</td> <td>400kbps / 400kbps</td> <td class="last-child">500kbps / 500kbps</td> </tr> <tr> <td class="first-child">Video calling<br> (HD)</td> <td>1.2Mbps / 1.2Mbps</td> <td class="last-child">1.5Mbps / 1.5Mbps</td> </tr> <tr> <td class="first-child">Group video<br> (3 people)</td> <td>512kbps / 128kbps</td> <td class="last-child">2Mbps / 512kbps</td> </tr> <tr> <td class="first-child">Group video<br> (5 people)</td> <td>2Mbps / 128kbps</td> <td class="last-child">4Mbps / 512kbps</td> </tr> <tr> <td class="first-child">Group video<br> (7+ people)</td> <td>4Mbps / 128kbps</td> <td class="last-child">8Mbps / 512kbps</td> </tr> </tbody></table>
source: Skype https://support.skype.com/en/faq/FA1417/how-much-bandwidth-does-skype-need
You will need an intermediate service in between the two clients.
Like you see.. there are loads of things that are still needed to give an answer. Planning will take some time and a lot of conversations about your goals and idea and what is within your budget.
Agile development will most likely be your best option, because you will be given your application in time functional pieces. Then you can decide on the upfollowing sprint's features that will or will not be build or bugs that will be solved. Design that will need to be altered, etc.
Hope my answer helped ;)