Promoting Systematic Practices For Designing And Developing Edge Computing Applications Via Middleware Abstractions And Performance Estimation