You have a stellar idea for a new app, or you need to upgrade your business’s legacy software with the latest tech. Either way, building software involves far more than just hiring a coder. Doing so can cause problems that even your crystal ball never foresaw.
A developer’s process
- Takes your product requirements doc, begins to code according to modules needed
- Completes Module 1 portion of code,
- Tests it to some extent – single developers don’t have QA teams working with them.
- Delivers that module
- Your business runs the code, then races back to the developer. “This doesn’t work as we wanted it to! That does something totally unexpected, and the other thing crashed our servers! FIX IT!”
- The developer has now hit his ‘back’ button, fixes this, that and the other thing. In the process, he breaks something that used to work.
- Repeat #4, #5, and #6.
- Repeat Sequence 7 until the budget is exceeded, and the developer demands further funding…
Somewhere along the way, your financial team decides they’d like additions to that build. You contact that developer with desired changes/additions, resulting in uproarious laughter or “Sorry. You never said anything about adding new features!” People at your business are beginning to make rude remarks about the new cat hanging around your chair. You don’t dare admit it’s only a large pile of hair you’ve pulled out: you’re just glad nobody has donated a litter box.
Best practices for software product builds: Agile methodologies
A great software product requires far more than just coding: a meeting to lay out a Product Requirements doc detailing features best suited to a particular client. A QA team to automate testing every deliverable along the way, a team of developers, each specializing in the best techs for that portion of code, regular meetings to discuss the state of each core build with the client. An experienced software shop uses Agile methodology for project management. Agile development is a term covering a set of frameworks and practices where the focus is on the people doing the work and how they work together, especially when frequent changes and uncertainties are involved. Solutions progress through collaboration between self-organizing cross-functional teams. Agile development practices include pair programming, test-driven development, stand-ups, planning sessions, and sprints. Frameworks used include Scrum, Extreme Programming or Feature-Driven Development (FDD.) Example: Your company needs an app… You work with a group of doctors who have had a great idea for homebound COVID patients (or those with other illnesses.) Phillips has a new biotech patch out that gathers patient vital signs and critical data, including oxygen levels, respiratory rates, skin temperatures and more: You need a system to monitor the continuous flow of data, triggering alerts when one or more critical events occur such as oxygen levels lowering to a specified range, respiratory rates increasing a certain percentage, the patient’s temp rising, etc.. Alert messages should be sent to a cell phone app for processing. This app can accurately predict whether the patient’s COVID 19 has reached levels critical enough to require a trip to the ER, and a possible ventilator in the near future. You know this app will succeed in keeping patients out of over-loaded hospitals until absolutely necessary, do so without contacting doctors already slammed with work. Greatly relieve the stress of COVID 19 patients at home, not to mention scan their health ceaselessly and take action based on accurate predictions of their COVID 19 needs. If you contact a developer with this new biotech patch in one hand and the rudiments of a tech spec in the other, you’ll likely see him/her do an Olympic quality sprint in the other direction: simply too much work to be done in order to deliver such a product in a timely manner. After due research, you locate a certain shop who has already completed a dedicated web-based Remote Patient Monitoring and Care Management System with HIPAA-compliant patient monitoring, data analysis, and mobile diagnostic platforms. All that’s needed is to incorporate the new biosensor pack, add modules for its messaging and alert functions, and whatever else you and the software shop decide is required. Here is how the entire software build process works. The shop will:
- Speak to you with a laser focus on your needs, then draw up product requirements including the specific meaning of “Done”
- Design and architect the entire project
- Rapidly develop a prototype focusing on the smallest number of vital features
- Release verifiable code early & often, getting sponsor feedback often as well
- Implement changes as needed, collaborating with sponsors to minimize the cost of change
- Declare the project “done” according to everyone!
Sample Python ML module Now the project is working well with the shop eagerly blasting out module after the debugged module, updating the core app. The techs on your end are learning to use the new features as they become available – and one day you, a highly-educated physician, get curious. This project seems dead simple from your point of view, so you ask the software shop to send over some of the code they’ve written for it – just so you can see what’s involved behind such an app. How complicated can it really be?
Sample code: ML module to determine the state of COVID 19 patient
The software shop is using the NYC COVID 19 Characteristics data-set** which contains data for 7,500 COVID 19 patients including 14 features per patient. They split this data into training and test sets before normalizing and applying a scaler to them as follows:
data_set = datasets.load_COVID_patients() X=data_set.data y=data_set.target
X_train,X_test,y_train,y_test=train_test_split( X,y,test_size=0.25, random_state=0) sc=StandardScaler() sc.fit(X_train) X_train_std=sc.transform(X_train) X_test_std=sc.transform(X_test)
Data fields data set: ['mean oxygen level' mean respiration rate' 'mean BP' 'mean temp' 'oxygen level error' ' respiration rate error' 'BP error' 'temp error' 'worst oxygen level' 'worst respiration rate' 'worst BP' 'worst temp' ]
Classification outcomes: ['urgentCareNeeded' 'stable'] # Run logistic regression model to predict outcomes for home-bound COVID 19 patients
from sklearn.linear_model import LogisticRegression lr=LogisticRegression(C=100,random_state=0) lr.fit(X_train_std,y_train) y_pred=lr.predict(X_test_std)
**Caveat: we are NOT doctors; we only play them in geek blogs.
You, Dr. Fixit, read our perfectly-simple Python code; we watch your eyes cross as you mutter something about remaining a doctor. We, of course, will remain coders.
Building a software product means a lot more than developer selection
Building great software products requires excellent QA to ensure that bugs don’t crop up. Communication between clients and developers during builds is vital. A solid contract, a workable timeline, and thorough product requirements are equally as vital.
With these things in place and a bit of imagination from a client, a well-built app can mean saving lives.
Should you need a new app, or update for a legacy system, contact us.