Repeatability is the key for the success of IT projects and this can be otherwise termed as “well-defined process”. In this post, I am sharing what I follow in all of my greenfield software development projects as simple checklists which I and my team are following nearly a decade. I am continuously refining, refactoring or tweaking the checklist as per the changes in the technology and infrastructure.
I would strongly recommend trying if you don’t have one. I tried listed in chronological order without any supporting explanations but for anyone who is Project / Account Managers, Solutions / Technical Architects or Software engineers can easily understand
1. Project Code
2letter client name + 3 letter project name + D or M or T + 1 to N
D – Development
M – Maintenance
P – Porting
T – Testing
1 – N = Phase 1, 2 … N
Example: CWCMPD1 [Chance World Car Market Place D 1]
2. Git Hub Repository
3. CI/CD & Infra setup
- Mobile Android
- Mobile iOS
- Test flight set up
- Appliance setup – Dockers in virtual box (& direct install in the PC or EC2 Linux)
- AWS / AZURE cloud configuration (As applicable)
- Access permission
- Infra Cost
- Servers & Disk space
- Backup and restore
- Vulnerability patch management
4. Rest Endpoint links with some naming conventions (Start with dev first then Test or Staging and Production)
5. Paper work
- SOW / Work order
6. Database (in Postgres)
Admin user: admin
Admin password: password
- Slack named as <ProjectCode>
8. Team structure
- Front-end developer web/mobile
- Test engineer (functional, Security, performance,)
- DevOps Engineer
- Project manager
- Technical writer
9. Tools used
- Bitrix / JIRA / Github Projects etc.
- Mockaro /faker
- Virtual box
10. Project Setup in PM tools like Github Projects / Bitrix / JIRA
- Project Creation
- Team member allocation
- Client contacts
- Sprint or Milestone setup (For each sprint)
- List all Business functions
- List all test casesi. Functional
- Defects / Bugs (Cycle 1, Cycle 2, Cycle 3)
- Devops Tasks
- Wireframe Tasks
- HTML Tasks
- Backend / Server / API Tasks
- Front-end tasks – Web
- Front-end tasks – Mobile website
- Front-end tasks – IOS Mobile
- Front-end tasks – Android Mobile
- Wiki page setup (in GitHub as markdown pages or Bitrix template)
- Getting Started
- Environment Setup
- Release links
- Business Architecture
- Process Flows
- Technical Architecture
- Software & Hardware Requirement
- Open Source Libraries & Frameworks
- Technical Deep Dive
- Data dictionary
- Project Dashboard in Kibana (as bitrix in-app)
- Weekly Status Reports
- Steering Committee Reports
- User Guide
- Releases (with release notes)
- Project wiki
- Rest end points
- Mock data creation
- Kibana reports
- Repo permissions
Sharing here my time-tested agile front-end development methodology I have been using in all my greenfield development projects with success with my team comprises of:
- UI/UX Engineers with business and creative acumen
- HTML programmers
- Front-End engineers experienced in building Angular and React.JS mobile and web applications of any size
- REST API (Backend) developers
- DevOps engineers.
I pictorially depicted the development process. It has 5 major steps
- Entire application visuals, pages, forms etc. etc. created in Invision with exactly how we wanted the finished application would look like with the ability to navigate each screen by clicking on action buttons as-if we are using the real application. We can collect feedback on each screen within the invision with comments coach marks.
- Once the visuals are approved, the base application or skeleton application built in clean HTML and CSS by professional HTML programmers. You need highly skilled HTML programmers, not the ones who can create an APP using Twitter bootstrap or copycats.
- Then, build React.JS and REST API simultaneously
- Create the React.JS or Angular.JS application using the just created HTML and CSS templates and wire-up each screen with mock JSON Data
- Build the REST APIs using the programming language and framework of our choice. I use Node.JS (Sails.JS) or Java (Spring) or Python (Flask) as lambda functions and exposes it thru API gateway. Before the actual development, we finalize every endpoint mapped to the user interface with mock data leveraging integration response in AWS API Gateway. We also use Mockaroo or Facker.js to generate synthetic data to mimic production data.
- then, integrate the Front-end and Back-End and continue to deploy and test the application. 90% of the time, there will (should) not be any changes in the REST Endpoints between mock and actual REST API. It should be a black box for the front end developers.
- Go-live from the day we completed step # 2. Our DevOps automate the build and deployment process and release the packaged code as docker image as well as host it in AWS S3. We create 3 main environments with various configurations (we follow conventions over configuration approach)
- Development – Every day or alternate days we release current dev. branch version with new web links without destroying previous dev. releases
- Staging – Every week we release staging deployment for the client to test and collect feedback
- Production – Case by case basis, we release production version when we do Staging release to make sure the code works in production as expected without any last minute hassles.
We Use Buddy Works for Continuous Integration workflow from Github code pull to Build to package, version bump, deploy, back-up & roll-back, slack notification and sending emails the build URL to project team members and stakeholders.
Note: The diagram I used in this post is created using creatly. You can get the original editable diagram from my GitHub as part of giving back to the opensource community.
Writing software technical proposal is art and it requires experience and expertise from different skill sets however IMHO any software architects should be able to create such proposals individually but the reality is not true.
In large organizations, there is a dedicated team called “Presales” whose job is to create proposals and respond to RFP & RFI’s, participate in war rooms, running thru proposal presentations, participate in requirements understand and Q&A sessions. Usually the Pre-sales team comprises of Business Development executives, Software Architects / Leads, Engineers / Developers / QA Specialists, Technical Writers, Business Analysts, Business Finance Executives, Project Managers etc. etc. but the role of the Architect is crucial and everything revolves around his deliverables i.e. estimates, solution architecture etc. and based on that the rest of the team arrives with effort, cost and schedule estimates.
Finally, the packaging of the proposal requires documentation, organizing and presentation skills and in my experience many companies and individuals struggle to make one nice proposal due to lack of experience, confidence and finally lack of templates hence I wanted to open source the work I have been doing for many years as Architect and sharing the skeleton proposal template that can be downloaded from my public GitRepo
A preview of the Techno-Commercial proposal’s Table Of Contents is given here
AZ-Tech Radiology is one of the leading medical imaging organization that provides the highest quality imaging services utilizing state-of-the-art equipment and technologies in Arizona. Our primary goal is “Keeping the referring physician happy”, all roads lead to the ease of delivery of “radiology reports” to them and their sending of orders to the lab”
In order to meet the goal, we have to have state of the art technological solution which drove us to build the new cloud based connected IT systems:
- Radiology Information System
- HL7 Interface Engine which connects all of our modalities, external EMR and Insurance companies, pushing data to the cloud in a secure manner.
- Promotional Website @ https://www.aztechradiology.com
- Physician Portal to delivering the reports @ https://provider.aztechradiology.com/
- Physician mobile app @ https://m.provider.aztechradiology.com/
In this blog post I would like to share the Architecture we came up with which powers our IT systems.
HL7 Interface of our Modalities (Imaging equipment) with RIS
Industry standard HL7 messages going out from RIS & coming in to Helen RIS
||Add person information
||Update person information
||Unsolicited transmission of an Observation message
||Notification of new appointment booking
||Notification of appointment modification
||Notification of appointment cancellation
End-to-end HL7 interface engine – on-prem to cloud connectivity
Industry standard HL7 messages going out from RIS & coming in to Helen RIS
- Available On Web And Mobile
- Highly Secure With Two Factor Authentication
- Immediate Near Real Time Access To Reports
- Text/Email Notification When Stat Report Is Ready
- Reports Can Be Searched By Dob, Patient Name, Date Etc.
- Reports Can Be Filtered By Stat
- Lightning Fast Free Text (Natural Language) Search Against Reports Powered By Elasticsearch & Lucene Index
- Cross The Border – (we call Inter State) : Multi Location Clinics Can Search Reports /Patients Across Their Locations Served
- Cross The Border – (we call Inter Country) : Providers Can View Reports Of Other Providers With Online Consent
- Reports In Hl7 Format Can Be Exported To Import Into Their EHR System
- Orders Can Be Placed Online – Hl7 Upload And Forms Based Upload
- High Resolution Diagnostic Images Can Be Viewed Online Without Any Client Tools Installation.
- Real-Time Analytics / Kpi Dashboard For Clinic Administrators
- Create And Manage Your Users & Roles Online
- View Who Did What, When?
- Free Integration With our partner’s EHR / EMR Software’s For Orders And Reports
- HIPAA Compliance ready
After we implemented the solutions in phased manner starting from Jan 2018 uptil now, following are the benefits we gained
- Average speed of our report delivery time reduced from days to minutes
- Cost of the delivery of reports reduced multi-fold otherwise we enagened half a dozen employees faxing the reports to the physician office manually
- We can deliver the reports to physican hands thru our mobile solution
- We automated the sending of Fax (reports) to the clinics who still needs paper copy of the reports
- Customer satisfaction thru enhanced user experience in the form of simple to use web and mobile application
- Powers 1000’s of reports per day with ability to auto-scale to handle more reports in the future
I just wanted to share how we built our public facing Radiology website https://www.aztechradiology.com developed using our homegrown minimalistic, lean & mean CMS framework called as “Helen CMS” built on top of Angular.js and Node.JS libraries
Features of our home grown Helen CMS
- Built for speed of the development
- Blazing fast
- Clean code separation
- Template driven user interface
- Highly scalable
- No database required
- Deploy by git / Gulp tasks
- First class support for AWS Deployment
- Hosted in server less environment AWS S3
- Can run in AWS free tier – Zero operating cost
- App in appliance (Container ready) for xcopy deployment on local server (on-premise) or on the cloud
- 100% offline capabilities implemented through advances cache, Local Storage and Index DB with automatic cache busting and refresh
- RESTAPIs can be built on any programming language of your choice, we use Node.JS deployed as Lambda Services and exposed through API Gateway
- Each lambda services built on SRP (Single responsibility Principle) design principles and they are completely loosely coupled
- Built on Micro services architecture
- User actions persisted in lightweight database for analytics
- Fluid page rendering without freezing the UI
Though I have been using and advocating Angular.JS for nearly 5+ years but fell in love with React.JS due to its simplicity, performance, adoption by developer communities and enterprises. When it comes to teaching newcomers to learn React.JS, always struggled with where to start i.e. Pluralsight video, reactjs.org, google search etc. hence publishing this articles for newcomers and this is purely my personal preference.
As I said, there are hundreds of ways to start learn React.JS for beginners however the following 5 part video tutorial by Telmo Sampaio is my recommendation. This doesn’t cover backend interaction like Restful services but the environment setup, project creation, understanding the folder structure, UI components are covered pretty well.
1. Windows PowerShell or command line
2. Node.JS https://nodejs.org/en/
3. IDE https://code.visualstudio.com/
It’s been few years I didn’t get into blog writing on regular basis which I wanted to cut it out and get back to share all of my technical, business, techno marketing encounters from my past 2 ~ 3 years which helped me, my employer, my team here at onsite and offshore and the clients I worked with. It will be a series of blog posts and I am pretty sure all of them will be useful to the readers from various background and experiences.
The way we build software has changed stupendously from Monolithic Architecture (MLA) using single programming language to a Microservices Architecture (MSA) where pieces of code developed in multiple different programming language that fits the problem in hand. Microservice has numerous benefits and encourages Single Responsibility Principle (SLP) with quick deployment and easy to change lifecycle without impacting the fatty software.
AWS offers easy way to implement microservices through RESTful APIs wrapped against AWS Lambda functions in a server less backend that can auto scale with built in security via its IAM. AWS offers 12 months free tier which enable you to get hands-on experience with AWS Cloud Services.
To demonstrate the power of AWS API Gateway & Lambda, I quickly dropped my flicker photo search node.js code as lambda function wrapped in AWS API Gateway and exposed it as REST API Endpoint.
AWS lambda does not support 3rd party npm so make sure to upload all of your 3rd party node_modules. AWS Lambda & API Gateway Getting Started guide will be your good head start.
API END POINT
Following are the SILVER BULLETS when I create REST APIs. These were originally published here in the year 2014 and the credits goes to them but my true salute goes to OMAR AL ZABIR who published with sample source in C# in his blog post Build Truly RESTful API and Website using Same ASP.NET MVC Code way back in 2012 where he talked about RESTful services naming conventions and leveraged the Controllers from ASP.NET MVC exported as REST API without using API.NET WEB API using content negotiation and http header (point # 5 below)
Use nouns but no verbs
GET method and query parameters should not alter the state
Use plural nouns
Use sub-resources for relations
Use HTTP headers for serialization formats
Use Hypermedia as the Engine of Application State (HATEOAS)
Provide filtering, sorting, field selection and paging for collections
Version your API
Handle Errors with HTTP status codes
Allow overriding HTTP method
Do not end here but head over to the above mentioned two blog posts to gain the internals.
There are number of ways one can create AngularJS web application and often times we search for seed projects for bootstrapping. For AngularJS plenty of seed projects out there in the web but the one from YEOMAN is lean, clean with outstanding code lab which is super simple for anyone from novice to advance.
YEOMAN – Create New web projects
BOWER – Search, Add and Manage dependencies
GRUNT – Task runner i.e. watch, preview, bundle, build, test and the list goes
SURGE– Static web publishing for front-end developers. Using grunt-surge npm package, you can automate the deployment through grunt cli with the command grunt deploy