Plant care apps (PictureThis, Planta, Greg) and pet care apps (11pets, Pawtrack) seem niche but pop up frequently in mobile system design interviews. They combine ML image recognition, schedule management, push notifications, and the unique challenge of building habits around things that cannot remind you themselves.
Functional requirements
- Add plants/pets to your collection — the core entity model. Each item needs a species, a nickname, a location (which windowsill, which room), and an acquisition date that seeds the first care schedule.
- Identify a plant via photo (ML) — the hook that gets users in the door. Interviewers probe how you handle low-confidence results: return the top three candidates with confidence scores rather than one wrong answer.
- Schedule care tasks (water, fertilize, vet appointment) — each task carries a type, an interval, and a next-due timestamp. The schedule engine is the real backbone of the app, not the ML.
- Reminders before tasks are due — the feature that actually drives retention. Discuss how a missed reminder should behave: does the task roll over, and does the next interval recalculate from the completed date or the original due date?
- Track history of completed tasks — an append-only log per entity. It powers streaks, “last watered” displays, and the adaptive model that learns a user’s real cadence versus the recommended one.
- Personalized care recommendations based on species — join the identified species against a care database, then adjust for the user’s climate. This is where you show you can separate static reference data from per-user state.
Plant identification
Image classification model:
- Cloud model (PictureThis-style): high accuracy, ~99%, requires network. Larger model, easy to update centrally, but adds latency and a per-call inference cost you may want to cache by image hash.
- On-device model: 80–95%, works offline. A quantized model (Core ML / TensorFlow Lite) that trades accuracy for zero latency and privacy — the photo never leaves the phone.
- Hybrid: on-device for common species, cloud for unknown. Run the local model first; if top confidence is below a threshold, fall back to the cloud. This is usually the answer interviewers want because it balances cost, speed, and accuracy.
Many apps offer expert botanist verification for uncertain identifications — paid premium feature.
Care schedule
Each plant/pet has tasks:
- Recurring (water every 5 days, walk daily) — stored as an interval plus an anchor date so you compute the next due time instead of pre-generating rows forever.
- One-time (annual vet visit) — a single dated task that does not regenerate after completion. Useful for showing you handle both fixed and repeating cases in one model.
- Adaptive (based on season, weather, growth) — the interval is not a constant; it is a function that recomputes each cycle from external signals, covered next.
The “recurring” patterns are similar to a habit tracker but per-entity rather than per-user habit.
Adaptive scheduling
Smart apps adjust based on:
- Weather (rainy week → skip watering) — pull the local forecast and suppress or delay a watering task when meaningful rain is expected, so you do not tell someone to water a plant that just got soaked.
- Season (winter dormancy) — stretch intervals in the dormant months; many houseplants need far less water in winter, so a fixed five-day cycle would overwater them.
- Plant growth (younger plants need different care) — seedlings and recently repotted plants need more frequent attention, so let the interval change as the plant ages.
- User patterns (often forgets to water; remind earlier) — read the completion log: if a user consistently acts a day late, shift the reminder earlier rather than nagging repeatedly.
Weather data integration via OpenWeatherMap or similar.
Reminders
Local notifications scheduled via:
- iOS: UNUserNotificationCenter
- Android: AlarmManager + WorkManager
Constraints:
- iOS limit: 64 pending notifications — the OS caps how many local notifications one app can have queued, so you cannot naively schedule one per task for a user with dozens of plants.
- Schedule a sliding window (next 64 tasks) — queue only the soonest tasks, then top the window back up whenever the app wakes, a task fires, or the app enters the background.
- Re-schedule when user completes / postpones / changes settings — any of these shifts due dates, so tear down and rebuild the pending window to keep it accurate.
Photos
User photos for each plant/pet over time:
- Track growth visually — a dated photo timeline per entity so users see progress, which is one of the strongest retention drivers in these apps.
- Spot disease (yellowing leaves) — regular photos give an early-warning trail; a diagnosis feature can compare the latest shot against healthy references.
- Compare against ML reference for diagnosis — feed the photo to a second classifier trained on common ailments (pests, root rot, nutrient deficiency) rather than species.
Storage: local photos for the user’s collection; cloud sync optional.
Care recommendations
Per species:
- Water schedule — the base interval before adaptive adjustments, e.g. a succulent every 10–14 days versus a fern every 2–3.
- Sunlight needs — full sun, bright indirect, or low light; pair this with the plant’s stored location to flag mismatches.
- Soil type — well-draining, moisture-retaining, or acidic, which also informs fertilizer and repotting advice.
- Common diseases — the ailments to watch for per species, wiring directly into the photo-diagnosis feature above.
- Optimal temperature range — used with the user’s climate zone to warn about cold windowsills in winter or heat stress in summer.
Curated database of thousands of species. Recommendations adapted to user’s climate (zip code → climate zone).
Multi-user (household)
Family members share plant/pet care:
- Shared collection — one set of entities visible to every household member, which turns the data model from single-owner into a shared workspace with membership and roles.
- “Who watered last” tracking — attribute each completed task to a user id so the history log answers accountability questions, not just timing.
- Notifications sent to whoever is responsible today — assign or rotate a task owner so two people are not both pinged for the same watering, and only the owner’s device fires the reminder.
Offline behavior
- Care schedule is local — works offline. The schedule engine and completion log live on-device, so the core loop never depends on the network.
- Plant ID requires network for cloud-based; local model for offline. Ship the on-device model as the offline path and queue any cloud re-check for when connectivity returns.
- Photos stored locally first; sync to cloud when online. Write to local storage immediately, mark records dirty, and reconcile on reconnect so a user in a garden with no signal loses nothing.
Battery and data
Light. Care apps are check-and-leave. Notifications are scheduled locally.
Frequently Asked Questions
How accurate is plant identification?
Cloud models hit 95%+ on common houseplants. Edge cases (rare species, ambiguous flowers) drop to 70–80%. Many apps offer expert review.
How do you handle a user with 100+ plants?
Bulk operations. “Mark all as watered.” Group plants by location. Filtered views.
What about pet medical records?
Many apps integrate with vet records via export. Storage encrypted; some apps offer share-with-vet links.
Keep sharpening your system design:
